代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

XSD:要么/要么语法

  •  2
  • Ian Boyd  · 技术社区  · 14 年前

    如何在XSD中执行/或验证?e、 g.在下面的xml片段中,如果 action A ( 添加 ),则随后的属性和元素是 required :

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

    但是如果 行动 随后的属性和属性被禁止:

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

    即:如果 行动 删除 ( D ),则其余属性将从

    • 必修的

    • 禁止

    随后的元素从

    minOccurences="1" maxOccurrences="unbounded"
    

    minOccurrences="0" maxOccurrences="0"
    

    是否可以使用XSD定义xml结构?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Jon W    14 年前

    什么之中的一个 the big criticisms of XSD 是它的失败

    …不提供任何工具来声明一个属性的值或存在依赖于其他属性的值或存在(所谓的共现约束)。

    因此它不能像您描述的那样指定约束。在大多数情况下,我见过项目在XSD失败时使用XSLT验证文档。然而 other Schema languages 确实存在,你可能会有更多的成功。我听说有人改成 Relax NG 因为各种原因。

        2
  •  1
  •   Vezir123    11 年前

    在XSD版本1.1中,现在这是可能的。

    XSD 1.1

    工作组关于版本间更改的战略指导方针 1.0和1.1可概括如下:

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

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

    xs:断言

    另一个有用的新机制是

    类型可选组件提供布尔值之间的关联 条件(作为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