有什么区别(关注前缀 h:、c:、a: 和default):
<?xml version="1.0" encoding="UTF-8"?>
<xmlBoo xmlns="http://www.example.org/boo"
xmlns:c="http://www.example.org/customer"
xmlns:a="http://www.example.org/address"
xmlns:h="http://www.example.org/header">
<h:header>
<h:id>101</h:id>
</h:header>
<c:customer>
<c:id>1</c:id>
<c:name>John</c:name>
<a:address>
<a:street>Long street</a:street>
</a:address>
</c:customer>
<someBooSpecificField>Specific data in Boo</someBooSpecificField>
</xmlBoo>
和
<?xml version="1.0" encoding="UTF-8"?>
<xmlBoo xmlns="http://www.example.org/boo"
xmlns:c="http://www.example.org/customer"
xmlns:a="http://www.example.org/address"
xmlns:h="http://www.example.org/header">
<header>
<h:id>101</h:id>
</header>
<customer>
<c:id>1</c:id>
<c:name>John</c:name>
<address>
<a:street>Long street</a:street>
</address>
</customer>
<someBooSpecificField>Specific data in Boo</someBooSpecificField>
</xmlBoo>
我问是因为我已经通过 JAXB 实现了映射,并且编组器创建了第一个 xml。但是当我添加模式验证时,我得到了异常:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'ns3:header'. One of '{"http://www.example.org/boo":header}' is expected.
看起来验证器期望(基于模式)第二个 xml。
哪个前缀应该在元素标题之前?默认(与命名空间 [http://www.example.org/boo] 连接)或h:(与命名空间 [http://www.example.org/header] 连接)。
我认为整个元素标题与h 完全连接:不仅仅是第二个示例中的子元素。什么是最佳实践,对此有何解释。
我的 XML 架构:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:h="http://www.example.org/header"
xmlns:c="http://www.example.org/customer"
targetNamespace="http://www.example.org/boo"
elementFormDefault="qualified">
<xsd:import namespace="http://www.example.org/header" schemaLocation="header.xsd"/>
<xsd:import namespace="http://www.example.org/customer" schemaLocation="customer.xsd"/>
<xsd:element name="xmlBoo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="header" type="h:header"/>
<xsd:element name="customer" type="c:customer"/>
<xsd:element name="someBooSpecificField" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
例如。头文件.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/header"
elementFormDefault="qualified">
<xsd:complexType name="header">
<xsd:sequence>
<xsd:element name="id" type="xsd:long"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>