Использовать литерал или строку в качестве предиката SPARQL

Я строю небольшой граф знаний из троек строк, используя rdflib. Типичная тройка будет выглядеть так: Боб пошел домой, и я добавляю их на свой график, как показано ниже (я знаю, что должен использовать стандартные объекты и пространства имен, но это - это эксперимент по построению самого простого графа, который я могу):

for s, p, o in triples:
    g.add((Literal(s), Literal(p), Literal(o)))

Я пытаюсь запросить такой граф с помощью SPARQL, и мой запрос на извлечение Боба из приведенной выше тройки выглядит так:

q = """
       SELECT ?s 
       WHERE { (?s) %s Literal("home"). }
    """ % (Literal('went'))

Это дает мне ошибку ниже, которая говорит мне, что запрос искажен:

ParseException: Expected {SelectQuery | ConstructQuery | DescribeQuery | AskQuery}, found 'w'  (at char 23), (line:1, col:24)

Я пробовал вставлять фактические строки (например, пошел вместо литерала (пошел)), но это тоже не работает. Несколько сообщений, таких как этот ответ и этот ответ касается того, как сопоставлять литералы, но это, похоже, не помогает.

Итак, мой вопрос: можно ли использовать литералы или простые строки в качестве предикатов в SPARQL, и если да, то как? Любая помощь приветствуется.


person Joel Oduro-Afriyie    schedule 17.11.2020    source источник
comment
это невозможно, ознакомьтесь со спецификациями SPARQL: w3.org/TR/ sparql11-query/#defn_TriplePattern   -  person UninformedUser    schedule 17.11.2020
comment
Кстати, в RDF также невозможно использовать литералы в позиции субъекта или предиката: w3.org/TR/rdf11-concepts/#section-triples — если rdflib не хочет следовать спецификациям RDF, вам нужно использовать специальные операции rdflib для работы с этими специфическими для rdflib (недействительными RDF) график, но это невозможно через стандартный SPARQL   -  person UninformedUser    schedule 17.11.2020
comment
О, это очень полезно! Спасибо @UninformedUser. Я буду больше использовать спецификации W3C!   -  person Joel Oduro-Afriyie    schedule 17.11.2020