XSD: либо / или синтаксис - PullRequest
       0

XSD: либо / или синтаксис

2 голосов
/ 17 ноября 2010

Как я могу сделать или / или проверку в XSD? например в следующем фрагменте XML, если action равно A ( добавить ), то последующие атрибуты и элементы required:

<Post postID="22793" action="A" ...>
   <Transaction ...>
      <Disposition ...>
         <AccountInformation ... />
         <ThirdPartyInformation ... />
      </Disposition>
      <IndividualInformation ... />
   </Transaction>

   ...
</Post>

но если действие равно D , то последующие атрибуты и атрибуты запрещены ::

<Post postID="22793" action="D" />

То есть: если действие равно удалить (D), то остальные атрибуты изменятся с

  • обязательны для заполнения

до

  • запрещено

и последующие элементы переключаются с

minOccurences="1" maxOccurrences="unbounded"

до

minOccurrences="0" maxOccurrences="0"

Можно ли использовать XSD для определения структуры XML?

Ответы [ 2 ]

5 голосов
/ 17 ноября 2010

Одной из большой критикой XSD является ее неспособность

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

Таким образом, он не может указывать ограничения, подобные описанным вами.В большинстве случаев я видел проекты, использующие XSLT для проверки своих документов в случае сбоя XSD.Однако другие языки схемы существуют, и вы можете добиться большего успеха с ними.Я слышал, что некоторые люди по разным причинам переходят на Relax NG .

1 голос
/ 11 декабря 2013

В версии 1.1 XSD теперь это возможно.

XSD 1.1

Стратегические рекомендации Рабочей группы по изменениям между версиями 1.0 и 1.1 можно обобщитьследующим образом:

2.Поддержка ограничений совместного вхождения (что, безусловно, будет связано с дополнениями к синтаксису передачи XML, которые не будут поняты процессорами 1.0)

Конечно,XPATH 2.0 используется для утверждений простых и сложных типов.Для этой цели определен новый тег.

xs: assert

Еще один полезный новый механизм -

Тип Альтернативные компоненты обеспечивают связи междулогические условия (как выражения XPath) и определения типов.Они используются в условном присвоении типа.

xs: альтернатива

<xs:element name="title" type="xs:anyType">
  <xs:alternative test="@type='text'" type="xs:string"/>
  <xs:alternative test="@type='html'" type="htmlContentType"/>
  <xs:alternative test="@type='xhtml'" type="xhtmlContentType"/>
  <xs:alternative test="@type" type="xs:error"/>
  <xs:alternative type="xs:string"/>
</xs:element>

Подробнее можно прочитать в this

...