我需要对XML模式进行非规范化,以便为将创建符合模式的文档的人生成文档。用户不了解XSD,很可能永远不会学习。我见过的工具能够为其他XSD开发人员生成文档,但我的用户对如何构建模式的细节不感兴趣,他们只想知道他们能够和必须做些什么来创建有效的文档。
所以,我正在寻找一种方法来解析XML模式中的所有包含和引用,并生成一个非规范化版本,我可以用它(反过来)生成用户文档。
我已经开始使用XSLT做一些,但是经过验证的工具会有所帮助。我也尝试过XSD4J,但它显然删除了生成一些有用的东西所需的所有注释。
更新
我想要的是解决所有引用并使所有定义内联。例如,以下架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AAAA" type="myComplexType"/>
<xs:complexType name="myComplexType">
<xs:all>
<xs:element name="BBBB">
<xs:complexType>
<xs:attribute name="cccc" type="mySimpleType"/>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:simpleType name="mySimpleType">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
应该非规范化为:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AAAA">
<xs:complexType>
<xs:all>
<xs:element name="BBBB">
<xs:complexType>
<xs:attribute name="cccc">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
元素和属性定义的注释也需要在转换中存活下来。
答案 0 :(得分:4)
这种理想的配置被称为&#34;俄罗斯娃娃&#34;构造强>
我不知道任何包含该功能的工具,但另一位读者可能会使用这个已知的术语。
另外,两个可能有用的项目:
另一方面,许多工具提供了将多个引用的XSD组合到一个XSD中的功能。
请注意,只有xsd:include
引用可以合并到包含XSD中; xsd:import
无法展平,因为XSD文件只能有一个目标命名空间。
最终说明:请注意当单独的XSD使用不同的@elementFormDefault
和@attributeFormDefault
值时出现的complications。