2016-04-26 100 views
1

我有這樣的XML代碼:如何在XSD中限制元素的屬性?

<student> 
    <name sex="male"> 
     <fname></fname> 
     <lname></lname> 
    </name> 
</student> 

我想要做的是限制添加到sex屬性。 sex屬性應該只取男性女性作爲它們的值。 我有製作這個XML Schema的基本知識。到目前爲止,我所做的是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="name" type="nameType"/> 
    <xs:element name="fname" type="xs:string"/> 
    <xs:element name="lname" type="xs:string"/> 
    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="nameType"> 
     <xs:sequence> 
      <xs:element ref="fname"></xs:element> 
      <xs:element ref="lname"></xs:element> 
     </xs:sequence> 
     <xs:attribute name="sex"></xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="studentType"> 
     <xs:sequence> 
      <xs:element ref="name"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

回答

0

您可以如下圖所示添加限制屬性的值:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="name" type="nameType"/> 
    <xs:element name="fname" type="xs:string"/> 
    <xs:element name="lname" type="xs:string"/> 
    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="nameType"> 
     <xs:sequence> 
      <xs:element ref="fname"></xs:element> 
      <xs:element ref="lname"></xs:element> 
     </xs:sequence> 
     <xs:attribute name="sex"> 
      <xs:simpleType> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="ar"></xs:enumeration> 
        <xs:enumeration value="en"></xs:enumeration> 
       </xs:restriction> 
      </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="studentType"> 
     <xs:sequence> 
      <xs:element ref="name"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 
0

使用xs:restriction將屬性限制爲一組固定的枚舉通過xs:enumeration

<xs:attribute name="sex"> 
    <xs:simpleType> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="male"/> 
     <xs:enumeration value="female"/> 
    </xs:restriction> 
    </xs:simpleType> 
</xs:attribute> 

另外兩個意見:

  1. 您可以通過<el/>表示法縮短空元素。
  2. 除了允許使用student根元素,您的XSD將允許 允許name,fnamelname根元素。這看起來不是 的權利。也許你應該定義全部或部分本地 而不是全局。

這是您的XSD與上述所有調整:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="student" type="studentType"/> 

    <xs:complexType name="studentType"> 
    <xs:sequence> 
     <xs:element name="name" type="nameType"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="nameType"> 
    <xs:sequence> 
     <xs:element name="fname" type="xs:string"/> 
     <xs:element name="lname" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute name="sex"> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="male"/> 
      <xs:enumeration value="female"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 

</xs:schema> 
+0

非常感謝您@kjhughes!感謝您的建議。 –

+0

不客氣。如果有幫助,請[**接受**](http://meta.stackoverflow.com/q/5234/234215)這個答案。謝謝。 – kjhughes