从不同xsd导入相同的Namespace

  • 本文关键字:Namespace xsd 导入 xml xsd
  • 更新时间 :
  • 英文 :


我需要一些帮助来构建xsd。第三方提供了xsd(v1.xsd(,我必须将其包含在我的自定义xsd(example.xsd(中。他们很快就会发布他们的xsd(v2.xsd(的新版本,不可避免地使用相同的命名空间。我需要在xsd中包括新版本(v2.xsd(和旧版本(v1.xsd(,但我很难实现这一点。我不知道如何使用相同的命名空间导入这两个(或多个(xsd并引用它们。

有人建议我怎么做吗?

我希望这个小例子能说明我正在努力实现的目标。

example.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:v1="http://loremipsum.org/xsd/1_1"
xmlns:v2="http://loremipsum.org/xsd/1_1"
>
<xs:import namespace="http://loremipsum.org/xsd/1_1"
schemaLocation="include/v1.xsd"/>
<xs:import namespace="http://loremipsum.org/xsd/1_1"
schemaLocation="include/v2.xsd"/>
<xs:element name="CONTENT">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="v1:note"/>
<xs:element ref="v2:note"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

v1.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://loremipsum.org/xsd/1_1"
targetNamespace="http://loremipsum.org/xsd/1_1"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> 

v2.xsd

<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://loremipsum.org/xsd/1_1"
targetNamespace="http://loremipsum.org/xsd/1_1"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="additional" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

感谢您的帮助:(。

您不能不更改客户的xml模式。命名空间使元素具有唯一性。如果元素";注释";在v1和v2中都定义了,并且它们共享相同的名称空间,解析器不知道应该使用哪个名称空间。最好的选择是说服您的客户对xsd进行用户版本控制,否则将v1和v2合并,如下所示。

example.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v2="http://loremipsum.org/xsd/1_1">
<xs:import namespace="http://loremipsum.org/xsd/1_1" schemaLocation="v2.xsd"/>
<xs:element name="CONTENT">
<xs:complexType>
<xs:sequence>
<xs:element ref="v2:note"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

v2.xsd

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://loremipsum.org/xsd/1_1" targetNamespace="http://loremipsum.org/xsd/1_1" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:choice>
<xs:sequence>
<xs:element name="additional" type="xs:string"/>
</xs:sequence>
<xs:sequence>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

最新更新