Как решить SPARQL предупреждение?
Я пытаюсь получить имя подписчиков комиксов. Я пытаюсь построить онтологию. У Inkers есть dbpprop, и я импортировал rdlib и sparqlWrapper, хотя у меня возникла следующая ошибка. Есть ли кто-нибудь, кто понимает эту проблему?
Abcde-MacBook-Pro:example Abcde$ python basicTest.py
WARNING:rdflib.term: does not look like a valid URI, trying to serialize this will break.
Abcde-MacBook-Pro:example Abcde$ python basicTest.py
Traceback (most recent call last):
File "basicTest.py", line 78, in <module>
g = sparql.query().convert()
File "build/bdist.macosx-10.10-intel/egg/SPARQLWrapper/Wrapper.py", line 535, in query
File "build/bdist.macosx-10.10-intel/egg/SPARQLWrapper/Wrapper.py", line 513, in _query
SPARQLWrapper.SPARQLExceptions.EndPointInternalError: EndPointInternalError: endpoint returned code 500 and response.
Response:
Virtuoso RDF01 Error Bad variable value in CONSTRUCT: "Malcolm Jones III" (tag 246 box flags 0) is not a valid subject, only object of a triple can be a literal
SPARQL query:
define sql:big-data-const 0
#output-format:application/rdf+xml
Мой код выглядит
CONSTRUCT {
?comics ma:inked_by ?inker .
?inker rdf:type ma:Inker .
}
WHERE{
?comics rdf:type dbpedia-owl:Comics .
?comics foaf:name ?name .
OPTIONAL {?comics dbpprop:inkers ?inker}
FILTER regex(str(?name), "Batman")
}"""
1 ответ
Я думаю, что проблема возникает, когда вы получаете ?inker
из. Иногда это URI, а иногда это строка. Например, следующие два верхних вывода:
"Malcolm Jones III"
http://dbpedia.org/resource/Vince_Colletta
Я думаю, что вам нужно изменить свой код таким образом, чтобы ваш Inker был либо URI, либо строкой. Следующее сохранит URI в вашей онтологии, если он существует. Если вам нужна строка, используйте ?inkername
вместо.
CONSTRUCT {
?comics ma:inked_by ?inker.
?inker a ma:Inker.
}
where {
?comics a dbpedia-owl:Comics.
?comics foaf:name ?name .
optional{
?comics dbpprop:inkers ?inker.
?inker foaf:name ?inkername.
}
FILTER regex(str(?name), "Batman")
}