#sparql #jena #content-negotiation
#sparql #jena #согласование содержимого
Вопрос:
При отправке конструктивного запроса SPARQL к определенной конечной точке библиотека Apache Jena 3.14.0 выдает следующее сообщение об ошибке.
Конечная точка вернула тип содержимого: application / sparql-results xml, который не является допустимым синтаксисом RDF
Код, который я написал, выглядит следующим образом.
QueryEngineHTTP qeh = new QueryEngineHTTP(endpointUrl, rq);
qeh.setAcceptHeader("application/rdf xml");
Model m = qeh.execConstruct();
Конечная точка есть https://id.nlm.nih.gov/mesh/sparql
.
Запрос выглядит следующим образом.
CONSTRUCT {?s <http://id.nlm.nih.gov/mesh/vocab#altLabel> ?o}
FROM <http://id.nlm.nih.gov/mesh/2020>
WHERE {
?s <http://id.nlm.nih.gov/mesh/vocab#altLabel> ?o ;
a <http://id.nlm.nih.gov/mesh/vocab#Term> .
FILTER(isLiteral(?o))
} LIMIT 3
При выдаче этого запроса с помощью инструмента curl я получил прекрасный результат.
% curl -LH 'Accept: application/rdf xml' --data-urlencode query@test.rq https://id.nlm.nih.gov/mesh/sparql
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.0="http://id.nlm.nih.gov/mesh/vocab#">
<rdf:Description rdf:about="http://id.nlm.nih.gov/mesh/2020/T000963157">
<j.0:altLabel xml:lang="en">Topics, Exhibitions as</j.0:altLabel>
</rdf:Description>
<rdf:Description rdf:about="http://id.nlm.nih.gov/mesh/2020/T000950545">
<j.0:altLabel xml:lang="en">Psychiatric Fetishism</j.0:altLabel>
</rdf:Description>
<rdf:Description rdf:about="http://id.nlm.nih.gov/mesh/2020/T000950541">
<j.0:altLabel xml:lang="en">Psychological Extraversion</j.0:altLabel>
</rdf:Description>
</rdf:RDF>
Комментарии:
1. вы могли бы попытаться добавить
qeh.setModelContentType(WebContent.contentTypeRDFXML);
2. Спасибо, но результат не был изменен.
3. «Конечная точка вернула тип содержимого: application / sparql-results xml, который не является допустимым синтаксисом RDF» таким образом, другой конец вернул набор результатов, это не проблема согласования содержимого — возможно, запрос rq выбран случайно.
4. Я подтвердил, что выданный запрос был запросом CONSTRUCT SPARQL, а не SELECT. Я пробовал несколько раз, так что между клиентом и сервером было что-то не так. Я хотел бы узнать больше о том, что происходило между ними.
5.Также я попробовал команду rsparql и получил следующее
$ rsparql --service https://id.nlm.nih.gov/mesh/sparql --query test.rq
org.apache.jena.query.QueryException: Endpoint returned Content Type: application/trig,application/n-quads;q=0.9,application/ld json;q=0.8,*/*;q=0.3 which is not a valid RDF syntax
at org.apache.jena.sparql.engine.http.QueryEngineHTTP.execConstructWorker(QueryEngineHTTP.java:493) ...