rdflib "EnumeratedClass" для создания перечислимого типа данных - PullRequest
0 голосов
/ 04 мая 2020

Я новичок в 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>

, а не формат «первый / отдых», который можно увидеть в официальном примере с теннисом.

Во-первых: это неправильно?

Во-вторых: Если кто-то может объяснить мне, какова эффективная разница между этими двумя форматами и есть ли предпочтение, я был бы очень признателен.

Спасибо!

...