我想创建一个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规则实现此目的?
答案 0 :(得分:0)
组合xs:all和xs:any可以创建含糊不清的内容,这就是为什么不允许这样做的原因。但是,如果内容包含在xs:sequence中,则可以执行此操作。
注意:确保xs:any上的namespace和processContent属性已根据您的要求正确设置。
他们使用xs:openContent标签更好地支持XSD 1.1中的这种可扩展性,但支持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>