假设我有类似这样的XML:
<root xmlns="default" xmlns:add="additional">
<element foo="fromDefault" />
<add:element foo="fromDefault" add:bar="fromAdditional" />
</root>
我想要做的是合并两个element
定义以避免重复,如下所示:
<root xmlns="default" xmlns:add="additional">
<element foo="fromDefault" add:bar="fromAdditional" />
</root>
但我甚至不确定这是否可能。
我觉得它可能是可行的,因为我们对根元素使用了一些类似的符号,如:
<root xmlns:xsi="..."
xsi:schemaLocation="...">
不幸的是我无法找到任何有关此问题的文档/参考/教程/任何内容,有人可以帮我澄清我想做的事情是否可能(或不是)并与我分享一些链接?
提前致谢!
答案 0 :(得分:1)
我认为你正在寻找这样的东西:
<强> additional.xsd 强>
<xs:schema
targetNamespace="additional"
elementFormDefault="qualified"
xmlns="additional"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attribute name="bar" type="xs:string"/>
</xs:schema>
<强> default.xsd 强>
<xs:schema
targetNamespace="default"
elementFormDefault="qualified"
xmlns="default"
xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:add="additional">
<xs:import namespace="additional" schemaLocation="additional.xsd"/>
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="element" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:attribute name="foo" type="xs:string"/>
<xs:attribute ref="add:bar"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
第一个模式仅定义“附加”内容(在示例中只是一个属性),第二个模式导入它并定义其他所有内容,并在需要时引用其他内容。