我需要对 XML 模式进行非规范化,以便为将创建符合该模式的文档的人员生成文档。用户不了解 XSD,并且很可能永远不会学习。我见过的工具能够为其他 XSD 开发人员生成文档,但我的用户对如何构建架构的细节不感兴趣,他们只想知道他们可以做什么和必须做什么来创建有效的文档。
因此,我正在寻找一种方法来解析 XML 模式中的所有包含和引用,并生成一个非规范化版本,我可以使用该版本(反过来)生成用户文档。
我已经开始使用 XSLT 来完成其中的一些工作,但是经过验证的工具会有所帮助。我也尝试过 XSD4J,但它显然删除了我生成有用内容所需的所有注释。
Update:
我想要的是解析所有引用并使所有定义内联。例如,以下架构:
<?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>
元素和属性定义的注释也需要在转换后继续存在。
这种所需的配置被称为“俄罗斯娃娃”配置。
我不知道有任何工具包含该功能,但另一位读者可能会给出这个已知的术语。
另外,有两个项目可能会有所帮助:
- 您可以阅读有关 XSD 设计模式的更多信息:“架构范围:入门
和最佳实践 http://www.ibm.com/developerworks/library/x-schemascope/"
- 如果您要编写自定义 XSLT,您可能会得到一些想法
从这个关于反向转换的问题的答案:“俄语
娃娃到百叶窗xsl改造 https://stackoverflow.com/q/15810773/290085"
另一方面,许多工具提供了将多个引用的 XSD 合并为一个 XSD 的功能。
请注意,仅xsd:include
参考文献可以合并到包含 XSD 中;xsd:import
无法展平,因为 XSD 文件只能有一个目标命名空间。
展平 XSD 的选项
- 编写您自己的自定义 XSLT 代码。
- 使用 W. Paul Kiel 中的 XSLT 2.0 XSD 拼合器XML 模式轻化器 https://github.com/pkielgithub/SchemaLightener
tool.
- Use the XMLSpy 中内置的展平器 https://manual.altova.com/xmlspy/spyenterprise/index.html?urdtdxsd_flattenschema.htm.
- Use the Oxygen XML 编辑器中内置的拼合器 http://www.oxygenxml.com/doc/ug-editor/topics/xml-schema-flat.html.
- Use the Petru Gardea 的 QTAssistant 中内置了“Internalize XSDs”命令 https://stackoverflow.com/a/10099979/290085.
最后说明: 意识到并发症 http://www.paschidev.com/Whitepapers/CombineXsdIntoMinimum.html当单独的 XSD 使用不同的@elementFormDefault
and @attributeFormDefault
values.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)