【发布时间】:2014-10-20 20:21:17
【问题描述】:
我们正在构建一个 XQuery 工具来为 XSD 模式(特别是 UBL 2.1 模式)创建文档。
为了做到这一点,我们需要将大量使用元素引用和复杂类型构建的模式简化为内联定义。
所以像这样的元素:
<xsd:element name="Order" type="OrderType"/>
<xsd:complexType name="OrderType">
<xsd:sequence>
...
<xsd:element ref="cbc:UBLVersionID" minOccurs="0" maxOccurs="1"/>
...
</xsd:sequence>
</xsd:complexType>
...
(in another file)
<xsd:element name="UBLVersionID" type="UBLVersionIDType"/>
<xsd:complexType name="UBLVersionIDType">
<xsd:simpleContent>
<xsd:extension base="xsd:string"/>
</xsd:simpleContent>
</xsd:complexType>
应转换为:
<xsd:element name="Order">
<xsd:complexType>
<xsd:sequence>
...
<xsd:element ref="cbc:UBLVersionID" minOccurs="0" maxOccurs="1">
<xsd:complexType name="UBLVersionIDType">
<xsd:simpleContent>
<xsd:extension base="xsd:string"/>
</xsd:simpleContent>
</xsd:complexType>
...
</xsd:sequence>
</xsd:complexType> </xsd:element>
考虑到某些元素和类型是在导入的架构中定义的。
有没有一种已知的方法可以用 XQuery 来获得它?
谢谢。
【问题讨论】:
-
请记住,您显示的目标表单不是合法的 XSD 模式文档。如果输出的唯一消费者是您的文档软件,那么这将不是问题。但是如果你想使用内联('simplified'?不是真的)表单来验证(如果只是为了测试以确保它接受和拒绝与原始文档相同的文档),那些'ref'属性将需要更改为'名称的属性。 (嗯。但是考虑到导入的存在,无论如何您都不能在单个架构文档(xsd:schema 元素)中定义架构。所以也许这不是问题。)
-
你是对的。我的兴趣是将一组模式文件(在本例中为 UBL)转换为一个完全内联的文件。