xml模式maxOccurs =在xs:all中是无界的

Cre*_*eep 2 xsd

是否有可能有一个组合xs:allxs:sequence

我有一个带有元素probenode的xml结构,它由元素名称,id,url,标签,优先级,statuws_raw,active组成。以及设备和组的组合。

设备和组可能出现零次或更多次...

以下解决方案不起作用,因为不允许对元素使用无界。在所有组中。

<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>
Run Code Online (Sandbox Code Playgroud)

C. *_*een 5

在XSD 1.0中,xs:all的子代必须将maxOccurs设置为1。

在XSD 1.1中,解除了此约束。

因此,您的替代方案似乎是:

  • 使用XSD 1.1处理器(Saxon或Xerces-J)。

  • 使用XSD 1.0并对probenodetype的子代施加命令。如果子级出现的顺序带有信息(因此id后跟url的URL与url后跟id的URL是不同的...),这将是一个问题。

在某些简单的情况下,编写仅使用选择和顺序就可以完全接受您建议的内容模型是可行的,但是如果使用了七个必需元素,那么生成的内容模型可能太长,太复杂而无法使用。

此时,一些用户放弃并编写具有可重复的OR组的复杂类型,并将检查名称,ID,URL等的责任转移到应用程序中,至少发生一次,最多一次。这使得XML的生成器不必担心固定顺序(并为信息泄漏打开了一条副渠道,这对某些人而言很重要),但也使该模式在用作数据提供者与数据之间的合同的文档记录时没有多大用处消费者。