XSD <any>Элемент


Элемент <any> позволяет нам расширять XML-документы элементами, не указанными в схеме!


Элемент <any>

Элемент <any> позволяет нам расширять XML-документы элементами, не указанными в схеме!

Следующий пример — это фрагмент, взятый из XML-схемы с именем "family.xsd". Он показывает объявление для элемента "person". Используя элемент <any>, мы можем расширить содержимое "person" любым элементом (после <lastname>):

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

Теперь мы хотим расширить элемент "person" элементом "children". В этом случае мы можем это сделать, даже несмотря на то, что автор приведенной выше схемы не объявил никакого элемента "children".

Взгляните на этот файл схемы с именем "children.xsd":

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">

<xs:element name="children">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="childname" type="xs:string"
      maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

Следующий XML-файл (с именем "Myfamily.xml") использует элементы из двух разных схем, "family.xsd" и "children.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.w3schools.com children.xsd">

<person>
  <firstname>Hege</firstname>
  <lastname>Refsnes</lastname>
  <children>
    <childname>Cecilie</childname>
  </children>
</person>

<person>
  <firstname>Stale</firstname>
  <lastname>Refsnes</lastname>
</person>

</persons>

Приведённый выше XML-файл является допустимым, потому что схема "family.xsd" позволяет нам расширять элемент "person" необязательными элементами после элемента "lastname".

Как <any>, так и <anyAttribute> можно использовать для создания расширяемых документов! Они дают документам возможность содержать дополнительные элементы, которые не были объявлены в основной XML-схеме.

Другие расширения