从导入的XSD调用元素

时间:2016-05-09 07:47:35

标签: xml xsd

我的第一个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命名空间下,但不幸的是,事情并没有像我希望的那样有效。

谢谢。

1 个答案:

答案 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。