С помощью элемента xs:any я могу определить атрибуты любых элементов?

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

<xs:element name="parent">
  <xs:complexType>
    <xs:sequence>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

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

<xs:attribute name="attribute1" type="xs:string" use="required" />
<xs:attribute name="attribute2" type="xs:string"  />
<xs:attribute name="attribute3" type="xs:string" use="required" />

Итак, я думаю, что я действительно спрашиваю, могу ли я определить атрибуты для любого элемента? Ниже приведена структура, которую я хочу получить. Где дочерние элементы родителя могут иметь любое имя, но должны иметь атрибуты, указанные выше. Спасибо!

<parent>
    <AnyElementName1 attribute1="val1" attribute2="val2" attribute3="val3"/>
    <AnyElementName2 attribute1="val1" attribute2="val2" attribute3="val3"/>
    <AnyElementName3 attribute1="val1" attribute3="val3"/>
</parent>

person Dan Smith    schedule 21.07.2014    source источник


Ответы (1)


С помощью xs:any вы можете ограничить пространство имен элементов и использовать processContents="strict" для требования, чтобы элемент был объявлен в схеме, но вы не можете ограничить элементы определенным типом. Возможно, вместо использования xs:any вам следует использовать xs:element с именем объявления абстрактного элемента, тип которого определяет требуемые атрибуты, а затем сделать все разрешенные элементы членами группы подстановки этого абстрактного элемента.

person Michael Kay    schedule 22.07.2014