2013-04-29 71 views
1

我正在使用.Net RDF庫在RDF文件上進行一些sparql查詢。 但是當我試圖加載RDF文件到C#.Net RDFlibrary。由於System.Xml無法解析文檔,所以無法解析此RDF/XML

的錯誤是:

無法解析這個RDF/XML,因爲System.Xml無法分析 文件,請參見內部異常細節

我的RDF文件:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE rdf:RDF [<!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> 
<!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'> 
<!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'>]> 
<rdf:RDF xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:dnr="http://www.dotnetrdf.org/configuration#" 
     xmlns:rdf="http://www.w3.org/XML/1998/namespace#" 
     xml:base="http://www.example.org/"> 

    <rdf:Description rdf:about="Fadi"> 
    <ns0:eat xmlns:ns0="http://example.org/">Apple</ns0:eat> 
    <xml:startTime>00:01:38</xml:startTime> 
    <xml:endTime>00:01:39</xml:endTime> 
    </rdf:Description> 
</rdf:RDF> 

以及要加載的聲明:

Graph myGraph = new Graph(); 
FileLoader.Load(myGraph, "C:\\Users\\hasoOn\\Desktop\\tt.rdf"); 

誰能告訴我什麼是錯的? - 爲什麼我得到這個錯誤?

回答

1

您是否真的看到了異常消息告訴你的內部異常?這將包含生成的XmlException,並且會告訴您RDF/XML的確切位置,包括位置信息,即錯誤文件中的位置。

在你的情況下,你的問題碰巧是你已經在同一個元素上定義了兩次rdf命名空間,即你的根rdf:RDF元素有兩個xmlns:rdf屬性,這使得你的XML非法。

如果刪除那麼這將是有效的XML但它仍然將無法在dotNetRDF解析,因爲你已經使用的屬性xml:startTimexml:endTime沒有確定xml命名空間。我猜dotNetRDF應該可能允許這些,因爲xml:是隱式定義在XML中,雖然使用xml命名空間除了XML語法本身通常是一個非常糟糕的想法和不良數據建模的症狀。

+0

好吧那我該怎麼辦?我如何改進我的rdf文件? – 2013-04-29 19:50:18

+0

給定前綴'xml'的名稱空間URI不被範圍內的NamespaceMapper知道。你忘了爲這個前綴定義一個名字空間嗎? 我該如何解決問題? – 2013-04-29 19:53:34

+0

你不應該在你的RDF中使用'xml'命名空間來處理屬性(* NB *這恰好也突出了dotNetRDF應該允許的錯誤,因爲'xml'應該爲RDF/XML隱式定義)。 正如我在回答結束時所說的那樣,爲您的數據建模使用'xml'命名空間是不好的做法。 'xml'命名空間應該只用於XML特定的東西,即設置基本URI而不是您的實際數據 – RobV 2013-04-29 20:05:30