好的-发现我必须在模式中使用“key”和“keyref”。
首先-修改后的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<subjectType>
<subject idref="plane"/>
<subject idref="bird"/>
</subjectType>
<questionType>
<question idref="organic"/>
<question idref="awesome"/>
</questionType>
<subjectInterview id="plane">
<question id="organic">false</question>
<question id="awesome">true</question>
</subjectInterview>
<subjectInterview id="bird">
<question id="organic">true</question>
<question id="awesome">false</question>
</subjectInterview>
</root>
这是模式:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="subjectType" type="subjectType" maxOccurs="unbounded"/>
<xs:element name="questionType" type="questionType" maxOccurs="unbounded"/>
<xs:element name="subjectInterview" type="subjectInterview" maxOccurs="unbounded">
<xs:key name="questionID">
<xs:selector xpath="./question"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="subjectID">
<xs:selector xpath="./subjectInterview"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:keyref name="subjectIDref" refer="subjectID">
<xs:selector xpath="./subjectType/subject"/>
<xs:field xpath="@idref"/>
</xs:keyref>
<xs:keyref name="questionIDref" refer="questionID">
<xs:selector xpath="./questionType/question"/>
<xs:field xpath="@idref"/>
</xs:keyref>
</xs:element>
<xs:complexType name="subjectInterview">
<xs:sequence maxOccurs="unbounded">
<xs:element name="question" type="question"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
<xs:complexType name="question">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="subjectType">
<xs:sequence>
<xs:element name="subject" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="idref" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="questionType">
<xs:sequence>
<xs:element name="question" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="idref" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
对那些试图做同样事情的人来说应该是一个不错的基础。