在我编写应用程序的框架中,有许多xml文件,其中节点名称并不重要。所有有价值的信息都放在属性中。节点类型是通过其中一个属性定义的。仅定义属性的XSD架构
我想写这个文件的简单架构。我认为它应该满足两大条件:
- 每一个元素可以从定义的列表属性(例如名称,值类型[会有更多!])
- 每一个元素可以拥有的元素序列确切的定义
如果有可能使属性列表依赖于某些给定的(例如类型)参数,它将是非常有用的。
XSD文件可以处理这些XML文件吗?是否有可能编写这样的模式?如何定义任何节点的属性列表。
在我编写应用程序的框架中,有许多xml文件,其中节点名称并不重要。所有有价值的信息都放在属性中。节点类型是通过其中一个属性定义的。仅定义属性的XSD架构
我想写这个文件的简单架构。我认为它应该满足两大条件:
如果有可能使属性列表依赖于某些给定的(例如类型)参数,它将是非常有用的。
XSD文件可以处理这些XML文件吗?是否有可能编写这样的模式?如何定义任何节点的属性列表。
您需要为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类型。
您可以拥有一个只定义了一个complexType的模式,其中包含所有的属性。您的挑战是找到一个模式处理器,它的API允许您请求针对该指定类型的给定输入元素的验证。这样做的一个方法是使用感知模式的XSLT处理器(以及产生大量的输出,你可以放弃的)
<xsl:template match="*">
<xsl:copy-of select="." type="my-complex-type"/>
<xsl:apply-templates/>
</xsl:template>
将验证对您的类型声明的文档中的每个元素
我的可能性是有限的,因为我只扩展当前只处理xsd的现有类。太糟糕了:( –
不幸,正如我所说的节点名称不提供任何信息。开发人员可以绝对插入这里所有的定义元素名单是不可能的。 –
然后你需要使用xs:anyType类型。 –
你能提供我提到的条件的例子吗? –