Python RDF lib - строковое значение для узлов

Я использую библиотеку RDF для получения значений из онлайн-магазина тройного хранения.

Мне было интересно, каков идеальный способ превратить URIRef и литералы в простые строковые объекты?

Например:

value = g.value(s,FOAF.page)

Должен ли я использовать value.n3(), или же value.__str__()? Есть ли разница? На моих тестах оба возвращают жало, которое выглядит одинаково.

Первоначально я просто сохранял значение, но оказалось, что это вызывает проблемы при сравнении строк, поэтому я хотел бы просто сохранить строку, так как после извлечения нет обработки, связанной с rdf.

1 ответ

Решение

Если вы хотите получить строковое содержимое литерала, используйте str(value), Обратите внимание, что это отбрасывает некоторую информацию - тип данных и язык - которые являются частью модели RDF.

Для сравнения:

lit = rdflib.term.Literal('Literal\nvalue', lang='en')

print(str(lit))
print('---')
print(lit.n3())

дает:

Literal
value
---
"""Literal
value"""@en

Звучит так, будто ты хочешь первое.

Увидеть pydoc3 rdflib.term.Literal.n3 для более подробной информации о том, что n3() метод возвращает.

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