2012-12-12 30 views
1

我使用following schema解析GraphML XML文件。架構位置偶數URI的是封送

我設法java類從模式(使用XJC)綁定,也解組了幾個示例XML文件。

不幸的是,當我來到封送個XML我收到以下錯誤:

SchemaLocation: schemaLocation value = 'Graphml.xsd' must have even number of URI's

至於我可以看到在XSD唯一的schemaLocation用途如下:

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

但我在其中看不到問題。

有人可以建議什麼是錯的?

回答

2

您顯示的模式片段在語法上是正確的;你是對的,在那裏找不到任何問題。該錯誤消息似乎並沒有在討論關於架構http://graphml.graphdrawing.org/xmlns/1.1/graphml-structure.xsd - 它正在討論GraphML.xsd。

沒有看到XML實例很難確定,但可能在文檔實例中有一個形式爲xsi:schemaLocation = "GraphML.xsd"的屬性值規範,驗證器抱怨值「GraphML.xsd」需要的值是一個值包含偶數個URI:名稱空間名稱,模式位置對(如Blaise Doughan的答案中所述)。

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

謝謝!問題是架構位置屬性在編組器中未正確填充。 –