XML 文件由两个模式验证
XML file validated by two schemas
我想创建一个 XML 文件,该文件应由两个模式(一个导入另一个)验证:
<bbb:Order xmlns:bbb="http://NamespaceTest.com/BBB" xmlns:aaa="http://NamespaceTest.com/AAA">
<aaa:Customer>
<aaa:Name>string</aaa:Name>
<aaa:DeliveryAddress>string</aaa:DeliveryAddress>
<aaa:BillingAddress>string</aaa:BillingAddress>
</aaa:Customer>
</bbb:Order>
为此,我创建了两个模式。第一个看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://NamespaceTest.com/AAA"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://NamespaceTest.com/AAA"
elementFormDefault="qualified">
<xs:element name="Customer" type="CustomerType">
</xs:element>
<xs:complexType name="CustomerType">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="DeliveryAddress" type="xs:string" />
<xs:element name="BillingAddress" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
然后我将此文件导入第二个模式:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://NamespaceTest.com/BBB"
xmlns:aa="http://NamespaceTest.com/AAA" targetNamespace="http://NamespaceTest.com/BBB"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import schemaLocation="aaa.xsd" namespace="http://NamespaceTest.com/AAA"/>
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="Customer" type="aa:CustomerType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当我有这样的模式时,XML 文件中的元素 Customer 必须从名称空间 http://NamespaceTest.com/BBB, but I want it to be referenced from http://NamespaceTest.com/AAA(定义类型的地方)引用。应该如何更改架构,以便我可以在问题开头使用 XML?
您在本应引用全局元素 aaa:Customer
时定义了局部元素 bbb:Customer
。应该是
<xs:complexType>
<xs:sequence>
<xs:element ref="aa:Customer"/>
</xs:sequence>
</xs:complexType>
顺便说一下(很多人都弄错了术语,你并不孤单)这里有一个模式,由两个模式文档组成。
我想创建一个 XML 文件,该文件应由两个模式(一个导入另一个)验证:
<bbb:Order xmlns:bbb="http://NamespaceTest.com/BBB" xmlns:aaa="http://NamespaceTest.com/AAA">
<aaa:Customer>
<aaa:Name>string</aaa:Name>
<aaa:DeliveryAddress>string</aaa:DeliveryAddress>
<aaa:BillingAddress>string</aaa:BillingAddress>
</aaa:Customer>
</bbb:Order>
为此,我创建了两个模式。第一个看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://NamespaceTest.com/AAA"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://NamespaceTest.com/AAA"
elementFormDefault="qualified">
<xs:element name="Customer" type="CustomerType">
</xs:element>
<xs:complexType name="CustomerType">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="DeliveryAddress" type="xs:string" />
<xs:element name="BillingAddress" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
然后我将此文件导入第二个模式:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://NamespaceTest.com/BBB"
xmlns:aa="http://NamespaceTest.com/AAA" targetNamespace="http://NamespaceTest.com/BBB"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:import schemaLocation="aaa.xsd" namespace="http://NamespaceTest.com/AAA"/>
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="Customer" type="aa:CustomerType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当我有这样的模式时,XML 文件中的元素 Customer 必须从名称空间 http://NamespaceTest.com/BBB, but I want it to be referenced from http://NamespaceTest.com/AAA(定义类型的地方)引用。应该如何更改架构,以便我可以在问题开头使用 XML?
您在本应引用全局元素 aaa:Customer
时定义了局部元素 bbb:Customer
。应该是
<xs:complexType>
<xs:sequence>
<xs:element ref="aa:Customer"/>
</xs:sequence>
</xs:complexType>
顺便说一下(很多人都弄错了术语,你并不孤单)这里有一个模式,由两个模式文档组成。