【问题标题】:XML Schema - validate elements of the same name [duplicate]XML Schema - 验证同名元素[重复]
【发布时间】:2021-08-24 14:52:59
【问题描述】:

我有<range> 元素,可以选择定义(节点中只有一个元素):

  1. 作为 xs:string <range>STH</range>

  2. 或作为复杂类型:

<range>
   <value>0x00</value>
   <value>0x01</value>
   <value>0x02</value>
</range>

如何验证? 我试过这样做:

> <xs:choice>
>     <xs:element name="range"  type="xs:string"/>
>     <xs:element name="range">
>         <xs:complexType>
>             <xs:sequence minOccurs="0" maxOccurs="unbounded">
>                 <xs:element name="value" type="xs:string" />
>             </xs:sequence>
>         </xs:complexType>
>     </xs:element> </xs:choice>

但仍然发生错误

提前致谢

【问题讨论】:

  • 错误是什么?

标签: xml xsd


【解决方案1】:

一个元素不能有两种类型。语法会模棱两可。即使是两个简单的类型也是无效的。

<xs:complexType>
    <xs:choice>
        <xs:element name="range" type="xs:integer"/>
        <xs:element name="range" type="xs:string"/>
    </xs:choice>
</xs:complexType>

details 参见标准。

必须形成一个内容模型,使得在元素信息项序列的“验证”过程中,直接、间接或“隐含”包含在其中的粒子组件可以依次尝试“验证”序列中的每个项目被唯一确定,无需检查该项目的内容或属性,也无需任何关于序列其余部分的项目的信息。

如果你有两个“范围”元素,一个是 A 类,一个是 B 类,只能通过分析内容来区分它们。这是不允许的。

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2011-12-19
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多