我的第一个xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my.com/V1.0.xsd"
xmlns:abc="my.com/V1.0.xsd"
elementFormDefault="qualified">
我的新xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my.com/V2.0.xsd"
xmlns:abc="my.com/V2.0.xsd"
elementFormDefault="qualified">
<xs:import
namespace="my.com/V1.0.xsd" schemaLocation="V1.0.xsd"/>
我是XSD的新手,因此我的问题可能听起来很愚蠢,但如果有人可以帮助我会很棒。
现在在V2.0.xsd中,我想在V1.0.xsd中调用元素,complexTypes,我该怎么做这样的事情?我虽然所有元素现在都聚集在abc命名空间下,但不幸的是,事情并没有像我希望的那样有效。
谢谢。
答案 0 :(得分:1)
要在v2架构中导入v1元素,您必须在v2架构中限定对v1元素或complexType的引用。
例如为: 给定像这样的v1架构:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my.com/V1.0.xsd"
xmlns:v1="my.com/V1.0.xsd"
elementFormDefault="qualified">
<xs:complexType name="typeV1">
<xs:sequence>
<xs:element name="fromV1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
v2架构调用类似的复杂类型:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="my.com/V2.0.xsd"
xmlns:v2="my.com/V2.0.xsd"
xmlns:v1="my.com/V1.0.xsd"
elementFormDefault="qualified">
<xs:import namespace="my.com/V1.0.xsd" schemaLocation="v1.xsd"/>
<xs:element name="fromV2" type="v1:typeV1"/>
</xs:schema>
在生成的XML中,必须声明两个名称空间,例如:那样:
<?xml version="1.0" encoding="UTF-8"?>
<v2:fromV2 xmlns:v2='my.com/V2.0.xsd'>
<v1:fromV1 xmlns:v1='my.com/V1.0.xsd'/>
</v2:fromV2>
如果只需要一个名称空间,则必须在targetNamespace的两个模式中放置相同的uri,并使用include而不是import。