Элемент XSD с неопределенным содержимым - PullRequest
3 голосов
/ 30 ноября 2011

Мне нужно настроить схему XSD, которая будет частично проверять файлы.Структура файла:

<Root>
    <Node name="core">
        <ElementA>String</ElementA>
        <ElementB>String</ElementB>
    </Node>
    <Node name="something unique">
        (any number of elements, with unknown names and types)
    </Node>
</Root>

Мой XSD выглядит примерно так:

<xs:element name="Root">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="Node">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element maxOccurs="unbounded" />
                    </xs:sequence>                        
                    <xs:attribute name="name" type="xs:string" />
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Что неполно и не совсем правильно, неназванный <xs:element> недействителен.

Требуется несколько узлов, а также каждый узел, имеющий уникальный атрибут имени;это то, что я хочу подтвердить.Список имен и содержимое этих узлов предопределено.

Содержимое узлов с неизвестными именами также неизвестно и может содержать любое количество элементов с любым именем и типом, но не должно иметь атрибутов или самих значений.

Часть, которую явозникли проблемы с разрешением дочерних элементов без знания их имен.

Можно ли вообще сделать что-то подобное с XSD?Есть ли способ иметь сложный тип элементов или anyType и атрибут?

Редактировать: Было бы так же приемлемо использовать <Node> name s кактип элемента, а затем просто разрешить дополнительные элементы с неизвестными именами.В любом случае мне нужно разрешить узлы с неизвестным именем и типом.

1 Ответ

8 голосов
/ 30 ноября 2011

Чтобы разрешить "дочерние элементы, не зная их имен", вы можете использовать xsd: any;добавьте его в качестве повторяющейся частицы после вашего конкретного (известного во время разработки) содержимого.

<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Root">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Node">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="ElementA" type="xsd:string" />
              <xsd:element name="ElementB" type="xsd:string" />
            </xsd:sequence>
            <xsd:attribute name="name" type="xsd:string" use="required" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Extensions" minOccurs="0">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:any maxOccurs="unbounded"     processContents="lax"/>
                </xsd:sequence>
                <xsd:anyAttribute processContents="lax"/>
            </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...