XSD:Either / Or语法

时间:2010-11-17 19:48:14

标签: xml xsd switch-statement

如何在XSD中进行/或验证?例如在以下xml片段中,如果actionA add ),则后续属性和元素为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 个答案:

答案 0 :(得分:5)

其中一个the big criticisms of XSD

失败
  

...没有提供任何设施来声明一个属性的值或存在依赖于其他属性的值或存在(所谓的共现约束)。

所以它不能像你描述的那样指定约束。在大多数情况下,我看到项目使用XSLT来验证XSD失败的文档。但是other Schema languages确实存在,您可能会更成功。我听说有些人出于各种原因切换到Relax NG

答案 1 :(得分:1)

现在可以在XSD 1.1版中使用。

XSD 1.1

  

工作组关于版本之间变更的战略指导方针   1.0和1.1可归纳如下:

     

2.支持共现约束(这肯定会涉及XML传输语法的增加,这将不会被   1.0处理器)

当然,XPATH 2.0用于简单和复杂类型的断言。为此目的定义了一个新标记。

XS:断言

另一个有用的新机制是

  

Type Alternative组件提供boolean之间的关联   条件(作为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

中阅读更多内容