非规范化 XSD

bax*_*pin 2 xml xsd

我需要对 XML 模式进行非规范化,以便为将创建符合该模式的文档的人员生成文档。用户不了解 XSD,并且很可能永远不会学习。我见过的工具能够为其他 XSD 开发人员生成文档,但我的用户对如何构建架构的细节不感兴趣,他们只想知道他们可以做什么和必须做什么来创建有效的文档。

\n\n

因此,我正在寻找一种方法来解析 XML 模式中的所有包含和引用,并生成一个非规范化版本,我可以使用该版本(反过来)生成用户文档。

\n\n

我\xc2\xb4已经开始使用 XSLT 来完成其中的一些工作,但是经过验证的工具会有所帮助。我也尝试过 XSD4J,但它显然删除了我生成有用内容所需的所有注释。

\n\n

更新:

\n\n

我想要的是解析所有引用并使所有定义内联。例如,以下架构:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">\n  <xs:element name="AAAA" type="myComplexType"/>\n  <xs:complexType name="myComplexType">\n    <xs:all>\n      <xs:element name="BBBB">\n        <xs:complexType>\n          <xs:attribute name="cccc" type="mySimpleType"/>\n        </xs:complexType>\n      </xs:element>\n    </xs:all>\n  </xs:complexType>\n  <xs:simpleType name="mySimpleType">\n    <xs:restriction base="xs:string">\n      <xs:minLength value="1"/>\n    </xs:restriction>\n  </xs:simpleType>\n</xs:schema>\n
Run Code Online (Sandbox Code Playgroud)\n\n

应非规范化为:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">\n  <xs:element name="AAAA">\n    <xs:complexType>\n      <xs:all>\n        <xs:element name="BBBB">\n          <xs:complexType>\n            <xs:attribute name="cccc">\n              <xs:simpleType>\n                <xs:restriction base="xs:string">\n                  <xs:minLength value="1"/>\n                </xs:restriction>\n              </xs:simpleType>\n            </xs:attribute>\n          </xs:complexType>\n        </xs:element>\n      </xs:all>\n    </xs:complexType>\n  </xs:element>\n</xs:schema>\n
Run Code Online (Sandbox Code Playgroud)\n\n

元素和属性定义的注释也需要在转换后继续存在。

\n

kjh*_*hes 5

这种所需的配置被称为“俄罗斯娃娃”配置。

我不知道有任何工具包含该功能,但另一位读者可能会给出这个已知的术语。

另外,有两个项目可能会有所帮助:


另一方面,许多工具提供了将多个引用的 XSD 合并为一个 XSD 的功能。

请注意,只有xsd:include引用才能合并到包含 XSD 中;xsd:import无法展平,因为 XSD 文件只能有一个目标命名空间。

展平 XSD 的选项

  1. 编写您自己的自定义 XSLT 代码。
  2. 使用 W. Paul Kiel 的XML SchemaLightener 工具中的 XSLT 2.0 XSD 拼合器。
  3. 使用XMLSpy 中内置的拼合器
  4. 使用Oxygen XML Editor 中内置的拼合器
  5. 使用Petru Gardea 的 QTAssistant 内置的“Internalize XSD”命令

最后注意事项:请注意当单独的 XSD 使用不同的和值时会出现复杂情况@elementFormDefault@attributeFormDefault