Запрос SPARQL: как получить номер строки и символа из документа EARL?

Возможно, это вопрос новичка, но RDF-графики и запросы sparql меня просто сбивают с толку. Это соответствующая часть RDF-файла (EARL, Evaluation And Report Language), который мне нужно найти:

<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>

Что я хочу получить из этого отрывка: lineNumber (и charNumber), тот факт, что результат Earl: не удался, и описание. Пока все, что я смог получить, это номер строки, однако результат дал номер строки + "^^ http://www.w3.org/2001/XMLSchema#positiveInteger ". Не знаю, почему это произошло.

Спасибо за вашу помощь!


person Alternativc    schedule 07.10.2011    source источник
comment
Вы пробовали: answers.semanticweb.com   -  person YMomb    schedule 07.10.2011
comment
Не могли бы вы показать, какие запросы вы пробовали до сих пор?   -  person RobV    schedule 08.10.2011
comment
@YMomb: вопросы по Jena и семантической сети приветствуются, и ответы на них можно найти на StackOverflow, а также на answer.semanticweb   -  person Ian Dickinson    schedule 10.10.2011


Ответы (1)


Следующий запрос извлекает все неудачные результаты из вашего образца (обратите внимание, что мне пришлось создать 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 в соответствии с предоставленным вами образцом 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" }
      }
    ]
  }
}
person Ian Dickinson    schedule 10.10.2011
comment
Ян, большое спасибо. Работает как шарм. Между прочим, pnt URI: http://www.w3.org/2009/pointers# Тем не менее, кое-что раздражает. Я использую платформу Jena для запроса файла, и, хотя я получаю правильный результат, я также получаю кучу ошибок и предупреждений. ›Базовый URI равен нулю, но есть относительные URI, которые нужно разрешить. Относительные URI не разрешены в RDF. База не определена в документе. Где мне дать определение и как это будет выглядеть? Спасибо еще раз! - person Alternativc; 11.10.2011
comment
Привет, относительные URI действительно не разрешены в RDF. Есть два способа решить их: либо убедиться, что у вас есть xml:base во входном XML-документе, либо передать базовый URI в качестве второго параметра вызова Model.read(String url, String base, String lang) . - person Ian Dickinson; 11.10.2011
comment
Спасибо! Пошел со вторым вариантом, и ошибки исчезли. - person Alternativc; 13.10.2011