Я строю небольшой граф знаний из троек строк, используя 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, и если да, то как? Любая помощь приветствуется.