xml模式xsd任意元素
我正在尝试编写一个模式,用于验证具有以下结构的XML文档:xml模式xsd任意元素,xml,validation,xsd,Xml,Validation,Xsd,我正在尝试编写一个模式,用于验证具有以下结构的XML文档: <?xml version="1.0" encoding="UTF-8"?> <RootElement> <Group1> <Group1Member1 value="true"/> <Group1Member2 value="false"/> <Group1Member3 value="true"/> </Group1>
<?xml version="1.0" encoding="UTF-8"?>
<RootElement>
<Group1>
<Group1Member1 value="true"/>
<Group1Member2 value="false"/>
<Group1Member3 value="true"/>
</Group1>
<Group2>
<Group2Member1 source="INA"/>
<Group2Member2 source="INB"/>
<Group2Member3 source="INC"/>
<Group2Member4 source="IND"/>
</Group2>
<Group3>
<Group3Member1 source="INY"/>
<Group3Member2 source="INZ"/>
</Group3>
<Group4>
<Group4Member device="D1" maxTemp="100" hysteresis="5" />
<Group4Member device="D2" maxTemp="120" hysteresis="2" />
<Group4Member device="D3" maxTemp="50" hysteresis="1" />
</Group4>
<RootElement>
关键在于:
- Group1、Group2、Group3和Group4是可选的,可以按任何顺序出现0次或1次
- 每个组的成员元素可以以任何顺序出现
- 在Group4中,Group4Member可能出现0到4次,包括0到4次
- 此处未显示的任意数量的元素可能出现在RootElement或任何组中的任何位置——它们和它们体内的任何东西都将被忽略
- 必须忽略任何已知元素中的未知属性
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="RootElement">
<xs:complexType>
<xs:all>
<xs:element name="Group1" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group1Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group1Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group1Member3" maxOccurs="1">
<xs:complexType>
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="true" />
<xs:enumeration value="false" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group2" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group2Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member3" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group2Member4" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INA" />
<xs:enumeration value="INB" />
<xs:enumeration value="INC" />
<xs:enumeration value="IND" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group3" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="Group3Member1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INY" />
<xs:enumeration value="INZ" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Group3Member2" maxOccurs="1">
<xs:complexType>
<xs:attribute name="source" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="INY" />
<xs:enumeration value="INZ" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
<xs:element name="Group4" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Group4Member" maxOccurs="4">
<xs:complexType>
<xs:attribute name="device" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="D1" />
<xs:enumeration value="D2" />
<xs:enumeration value="D3" />
<xs:enumeration value="D4" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="maxTemp" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="255" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="hysteresis" use="required">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="255" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
“xmllint”对没有未知标记或属性的文档感到满意
当我在“”和“”标记之前添加“”时,架构不再将额外(超过4)或无效(错误属性值)“”元素标记为错误
我可能在做一些愚蠢的事情,有可能有人可以很容易地找出我的问题,所以我在这里问
我还没有试过任何属性,我想我最终会成功的。此外,是否有任何方法使“”组允许任何成员元素出现0次或更多次(而不是0或1次)
感谢您的耐心等待,并提前向您提供帮助。将namespace属性添加到xs:any标记中,该标记的值为###other或##local。这样可以避免出现来自您自己名称空间的未经检查的标记。根据您的建议,我尝试过这样做。将其添加到“Group4”定义“”之前的“”标记中似乎有帮助,但将其添加到使用“”的其他组中会导致XML架构解析器和xmllint出现错误:“myschema.xsd:66:element any:Schemas解析器错误:element'{}.all':内容无效。应为(annotation?,(annotation?,,element*)。”“”我添加的元素在这两个位置是相同的。如果我将所有“xs:all”实例替换为“xs:sequence”,并使用元素“”,则架构将编译,但不会注意到架构标记中的额外内容,并且不再验证属性。当我将“##local”替换为“##other”时,架构仍在编译,但验证在第一个未知标记处失败,标记为“element Ignore:Schemas validity error:element'Ignore”:不应为此元素。应为(##other*)