模式位置甚至编组上的URI数量

时间:2012-12-12 10:16:37

标签: java xml jaxb xsd

我正在使用following schema来解析GraphML XML个文件。

我设法从模式绑定java类(使用xjc),并且还解组了几个示例XML文件。

不幸的是,当我来编组XML时,我收到以下错误:

  

SchemaLocation:schemaLocation value ='Graphml.xsd'必须包含偶数个URI

据我所知,xsd中唯一使用的schemaLocation如下:

<xs:import namespace="http://www.w3.org/1999/xlink"                
  schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0/xlink.xsd">
  ...

但我看不出有问题。

有人可以提出错误吗?

2 个答案:

答案 0 :(得分:4)

schemaLocation分为两部分,第一部分是命名空间,第二部分后跟空格是位置。像下面这样的东西是有效的。

<foo 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/1.0 http://graphml.graphdrawing.org/xmlns/1.0/xlink.xsd">
    ...
</foo>

可以在Marshaller上设置架构位置。您可能正在执行以下操作吗?

Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "Graphml.xsd");

答案 1 :(得分:2)

您显示的架构片段在语法上是正确的;你是对的,不要在那里发现任何问题。错误消息似乎也没有在http://graphml.graphdrawing.org/xmlns/1.1/graphml-structure.xsd讨论模式 - 它正在讨论名为GraphML.xsd的内容。

在没有看到XML实例的情况下很难确定,但是在文档实例中可能存在xsi:schemaLocation = "GraphML.xsd"形式的属性值规范,并且验证器抱怨值“GraphML.xsd”需要代替是一个包含偶数个URI的值:namespace-name,schema-location pair(如Blaise Doughan所述)。