簡體   English   中英

如何在XSD中限制元素的屬性?

[英]How to restrict an attribute of an element in XSD?

我有這個XML代碼:

 <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>

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

<?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>

使用xs:restriction通過xs:enumeration將屬性限制為一組固定的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還允許使用namefnamelname根元素。 這看起來不對。 也許您應該在本地而不是全局定義全部或部分內容。

以下是所有上述調整的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM