从另一个xsd导入一个xsd中的complextype后,是否可以在第二个xsd中选择复杂类型的子元素

时间:2014-12-30 10:58:19

标签: xsd

从另一个xsd导入一个xsd中的complextype后,是否可以在第二个xsd中选择复杂类型的子元素

我的意思是:

我有第一个xsd。 - > AddressFile.xsd。在AddressFile.xsd中,有一个复杂类型IndividualAddress,有5个子元素。在下一个xsd,Individual.xsd中,我指的是AddressFile.xsd中的complext类型IndividualAddress。但在Individual.xsd中,我只想直接从复杂的Type IndividualAddress中获取DoorNO,StreetNum和State。那可能吗。我可以使用任何限制。

AddressFile.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"  
           targetNamespace="http://abc/DP/Address">
  <xs:complexType name="IndividualAddress">
    <xs:annotation>
      <xs:documentation>Address of an individual
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="DoorNO" type="xs:String" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="StreetNum" type="xs:String" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="State" type="xs:String" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="Country" type="xs:String" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="Pin" type="xs:String" 
                  nillable="true" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Individual.xsd

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:address="http://abc/DP/Address" 
           targetNamespace="http://abc/DP/Individual">

  <xs:import namespace="http://abc/DP/Address" 
             schemaLocation="AddressFile.xsd"/>

  <xs:complexType name="Individual">
    <xs:annotation>
      <xs:documentation>Address of an individual
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="Name" type="xs:String" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="Age" type="xs:int" 
                  nillable="true" minOccurs="0"/>
      <xs:element name="DoorNO" type=" address:IndividualAddress " 
                  nillable="true" minOccurs="0"/>
      <xs:element name="StreetNum" type=" address:IndividualAddress " 
                  nillable="true" minOccurs="0"/>
      <xs:element name="State" type=" address:IndividualAddress " 
                  nillable="true" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

1 个答案:

答案 0 :(得分:0)

您最好的方法取决于您要完成的任务。

如果您希望XSD感知工具知道复杂类型Individual是从复杂类型IndividualAddress派生的,您可以从另一个派生出一个。您将需要分两步执行此操作:限制步骤以消除基本类型中不需要的子元素,然后在最后添加更多元素的扩展步骤。 (开头时。)

如果您只是想重用这些元素,那么基本模式的创建者可以通过创建IndividualAddress本地类型的所有子节点来完成阻止您的最佳工作,而这些子节点无法从其他地方引用。如果他们想要使重用变得容易,甚至可能,他们会(a)使有问题的元素成为顶级元素,和/或可能(b)使用命名模型组来打包一起使用的有用元素组。