包含未定义内容的XSD元素
我需要装配一个XSD模式来部分验证文件。文件结构为:包含未定义内容的XSD元素,xsd,Xsd,我需要装配一个XSD模式来部分验证文件。文件结构为: <Root> <Node name="core"> <ElementA>String</ElementA> <ElementB>String</ElementB> </Node> <Node name="something unique"> (any number of ele
<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>
不完整且不完全正确,未命名的
无效
需要几个节点,每个节点都有唯一的name属性;这就是我想要验证的。名称列表以及这些节点的内容是预定义的
具有未知名称的节点的内容也是未知的,可以包含任意数量的具有任何名称和类型的元素,但其本身不得具有属性或值
我遇到的问题是允许子元素而不知道它们的名称
有可能用XSD做这样的事情吗?有没有一种方法可以拥有复杂类型的元素或anyType和属性
编辑:使用
名称作为元素类型,然后只允许使用未知名称的其他元素,这也是可以接受的。无论哪种方式,我都需要允许具有未知名称和类型的节点。要允许“不知道名称的子元素”,您可以使用xsd:any;将其作为重复粒子添加到特定(在“设计时”已知)内容之后
那么您建议区分必需元素和可选元素?在这种情况下,有两个(或更多)名字吗?是的。但是,如果这是您的意思,您不必将xsd:any放在包装器元素下;然而,这是一种相当普遍的模式。不过,我会做一件不同的事情,那就是为Extensions元素定义一个全局复杂类型,允许使用您的模式的人自己重新定义,以防他们想要“强类型”它。我只是想快速向您展示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>