Есть ли способ использовать rdflib
или аналогичный пакет для проверки набора элементов?
e.g.
from rdflib import Graph, Namespace, Literal
from rdflib.namespace import DCTERMS
n = Namespace("http://example.org/books/")
n.book
g = Graph()
g.bind("dc", DCTERMS)
g.bind("ex", n)
g.add((n["book"], DCTERMS["title"], Literal("Example Title"))) # Valid
g.add((n["book"], DCTERMS["tite"], Literal("Example Title"))) # Invalid
Или как это будет выглядеть в виде файла .ttl:
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix ex: <http://example.org/books/>
ex:book dc:title "Example Title" . # Valid
ex:book dc:tite "Example Title" . # Invalid
Есть большая вероятность, что я подхожу к этому совершенно с неправильной точки зрения, поэтому любая помощь приветствуется.
rdflib
это просто URI. Все, что я могу придумать, это проверить, является ли свойство частью словаря DCTerms, а это тривиально, верно? Вопрос в том, как насчет других свойств из неизвестных словарей? - person UninformedUser   schedule 25.09.2020rdflib
не может самостоятельно определить, что допустимо/недопустимо. Вы сказали, что один из способов - проверить, является ли свойство частью словаря DCTerms, и что это тривиально, но я на самом деле не уверен, как это сделать легко (очень плохо знаком с этой областью). И да, мой следующий вопрос будет о способе сделать это для пользовательских пространств имен. Я думал, что может быть какой-то «белый список» свойств, которые мы могли бы передатьrdflib
, но я не думаю, что это произойдет. - person jarthur   schedule 28.09.2020rdflib
— я тоже думаю, что это было бы полезно. Можно возразить, что словарь может быть закрытым, но, в конце концов, вся идея Semantic Web должна быть открытой — вы можете использовать любое пространство имен для своих собственных URI — если это имеет смысл, это действительно другая история. - person UninformedUser   schedule 28.09.2020rdflib
: проверьте исходный код здесь: github. com/RDFLib/rdflib/blob/master/rdflib/namespace.py — например, FOAF закрыт, поэтому вы можете просто проверить, есть ли предикат среди определенных терминов, а DCTERMS — нет. Итак, вы должны заранее поработать и предоставить свой собственный белый список. Для ваших пользовательских словарей вы действительно можете создатьClosedNamespace
- это вызовет ошибку, если это не в заранее определенных терминах. - person UninformedUser   schedule 28.09.2020ClosedNamespace
. В итоге я, по сути, перекатил свою собственную версию, но теперь вместо этого переключусь на эту. Если бы вы хотели добавить это как ответ, я бы с радостью принял его. - person jarthur   schedule 28.09.2020