【发布时间】:2013-12-10 00:51:18
【问题描述】:
我有两个有效的 XSD 文件(a.xsd 和 b.xsd)。我尝试根据 Schema 验证 XML 文件 (example.xml) 并收到错误。
谁能向我解释一下,为什么我会收到验证错误?
谢谢
a.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://namespace/a" xmlns:a="http://namespace/a" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="A">
<xs:sequence>
<xs:element name="E1" type="xs:token" form="unqualified"/>
<xs:element name="E2" type="xs:token" form="unqualified" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
b.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://namespace/b" xmlns:b="http://namespace/b" xmlns:a="http://namespace/a" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://namespace/a" schemaLocation="a.xsd"/>
<xs:element name="START" type="b:B"/>
<xs:complexType name="B">
<xs:complexContent>
<xs:restriction base="a:A">
<xs:sequence>
<xs:element name="E1">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="value1">
<xs:annotation>
<xs:appinfo>
<codeName>value1</codeName>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="value2">
<xs:annotation>
<xs:appinfo>
<codeName>value2</codeName>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="value3">
<xs:annotation>
<xs:appinfo>
<codeName>value3</codeName>
</xs:appinfo>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
example.xml
<?xml version="1.0" encoding="UTF-8"?>
<b:START xmlns="http://namespace/a" xmlns:b="http://namespace/b" xsi:schemaLocation="http://namespace/b C:\problem\b.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<E1>value1</E1>
</b:START>
【问题讨论】:
-
我还想通过 JAXB (unmarshal & marshal) 使用这个 XSD 生成 Java 类。如果从Petru那里取空命名空间的解决方案,则E1的内容不会映射到Java类中,因为a.xsd的定义是,E1属于命名空间namespace/a ...