非规范化XSD

时间:2014-09-01 11:52:29

标签: xml xsd

我需要对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>

元素和属性定义的注释也需要在转换中存活下来。

1 个答案:

答案 0 :(得分:4)

这种理想的配置被称为&#34;俄罗斯娃娃&#34;构造

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

另外,两个可能有用的项目:


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

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

展平XSD的选项

  1. 编写自己的自定义XSLT代码。
  2. 使用W. Paul Kiel XML SchemaLightener中的XSLT 2.0 XSD拼合器 工具。
  3. 使用flattener built into XMLSpy
  4. 使用flattener built into Oxygen XML Editor
  5. 使用"Internalize XSDs" command built into Petru Gardea's QTAssistant
  6. 最终说明:请注意当单独的XSD使用不同的@elementFormDefault@attributeFormDefault值时出现的complications