XSD - 限制属性值到另一个元素属性值
问题描述:
我有下面的XML:XSD - 限制属性值到另一个元素属性值
<Content name="contentName1">
<!-- Some sub elements here -->
</Content>
<Sequence Name="sequenceName1">
<Content name="contentName1" />
<!-- Some sub elements here -->
</Sequence>
具有以下XSD
<xs:element maxOccurs="unbounded" name="Content">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required" />
<!-- other definitions here -->
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" name="Sequence">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Content">
<xs:complexType>
<xs:attribute name="ContentName" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
在XSD,我怎么能告诉的内容名属性Sequence的Content元素只接受在Content元素的ContentName中声明的值?
例如:使用上面提供的XML,只有contentName1将被序列内容接受。
答
身份约束定义用于实施唯一的主键和外键关系。您需要先为content元素定义一个关键元素,然后在内部元素中使用keyref作为模式验证器来强制执行您提到的条件。
请参考以下链接它有一些例子还有,也xfront了XSD的教程介绍了一些例子 -
http://www.w3.org/TR/xmlschema11-1/#Identity-constraint_Definition_details
http://www.xfront.com/files/xml-schema.html
答
我不是XSD也很好,但也许你会改变<xs:attribute name="Name" type="xs:string" use="required" />
到<xs:attribute name="Name" type="contentNames" use="required" />
,并创建
<xs:simpleType name="contentNames" >
<xs:restriction base="xs:token">
<xs:enumeration value="contentName1"/>
<xs:enumeration value="contentName2"/>
<xs:pattern value="contentName[1234567890][1234567890]"/>
<xs:enumeration value="contentName1"/>
</xs:restriction>
</xs:simpleType>
为
<xs:pattern value="contentName[1234567890][1234567890]"/>
contentName1-99,但不知道是否可以使用<xs:enumeration/>
过,你可以尝试