java xml SchemaFactory - 使用具有不同命名空间的导入加载模式

时间:2012-01-25 10:11:49

标签: java xsd xml-namespaces

我有一个带有以下标头定义的xsd架构

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="vdv453ger" 
            xmlns="vdv453ger" 
            xmlns:siri="http://www.siri.org.uk/siri" 
            elementFormDefault="unqualified" 
            attributeFormDefault="unqualified" 
            version="2.3e">

此文件导入另一个xsd文件:

<xsd:import namespace="http://www.siri.org.uk/siri" 
            schemaLocation="siri-1.3/siri/siri_all-v1.2.xsd"/>

导入的xsd架构具有不同的命名空间:

<xsd:schema xmlns="http://www.siri.org.uk/siri" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:acsb="http://www.ifopt.org.uk/acsb" 
            xmlns:ns1="http://datex2.eu/schema/1_0/1_0" 
            targetNamespace="http://www.siri.org.uk/siri" 
            elementFormDefault="qualified" 
            attributeFormDefault="unqualified" 
            version="1.2" 
            id="siri_all">

当我尝试使用以下命令加载架构时

SchemaFactory sf = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
mySchema = sf.newSchema( fileUrla );

抛出异常:

  

org.xml.sax.SAXParseExceptionsrc-include.2.1:引用架构的targetNamespace(当前为http://www.siri.org.uk/siri)必须与包含架构的targetNamespace相同,目前为vdv453ger

它抱怨命名空间不同。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

错误消息告诉我有一个你没有告诉我们的xsd:include元素。使用xsd:import导入不同名称空间的模式文档,使用xsd:include作为同一名称空间的模式文档。