Проблема DTD (или XSD) с повторяющимся элементом имени, имеющим разные области действия

Я извлек xml-фрагмент, над которым я работаю для DTD, практически мне нужно конкретное объявление для ресурса, содержащегося в ресурсах тега, и другое другое объявление для ресурса, содержащегося во вводе тега. Проблема в том, что первый требует атрибута id, второй не требует атрибута id, потому что использует альтернативные атрибуты. Можно ли объявить что-то вроде (псевдокодированным):

Фрагмент xml:

<xml>

  <resources>
    <resource id="somedir">sometpath</resource>
  </resources>

...

  <input>
    <resource exists="false">
      <path>somepath</path>
    </resource>
  </input>

</xml>

Возможно ли это с помощью DTD или XSD?

Спасибо


person Steel Plume    schedule 01.04.2010    source источник


Ответы (1)


С DTD - нет, XSD - да. Что-то типа:

<xs:element name="root" type="r:rootType"/>
<xs:complexType name="rootType">
    <xs:sequence>
        <xs:element name="resources" type="r:resourcesType"/>
        <xs:element name="input" type="r:inputType"/>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="resourcesType">
    <xs:sequence>
        <xs:element name="resource" type="r:resourceType" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="inputType">
    <xs:sequence>
        <xs:element name="resource" type="r:inputResourceType" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
...
person lexicore    schedule 01.04.2010