Я новичок в rdflib (и RDF / OWL), поэтому у меня возникают проблемы с пониманием документации по rdflib в отсутствие конкретных примеров / руководств для неспециалистов.
У меня есть подкласс OWL, для которого я хочу создать три возможных значения. Я нашел этот официальный пример тенниса с "конечным результатом", который, я полагаю, мне понадобится, который я хотел воссоздать с моими данными, используя rdflib.
Я нашел rdflib "rdflib. extras.infixowl.EnumeratedClass ", и попытался изменить и запустить пример кода, но мой сериализованный вывод не похож на вывод примера теннис.
Мой код:
from rdflib import URIRef, BNode, Literal, Namespace, Graph
from rdflib.namespace import RDF, RDFS, OWL
from rdflib.extras.infixowl import EnumeratedClass, Individual
from rdflib.collection import Collection
from rdflib.util import first
n = Namespace("http://example.org/example/")
g = Graph()
g.bind("owl",OWL)
g.bind("", n)
my_class = n.my_class
g.add((my_class, RDF.type, OWL.Class))
g.add((my_class, RDFS.subClassOf, OWL.Thing))
g.add((my_class, RDF.ID, Literal("my_class")))
my_subclass = n.my_subclass
g.add((my_subclass, RDF.type, OWL.Class))
g.add((my_subclass, RDF.ID, Literal("my_subclass")))
g.add((my_subclass, OWL.subClassOf, my_class))
Individual.factoryGraph = g
my_list = EnumeratedClass(n.my_list,
members=[n.listitem1,
n.listitem2,
n.listitem3])
col = Collection(g, first(
g.objects(predicate=OWL.oneOf,
subject=my_list.identifier)))
[g.qname(item) for item in col]
Это дает мне:
<owl:Class rdf:about="http://example.org/example/my_subclass">
<rdf:ID>my_subclass</rdf:ID>
<owl:oneOf rdf:parseType="Collection">
<rdf:Description rdf:about="http://example.org/example/listitem1"/>
<rdf:Description rdf:about="http://example.org/example/listitem2"/>
<rdf:Description rdf:about="http://example.org/example/listitem3"/>
</owl:oneOf>
<owl:subClassOf rdf:resource="http://example.org/datacategories/my_class"/>
</owl:Class>
, а не формат «первый / отдых», который можно увидеть в официальном примере с теннисом.
Во-первых: это неправильно?
Во-вторых: Если кто-то может объяснить мне, какова эффективная разница между этими двумя форматами и есть ли предпочтение, я был бы очень признателен.
Спасибо!