我有以下XML:
<Content name="contentName1">
<!-- Some sub elements here -->
</Content>
<Sequence Name="sequenceName1">
<Content name="contentName1" />
<!-- Some sub elements here -->
</Sequence>
Run Code Online (Sandbox Code Playgroud)
使用以下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>
Run Code Online (Sandbox Code Playgroud)
在XSD中,如何告诉Sequence的Content元素的ContentName属性只接受在Content元素的ContentName中声明的值?
例如:使用上面提供的XML,在序列内容中只接受contentName1.
身份约束定义用于强制执行唯一的主键和外键关系。您需要首先为内容元素定义一个关键元素,然后在模式验证器的内部内容元素中使用 keyref 来强制执行您提到的条件。
请参阅下面的链接,它也有一些示例,xfront for xsd 中的教程也涵盖了一些示例 -
http://www.w3.org/TR/xmlschema11-1/#Identity-constraint_Definition_details
http://www.xfront.com/files/xml-schema.html