是否可以允许任何有效的 XML 作为 XSD 中元素的 child?
Is it possible to allow any valid XML as a child of an element in an XSD?
我知道 XSD 的全部意义在于定义 XML 的结构,但是是否可以让 child 成为 任何有效的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
的目的是让anyXML 在 XML 文档中的给定点:
<xsd:element name="field2"/>
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="skip"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
有关 xsd:any/@processContents
支持的各种值的说明,请参阅 processContents strict vs lax vs skip for xsd:any。
请注意,您也可以不指定 field2
的内容模型:
<xsd:element name="field2"/>
另见 XML Schema that allows anything (xsd:any)。
我知道 XSD 的全部意义在于定义 XML 的结构,但是是否可以让 child 成为 任何有效的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
的目的是让anyXML 在 XML 文档中的给定点:
<xsd:element name="field2"/>
<xsd:complexType>
<xsd:sequence>
<xsd:any processContents="skip"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
有关 xsd:any/@processContents
支持的各种值的说明,请参阅 processContents strict vs lax vs skip for xsd:any。
请注意,您也可以不指定 field2
的内容模型:
<xsd:element name="field2"/>
另见 XML Schema that allows anything (xsd:any)。