从另一个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>
答案 0 :(得分:0)
您最好的方法取决于您要完成的任务。
如果您希望XSD感知工具知道复杂类型Individual是从复杂类型IndividualAddress派生的,您可以从另一个派生出一个。您将需要分两步执行此操作:限制步骤以消除基本类型中不需要的子元素,然后在最后添加更多元素的扩展步骤。 (开头时不。)
如果您只是想重用这些元素,那么基本模式的创建者可以通过创建IndividualAddress本地类型的所有子节点来完成阻止您的最佳工作,而这些子节点无法从其他地方引用。如果他们想要使重用变得容易,甚至可能,他们会(a)使有问题的元素成为顶级元素,和/或可能(b)使用命名模型组来打包一起使用的有用元素组。