我需要安装一个可以部分验证文件的XSD架构。文件结构是:
<Root>
<Node name="core">
<ElementA>String</ElementA>
<ElementB>String</ElementB>
</Node>
<Node name="something unique">
(any number of elements, with unknown names and types)
</Node>
</Root>
我的XSD类似于:
<xs:element name="Root">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Node">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
哪个不完整且不完全正确,未命名的<xs:element>
无效。
需要一些节点,以及每个节点都有唯一的name属性;这是我想验证的。名称列表和这些节点的内容是预定义的。
名称未知的节点的内容也是未知的,可能包含任意数量的具有任何名称和类型的元素,但不得自行拥有属性或值。
我遇到麻烦的部分是允许子元素而不知道他们的名字。
是否可以使用XSD执行此类操作?有没有办法拥有复杂类型的元素,anyType和属性?
编辑:使用<Node>
name
作为元素类型,然后只允许使用名称未知的其他元素,这是可以接受的。无论哪种方式,我都需要允许名称和类型未知的节点。
答案 0 :(得分:8)
要允许“不知道名字的子元素”,你可以使用xsd:any;在特定的(在“设计时”)内容之后将其添加为重复粒子。
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Node">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ElementA" type="xsd:string" />
<xsd:element name="ElementB" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:element name="Extensions" minOccurs="0">
<xsd:complexType>
<xsd:sequence>
<xsd:any maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
<xsd:anyAttribute processContents="lax"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>