XSD attributeGroup необязательно? - PullRequest
2 голосов
/ 27 марта 2009

У меня есть атрибут attributeGroup, определенный в моей схеме XSD. Из того, что я прочитал и опробовал, нет никакого способа, которым я мог бы указать необязательность использования всей группы (так, чтобы либо были указаны все атрибуты, либо ни одного), что-то вроде:

 <xs:attributeGroup name="NameDesc">
    <xs:attribute name="n" type="xs:string" use="required"/>
    <xs:attribute name="d" type="xs:string" use="required"/>
    <xs:attribute name="uinf" type="xs:string" use="required"/>
  </xs:attributeGroup>

  <xs:complexType name="g">
    <xs:attributeGroup ref="tns:NameDesc" use="optional" />
  </xs:complexType>

(обратите внимание на use = "required" Я добавил в ссылку attributeGroup, что недопустимо). Я прав или есть способ добиться этого?

Я прочитал Как сделать так, чтобы атрибут use (обязательный / необязательный) зависел от другого значения? , но я не уверен, что это применимо к моему случаю.

Ответы [ 2 ]

4 голосов
/ 27 марта 2009

Насколько я знаю (кто-то, пожалуйста, поправьте меня, если я ошибаюсь), невозможно сделать так, чтобы атрибуты зависели.

Не могли бы вы сделать атрибут attributeGroup фактическим элементом? Таким образом, весь элемент может присутствовать или отсутствовать как дочерний элемент.

Это также было бы лучше, если бы вы отображали свою схему на объекты.

0 голосов
/ 17 сентября 2013

Есть другой способ сделать это без использования attributeGroup. Вы можете использовать что-то вроде:

 <xs:complexType name="g">
 <xs:sequence>
  <xs:attribute name="type"/>
  <xs:sequence minOccurs="0" maxOccurs="1">
     <xs:attribute name="n" type="xs:string" use="required"/>
     <xs:attribute name="d" type="xs:string" use="required"/>
     <xs:attribute name="uinf" type="xs:string" use="required"/>
  </xs:sequence>
 </xs:sequence>
</xs:complexType>

Где minOccurs = "0" maxOccurs = "1" делает группу атрибутов из 3 элементов необязательной, и все необходимые, если используется один.

Ссылка: W3 Wiki

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...