3

我想编写一个 XSD 来验证 XML 文件。XML 文件的示例可能如下所示:

<person>
    <fullname>John Doe</fullname>
    <age>25</age>
    <gender>male</gender>
</person>

其中一项要求是<person>标签是可扩展的,这意味着除了上面需要的 3 个子元素之外,它还可以包含任意名称的任意元素。因此,该文档在通过 XSD 验证时有效。

 <person>
    <fullname>John Doe</fullname>
    <age>25</age>
    <gender>male</gender>
    <address>USA</address>
    <profession>worker</profession>
</person>

我阅读了有关<xs:any />元素的信息,但 XSD 不允许我放入<xs:any />元素<xs:all />中。我希望<fullname>,<gender><age>元素是必需的,并且它们中的每一个都必须恰好出现一个。除此之外,可以有零个或多个可选元素。

是否可以使用受支持的 XSD 规则来实现这一点?

4

1 回答 1

0

结合 xs:all 和 xs:any 可以创建模棱两可的内容,这就是不允许的原因。但如果内容包含在 xs:sequence 中,您可以这样做。

注意:确保 xs:any 上的命名空间和 processContent 属性已根据您的要求正确设置。

他们在 XSD 1.1 中使用xs:openContent标签更好地支持这种可扩展性,但是对 XSD 1.1 的支持。仍然有限。

在此处输入图像描述

 <?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML 2016 Developer Bundle Edition 14.1.3.6618 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="fullname" type="xs:string" />
                <xs:element name="age" type="xs:int" />
                <xs:element name="gender">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:enumeration value="male" />
                            <xs:enumeration value="female" />
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:any namespace="##any" processContents="skip" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
于 2016-07-22T09:20:52.383 回答