XSD для определения свободного формата, кроме одного пространства имен - PullRequest
0 голосов
/ 22 декабря 2011

В файле XML я хотел бы использовать свободный формат в пространстве имен по умолчанию, но в разных местах должны быть разрешены некоторые элементы, которые находятся в определенном пространстве имен. Я только хочу, чтобы эти элементы были проверены. Итак, я хочу что-то вроде этого:

<document xmlns:x="http://myNamespace">
  <someElement1>
    <x:toBeValidated1/>
    <someElement2>
      <x:toBeValidated2 someAtt="someValue">
        <someMoreStuff/>
      </x:toBeValidated2>
    </someElement2>
  </someElement1>
</document>

Вопрос в том, могу ли я написать схему для проверки этого? Он должен допускать любой элемент где угодно, но элементы в пространстве имен http://myNamespace mu соответствуют их соответствующим определениям в схеме.

1 Ответ

0 голосов
/ 01 января 2012

Это может быть в основном .Вам необходимо определить схему, охватывающую типы, которые вы хотите проверить:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://myNamespace">
    <xs:element name="toBeValidated1">
        <xs:complexType>
            <xs:sequence/>
        </xs:complexType>
    </xs:element>

    <xs:element name="toBeValidated2">
        <xs:complexType>
            <xs:sequence>
                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
            </xs:sequence>
            <xs:attribute name="someAtt" type="xs:string"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

и импортировать ее в схему, которая определяет корневой элемент вашего документа:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import namespace="http://myNamespace" schemaLocation="other.xsd"/>
    <xs:element name="document" type="xs:anyType"/>
</xs:schema>

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

...