2014-12-30 6 views
0

После импорта сложного типа в один xsd из другого xsd, возможно ли иметь выбранные подэлементы комплекса тип во втором XSDПосле импорта сложного типа в один xsd из другого xsd возможно ли иметь выбранные подэлементы сложного типа во втором xsd

Что я имею в виду:

у меня есть первый XSD. -> AddressFile.xsd. В AddressFile.xsd существует сложный тип IndividualAddress с 5 субэлементами. В следующем xsd, Individual.xsd, я имею в виду индивидуальный адрес дополнения в AddressFile.xsd. Но в Individual.xsd я просто хочу, чтобы DoorNO, StreetNum и State были связаны с комплексом Type IndividualAddress напрямую. Это возможно. Существуют ли какие-либо ограничения, которые я могу использовать.

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> 

ответ

0

Ваш лучший подход зависит от того, что вы пытаетесь достичь.

Если вы хотите, чтобы XSD-осведомленные инструменты знали, что сложный тип Individual получается из сложного типа IndividualAddress, вы можете получить один из другого. Вам нужно будет сделать это в два этапа: шаг ограничения, чтобы избавиться от нежелательных дочерних элементов базового типа, а затем шаг расширения для добавления дополнительных элементов в конце. (Не в самом начале.)

Если вы просто хотите использовать элементы, создатель базовой схемы сделал лучшую работу, что они могут помешать вам, сделав все дети местных видов IndividualAddress, которые нельзя ссылаться нигде. Если они захотят сделать повторное использование простым или даже возможным, они (а) сделают элементы, о которых идет речь, элементы верхнего уровня и/или, возможно, (б) используют именованные группы моделей для упаковки групп полезных элементов, которые будут использоваться вместе.

Смежные вопросы