XSD <anyAttribute> 元素

Elemen <anyAttribute> memberikan kami keupayaan untuk meluaskan dokumen XML melalui atribut yang belum disyarakkan oleh schema!

Elemen <anyAttribute>

Elemen <anyAttribute> memberikan kami keupayaan untuk meluaskan dokumen XML melalui atribut yang belum disyarakkan oleh schema!

contoh yang disediakan adalah bagian daripada XML schema yang dinamakan "family.xsd". Ia menunjukkan deklarasi untuk elemen "person". Dengan menggunakan elemen <anyAttribute>, kami dapat menambahkan sejumlah besar atribut kepada elemen "person":

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
    <xs:anyAttribute/>
  </xs:complexType>
</xs:element>

现在,我们希望通过 "gender" 属性来扩展 "person" 元素。在这种情况下我们就可以这样做,即使这个 schema 的作者从未声明过任何 "gender" 属性。

请看这个 schema 文件,名为 "attribute.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.codew3c.com"
xmlns="http://www.codew3c.com"
elementFormDefault="qualified">
<xs:attribute name="gender">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="male|female"/>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>
</xs:schema>

下面这个 XML(名为 "Myfamily.xml"),使用了来自不同 schema 的成分,"family.xsd" 和 "attribute.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns="http://www.microsoft.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.codew3c.com attribute.xsd">
<person gender="female">
<firstname>Jane</firstname>
<lastname>Smith</lastname>
</person>
<person gender="male">
<firstname>David</firstname>
<lastname>Smith</lastname>
</person>
</persons>

上述 XML 文件是有效的,因为 schema "family.xsd" 允许我们向 "person" 元素添加属性。

所有 <any> 和 <anyAttribute> 都可用于制作可扩展的文档!它们使文档能够包含未在主 XML schema 中声明的附加元素。