首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XML模式中属性值的唯一性

XML模式中属性值的唯一性
EN

Stack Overflow用户
提问于 2018-04-10 15:26:59
回答 1查看 30关注 0票数 0

目前我有这个XML文件。

代码语言:javascript
运行
复制
<Vehicles>
    <Car id="0" name="Kia" />
    <Car id="1" name="Opel"/>

    <Plane id="0" name="Airbus"/>
    <Plane id="1" name="Boeing" />
</Vehicles>

以及它的模式:

代码语言:javascript
运行
复制
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="VehicleType">
    <xs:attribute name="id" type="xs:int" />
    <xs:attribute name="name" type="xs:string" />
</xs:complexType>

<xs:element name="Vehicles">
    <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Car" type="VehicleType" />
            <xs:element name="Plane" type="VehicleType" />
        </xs:choice>
    </xs:complexType>

    <xs:unique name="CarIdsMustBeUnique">
        <xs:selector xpath="Car" />
      <xs:field xpath="@id"/>
    </xs:unique>

    <xs:unique name="PlaneIdsMustBeUnique">
        <xs:selector xpath="Plane" />
      <xs:field xpath="@id"/>
    </xs:unique>

</xs:element>

正如你所看到的,我希望汽车和飞机的id是独一无二的,但我必须写两个独特的块来实现它。我能否尽量减少代码重复并加入xs:在一个更复杂的选择器中具有独特的特性?因为如果我将增加另一辆车(例如火车),我会强迫写非常简单的独特的块。

我懒得写一些非常独特的块:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-10 17:32:08

在您的示例中,有一辆带有@id=0的汽车,也有一架带有@id=0的飞机。这意味着有两组独立的唯一ID,一组用于汽车,另一组用于飞机,因此必须有两个单独的唯一约束。如果所有车辆的id必须是唯一的,无论车辆类型如何,那么您将能够将这些约束组合成一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49757524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档