XML和complexType的限制

XML和complexType的限制,xml,Xml,我的示例的模式 <xsd:element name="Subject" minOccurs="1" maxOccurs="1"> <xsd:annotation> <xsd:documentation>Name of the subject. Values are: Vaje, Kolokvij, Predavanje, Izpit</xsd:documentation> </xsd:annotation> <xsd:si

我的示例的模式

<xsd:element name="Subject" minOccurs="1" maxOccurs="1">
<xsd:annotation>
    <xsd:documentation>Name of the subject. Values are: Vaje, Kolokvij, Predavanje, Izpit</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="Vaje"/>
        <xsd:enumeration value="Kolokvik"/>
        <xsd:enumeration value="Predavanje"/>
        <xsd:enumeration value="Izpit"/>
    </xsd:restriction>
</xsd:simpleType>
</xsd:element>

<xsd:element name="Professor" minOccurs="1" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>Name of the professors</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="prof" type="Professors"/>
</xsd:complexType>
</xsd:element>
我想要什么?XML如下所示:

<Professors id="1" name="sss" surname="sss" code="15426" email="sss@sss.si"/>
<Professors id="2" name="fff" surname="ff" code="15446" email="ff@ff.si"/>

然后在稍后我将使用id中的数字1

<Subject>vaje</Subject>
<Professor>1</Professor>
vaje
1.
如何创建模式

如果“教授”元素没有属性,则可以将其定义为:

<xsd:element name="Professor" type="xsd:int"/>

它不需要具有内部属性。要将Professor元素的值限制为定义的Professor之一,需要使用key和keyref:

<!-- The root element of the instance document -->
<xsd:element name="Root">
    <xsd:complexType>
        <!-- Subject ref and definition omitted for brevity -->
        <xsd:element ref="Professors" maxOccurs="unbounded"/>
        <xsd:element ref="Professor" maxOccurs="unbounded"/>
    </xsd:complexType>
    <xsd:key name="ProfessorId"> 
        <xsd:selector xpath="Professors"/> 
        <xsd:field xpath="@id"/>
    </xsd:key>
    <xsd:keyref name="ProfessorIdRef" refer="ProfessorId"> 
       <xsd:selector xpath="Professor"/> 
       <xsd:field xpath="text()"/> 
    </xsd:keyref>
</xsd:element>

<xsd:element name="Professors">
    <xsd:complexType>
        <xsd:attribute name="id"/>
        <xsd:attribute name="name"/>
        <xsd:attribute name="surname"/>
        <xsd:attribute name="code"/>
        <xsd:attribute name="email"/>
    </xsd:complexType>
</xsd:element>

<xsd:element name="Professor" type="xsd:string"/>

<xsd:element name="Professor" type="xsd:int"/>
<!-- The root element of the instance document -->
<xsd:element name="Root">
    <xsd:complexType>
        <!-- Subject ref and definition omitted for brevity -->
        <xsd:element ref="Professors" maxOccurs="unbounded"/>
        <xsd:element ref="Professor" maxOccurs="unbounded"/>
    </xsd:complexType>
    <xsd:key name="ProfessorId"> 
        <xsd:selector xpath="Professors"/> 
        <xsd:field xpath="@id"/>
    </xsd:key>
    <xsd:keyref name="ProfessorIdRef" refer="ProfessorId"> 
       <xsd:selector xpath="Professor"/> 
       <xsd:field xpath="text()"/> 
    </xsd:keyref>
</xsd:element>

<xsd:element name="Professors">
    <xsd:complexType>
        <xsd:attribute name="id"/>
        <xsd:attribute name="name"/>
        <xsd:attribute name="surname"/>
        <xsd:attribute name="code"/>
        <xsd:attribute name="email"/>
    </xsd:complexType>
</xsd:element>

<xsd:element name="Professor" type="xsd:string"/>