引用XML Schema中作为复杂类型一部分的元素

时间:2013-11-22 08:38:07

标签: xml xsd

我有以下xml架构:

<?xml version="1.0" encoding="ISO-8859-1" ?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="Assignments_Hello">
            <xs:complexType>
                <xs:sequence>

                    <xs:element name="Student">
                        <xs:complexType >
                            <xs:sequence>
                                <xs:element name="ID">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:pattern value="[a-zA-Z0-9]{3}[0-9]"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>

                                <xs:element name="Name" type="xs:string"  minOccurs="1" maxOccurs="1"/>

                                <xs:element name="Phone"  minOccurs="1" maxOccurs="1">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:pattern value="[1-9][0-9]{2}-[1-9][0-9]{2}-[0-9]{4}"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>

                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>

                    <xs:element name="Assignment">
                        <xs:complexType>
                            <xs:sequence>

                                <xs:element name="AssignID">
                                    <xs:simpleType>
                                        <xs:restriction base="xs:string">
                                            <xs:pattern value="[1-9]{4}"/>
                                        </xs:restriction>
                                    </xs:simpleType>
                                </xs:element>

                                <xs:element name="Topic"/>

                                <xs:element name="StudentID" type or ref =**"#----Palceholder-------#"**/>

                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我希望Assignment下的StudentID元素具有Student / ID类型。我该如何替换占位符? 我尝试过put type =“Assignments_Hello / Student / ID”,但没有用

1 个答案:

答案 0 :(得分:0)

您需要在顶层声明类型并在两个位置引用它:

<xs:simpleType name="studentIdType">
    <xs:restriction base="xs:string">
        <xs:pattern value="[a-zA-Z0-9]{3}[0-9]"/>
    </xs:restriction>
</xs:simpleType>

 <xs:element name="Assignments_Hello">
      <xs:complexType>
          <xs:sequence>
              <xs:element name="Student">
                  <xs:complexType >
                      <xs:sequence>
                          <xs:element name="ID" type="studentIdType"/>
                          <!-- .... -->
                      </xs:sequence>
                  </xs:complexType>
              </xs:element>

              <xs:element name="Assignment">
                  <xs:complexType>
                      <xs:sequence>
                          <!-- ... -->
                          <xs:element name="StudentID" type="studentIdType" />

目前编写的架构只允许每个Student有一个Assignment和一个Assignments_Hello元素,但如果您将其调整为允许多个StudentID元素,那么您可能需要考虑使用密钥 keyref 来确保学生ID是唯一的,并且每个作业的ID确实对应于{{1}}其中一个学生。