在我编写应用程序的框架中,有许多xml文件,其中节点名称并不重要。所有有价值的信息都放在属性中。节点类型通过属性之一定义。
我想为这些文件编写简单的架构。我认为它应该满足两个主要条件:
如果有可能使属性列表依赖于某些给定(例如类型)参数,那么它将非常有用。
XSD文件可以处理这些xml文件吗?是否可以编写这样的模式?如何定义任何节点的属性列表。
答案 0 :(得分:0)
您需要为要在xml实例中支持的每个元素和属性组合定义XSD类型。例如
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:all>
<!-- declarations of any of the types you can use -->
<xs:element name="MyType1" type="MyType1Type" />
<!-- etc.. -->
</xs:all>
</xs:complexType>
</xs:element>
<!-- Type definitions -->
<xs:complexType name="MyType1>
<xs:sequence>
<xs:element name="MyElement1" type="xs:string" />
<xs:element name="MyElement2" type="xs:date" />
<!-- etc.. -->
</xs:sequence>
<xs:attribute name="MyAttribute1" type="xs:string" />
<!-- etc.. -->
</xs:complexType>
<xs:complexType name="MyType2>
<xs:sequence>
<xs:element name="MyElement3" type="xs:string" />
<xs:element name="MyElement4" type="xs:date" />
<!-- etc.. -->
</xs:sequence>
<xs:attribute name="MyAttribute3" type="xs:string" />
<!-- etc.. -->
</xs:complexType>
<!-- etc.. -->
</xs:schema>
一旦定义了所有可能的类型,就可以支持任何xml文件。
希望这有帮助
编辑或使用xs:anyType类型。
答案 1 :(得分:0)
您可以拥有一个只定义complexType的模式,其中包含所有属性。然后,您面临的挑战是找到一个模式处理器,其API允许您根据该命名类型请求验证给定的输入元素。一种方法是使用模式感知的XSLT处理器:
<xsl:template match="*">
<xsl:copy-of select="." type="my-complex-type"/>
<xsl:apply-templates/>
</xsl:template>
将根据您的类型声明验证文档中的每个元素(并生成大量输出,您可以将其丢弃。)