#semantic-web #sparql #jena
#semantic-web #sparql #jena
Вопрос:
Это может быть довольно начинающим вопросом, но графики RDF и запросы sparql просто сбивают меня с толку. Это соответствующая часть файла RDF (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 '/amp;>'.</dct:description>
</earl:TestResult>
</earl:result>
</earl:Assertion>
Что я хочу получить из этого отрывка: lineNumber (и charNumber), тот факт, что результат earl: не удался, и описание. Пока все, что я смог получить, это номер строки, однако результат дал номер строки «^^http://www.w3.org/2001/XMLSchema#positiveInteger «. Я не знаю, почему это произошло.
Спасибо за вашу помощь!
Комментарии:
1. Вы пробовали: answers.semanticweb.com
2. Не могли бы вы показать, какие запросы вы пробовали до сих пор?
3. @YMomb: Вопросы Jena и semantic web приветствуются, и на них есть ответы, как в StackOverflow, так и в answers.semanticweb
Ответ №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 isn 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 isn 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" }
}
]
}
}
Комментарии:
1. Ян, большое тебе спасибо. Работает как шарм. Кстати, pnt URI:
http://www.w3.org/2009/pointers#
все еще есть что-то раздражающее. Я использую фреймворк Jena для запроса файла, и хотя я получаю правильный результат, я также получаю кучу ошибок и предупреждений> Базовый URI равен null, но есть относительные URI для разрешения. Относительные URI не разрешены в RDF. База не определена в документе. Где я могу это определить и как это будет выглядеть? Еще раз спасибо!2. Привет, относительные URI действительно не разрешены в RDF. Есть два способа разрешить их: либо убедиться, что у вас есть
xml:base
входной XML-документ, либо передать базовый URI в качестве второго параметраModel.read(String url, String base, String lang)
вызова.3. Спасибо! Пошел со вторым вариантом, и ошибки исчезли.