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()
метод возвращает.