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

是否可以组合使用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的生成器不必担心固定的顺序(并打开信息泄漏的辅助通道,这对某些人来说很重要),但也使得模式在数据提供者和数据之间的合同文档中不那么有用消费者.

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念