2011-10-07 19 views
3

這可能是一個相當新手的問題,但RDF圖和sparql查詢只是讓我困惑。 這是一個(EARL,評估和報告語言)RDF文件的相關部分,我需要搜索:SPARQL查詢:如何從EARL文檔中獲取行和字符編號?

<earl:Assertion> 
<earl:subject rdf:nodeID="A1"/> 
<earl:assertedBy rdf:nodeID="A2"/> 
<earl:test rdf:resource="http://www.w3.org/TR/xhtml1/#C_2"/> 
<earl:mode rdf:resource="http://www.w3.org/ns/earl#automatic"/> 
<earl:result> 
    <earl:TestResult> 
    <earl:pointer> 
     <pnt:EquivalentPointers> 
     <pnt:groupPointer> 
      <pnt:LineCharPointer> 
      <pnt:charNumber rdf:datatype="http://www.w3.org/2001/XMLSchema#positiveInteger" 
      >108</pnt:charNumber> 
      <pnt:lineNumber rdf:datatype="http://www.w3.org/2001/XMLSchema#positiveInteger" 
      >9</pnt:lineNumber> 
      </pnt:LineCharPointer> 
     </pnt:groupPointer> 
     <pnt:groupPointer> 
      <pnt:CharOffsetPointer> 
      <pnt:offset rdf:datatype="http://www.w3.org/2001/XMLSchema#positiveInteger" 
      >935</pnt:offset> 
      </pnt:CharOffsetPointer> 
     </pnt:groupPointer> 
     </pnt:EquivalentPointers> 
    </earl:pointer> 
    <earl:outcome rdf:resource="http://www.w3.org/ns/earl#failed"/> 
    <dct:description rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
    >A space character is missing before '/&gt;'.</dct:description> 
    </earl:TestResult> 
</earl:result> 
</earl:Assertion> 

我想從這個摘錄得到什麼:行號(和charNumber)的事實,伯爵:結果失敗了,說明。到目前爲止,我所能得到的只是行號,結果卻給出了行號+「^^ http://www.w3.org/2001/XMLSchema#positiveInteger」。我不知道爲什麼會發生這種情況。

感謝您的幫助!

+0

你有沒有嘗試過:http://answers.semanticweb.com/ – YMomb

+0

你能請告訴您到目前爲止已經嘗試了什麼問題? – RobV

+0

@YMomb:耶納和語義網絡的問題,歡迎,回答,在StackOverflow以及answers.semanticweb –

回答

5

下面的查詢翻出所有失敗的結果,從您的樣品(請注意,我不得不做出一個URI爲pnt:,因爲你沒有說那是什麼,它不是在prefix.cc列出)​​:

prefix pnt: <http://example.org/pnt#> 
prefix earl: <http://www.w3.org/ns/earl#> 
prefix dct: <http://purl.org/dc/terms/> 

select ?result ?desc ?charNo ?lineNo { 
    ?assert a earl:Assertion; 
      earl:result ?result. 

    ?result earl:outcome earl:failed; 
      earl:pointer/pnt:groupPointer ?gpt; 
      dct:description ?desc. 

    ?gpt pnt:charNumber ?charNo; 
     pnt:lineNumber ?lineNo. 
} 

該查詢給出明文以下結果:

$ arq --graph=./src/main/resources/earl.rdf --file=./src/main/resources/earl.sparql 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
| result | desc                        | charNo             | lineNo             | 
==================================================================================================================================================================================================================================== 
| _:b0 | "A space character is\n   missing before '/>'."^^<http://www.w3.org/2001/XMLSchema#string> | "108"^^<http://www.w3.org/2001/XMLSchema#positiveInteger> | "9"^^<http://www.w3.org/2001/XMLSchema#positiveInteger> | 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

你想與XSD類型datatyped的兩個數字,根據您提供的RDF樣品。 ^^裝飾只是使用Turtle語法表示數據類型。你可以清楚地看到這一點,如果我們在JSON選擇輸出,而不是:

$ arq --graph=./src/main/resources/earl.rdf --file=./src/main/resources/earl.sparql --results=json 
{ 
    "head": { 
    "vars": [ "result" , "desc" , "charNo" , "lineNo" ] 
    } , 
    "results": { 
    "bindings": [ 
     { 
     "result": { "type": "bnode" , "value": "b0" } , 
     "desc": { "datatype": "http://www.w3.org/2001/XMLSchema#string" , "type": "typed-literal" , "value": "A space character is\n   missing before '/>'." } , 
     "charNo": { "datatype": "http://www.w3.org/2001/XMLSchema#positiveInteger" , "type": "typed-literal" , "value": "108" } , 
     "lineNo": { "datatype": "http://www.w3.org/2001/XMLSchema#positiveInteger" , "type": "typed-literal" , "value": "9" } 
     } 
    ] 
    } 
} 
+0

非常感謝你。奇蹟般有效。順便說一下,pnt URI是:'http:// www.w3.org/2009/pointers#' 儘管如此,還是有些令人討厭的東西。我使用Jena框架來查詢文件,並且當我得到正確的結果時,我也得到了一堆錯誤和警告>基本URI爲空,但是有相對URI需要解析。 RDF中不允許使用相對URI。基本沒有在文檔中定義。我在哪裏定義它,它會是什麼樣子? 再次感謝! – Alternativc

+1

嗨,RDF中確實不允許使用相對URI。有兩種方法可以解決它們:要麼確保在輸入XML文檔中有一個'xml:base',要麼傳遞基本URI作爲Model.read(String url,String base,String lang)的第二個參數'呼叫。 –

+0

謝謝!第二種選擇,錯誤消失了。 – Alternativc