我正在尝试使用 jing 验证多个命名空间、多个模式 xml。我的文件如下:
testtype.xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.my.com/testtype"
xmlns:abcs="http://www.my.com/test1"
xmlns:childs="http://www.my.com/childs">
<xsd:import namespace="http://www.my.com/test1"
schemaLocation="abc.xsd"/>
<xsd:import namespace="http://www.my.com/childs"
schemaLocation="child.xsd"/>
<xsd:complexType name="testtype">
<xsd:sequence>
<xsd:element ref="childs:team" />
<xsd:element ref="abcs:test"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
孩子.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.my.com/childs"
xmlns:why="http://www.my.com/childs">
<xs:include schemaLocation="parent.xsd" />
<xs:element name="team" type="why:baseTeam"/>
</xs:schema>
abc.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.my.com/test1" >
<xs:element name="test" type="xs:string">
</xs:element>
</xs:schema>
父.xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.my.com/childs"
xmlns:whys="http://www.my.com/childs">
<xsd:include schemaLocation="grandparent.xsd" />
<xsd:complexType name="baseTeam">
<xsd:attribute name="mascot" type="whys:mascotNames" use="required" />
</xsd:complexType>
</xsd:schema>
祖父母.xsd
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.my.com/childs">
<xsd:simpleType name="mascotNames">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bengals" />
<xsd:enumeration value="cowboys" />
<xsd:enumeration value="patriots" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
示例.xml
<?xml version="1.0"?>
<testtype xmlns="http://www.my.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.my.com/testtype testtype.xsd
http://www.my.com/childs child.xsd
http://www.my.com/test1 abc.xsd"
xmlns:testtype="http://www.my.com/testtype"
xmlns:childs="http://www.my.com/childs"
xmlns:abcs="http://www.my.com/abcs">
<childs:team mascot="cowboys"/>
<abcs:test>statement</abcs:test>
</testtype>
孩子从父母那里得到它的类型,父母从祖父母那里得到它。abc 是独立的命名空间。testtype 同时包含 child 和 abc。问题是当我尝试针对 testtype.xsd 验证 sample.xml 时,我得到一个空指针异常。
Exception in thread "main" java.lang.NullPointerException
at org.apache.xerces.impl.xs.XMLSchemaLoader.resolveDocument(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.findSchemaGrammar(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
有人可以告诉我为什么会出现空指针异常,或者 xsd 格式是否有问题。
谢谢