是否可以允许任何有效的 XML 作为 XSD 中元素的子级?



我知道XSD的全部意义在于定义XML的结构,但是是否可以让子级成为任何有效的XML?例如:

如果我有这个 XSD

<xsd:complexType name="soExample">
<xsd:all>
<xsd:element name="field1" type="xsd:integer" />
</xsd:all>
</xsd:complexType>

有效的 XML 是

<soExample>
<field1>25</field1>
</soExample>

现在我想要一个特殊的字段field2它允许我把任何可以解析的XML放在里面,XSD看起来像:

<xsd:complexType name="soExample">
<xsd:all>
<xsd:element name="field1" type="xsd:integer" />
<xsd:element name="field2" type="so:special" />
</xsd:all>
</xsd:complexType>

有效的 XML 将是:

<soExample>
<field1>25</field1>
<field2>
<anything>3</anything>
</field2>
</soExample>

<soExample>
<field1>25</field1>
<field2>
<cars>
<favorite>"miata"</favorite>
</cars>
</field2>
</soExample>

我有一种感觉这是不可能的,因为没有解决类型的好方法......但值得一问。

是的xsd:any的目的是允许在XML文档中的给定点使用任何XML:

<xsd:element name="field2"/>
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="skip"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

有关xsd:any/@processContents支持的各种值的说明,请参阅 xsd:any 的 processContent strict vs lax vs skip。

请注意,您也可以简单地不指定field2的内容模型:

<xsd:element name="field2"/>

另请参阅允许任何内容的 XML 架构 (xsd:any(。

最新更新