我正在使用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">
...
但我看不出有问题。
有人可以提出错误吗?
答案 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所述)。