加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xsd – xml架构maxOccurs =在xs:all中无界限

发布时间:2020-12-16 07:51:41 所属栏目:百科 来源:网络整理
导读:是否可以组合使用xs:all和xs:sequence? 我有一个带有元素probenode的xml结构,它由元素name,id,url,tags,priority,statuws_raw,active组成.以及设备和组合的组合. 设备和组可以出现零次或多次…… 下面的解决方案不起作用,因为不允许对元素使用unbounded.
是否可以组合使用xs:all和xs:sequence?

我有一个带有元素probenode的xml结构,它由元素name,id,url,tags,priority,statuws_raw,active组成.以及设备和组合的组合.

设备和组可以出现零次或多次……

下面的解决方案不起作用,因为不允许对元素使用unbounded.在一个团体中.

<xs:complexType name="probenodetype">
    <xs:all>
        <xs:element name="name" type="xs:string" />
        <xs:element name="id" type="xs:unsignedInt" />
        <xs:element name="url" type="xs:string" />
        <xs:element name="tags" />
        <xs:element name="priority" type="xs:unsignedInt" />
        <xs:element name="status_raw" type="xs:unsignedInt" />
        <xs:element name="active" type="xs:boolean" />
        <xs:element name="device" type="devicetype" minOccurs="0" maxOccurs="unbounded">
            <!-- zie devicetype -->
        </xs:element>
        <xs:element name="group" type="grouptype" minOccurs="0" maxOccurs="unbounded">
            <!-- zie grouptype -->
        </xs:element>
    </xs:all>
    <xs:attribute name="noaccess" type="xs:integer" use="optional" />
</xs:complexType>
在XSD 1.0中,xs:all的子节点必须将maxOccurs设置为1.

在XSD 1.1中,这个约束被解除了.

所以你的选择似乎是:

>使用XSD 1.1处理器(Saxon或Xerces-J).
>使用XSD 1.0并对probenodetype的子项执行命令.如果子项出现的顺序包含信息(因此id后跟url不同于url后跟id …),这是一个问题.

在一些简单的情况下,编写一个内容模型是可行的,只使用选择和序列来精确接受您建议的内容,但是使用七个必需元素,结果内容模型可能太长而且复杂而无用.

此时,一些用户放弃并编写具有可重复OR组的复杂类型,并移动检查该名称,url等的责任,所有这些都至少出现一次,最多一次进入应用程序;这允许XML的生成器不必担心固定的顺序(并打开信息泄漏的辅助通道,这对某些人来说很重要),但也使得模式在数据提供者和数据之间的合同文档中不那么有用消费者.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读