0

我正在尝试使用 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 格式是否有问题。

谢谢

4

0 回答 0