Как решить 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") 

}

Другие вопросы по тегам