Странное поведение согласования содержимого в отношении КОНСТРУКТИВНОГО запроса SPARQL

#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) ...