jak rozpoznać właściwości obiektu i właściwości typu danych?

moja онтология-to biblioteka klasyfikacji książek. Mam z tym problem. Chcę zbudować ontologię klasyfikacji książek protégé 4.1, klasyfikacja ta ma 14 kategorii, oprócz powiązanych klas Author book, Isbn. Osoby w klasie książki są przedmiotem książki (około 600 przedmiotów) , a osoby w klasie autora-autorem nazwy, a także klasą isbn. następnie miesza mi się w oknie właściwości obiektu i właściwościach typu danych. jeśli hasEdition znajduje się we właściwościach w mojej ontologii, to mówię, że każda książka w książce klasy ma stosunek do klasy wydania. dlatego używam właściwości obiektu, ale individual w tej klasie (klasie edition) - liczba całkowita


o właściwościach obiektu i rodzaju danych

w Protégé istnieją różne karty do tworzenia właściwości obiektu i właściwości typu danych. Jeśli właściwość musi wiązać osób z indywiduami, to musi być właściwością obiektu, a jeśli to wiąże się osób z literałami, to musi być właściwością typu danych.

jeśli masz nieruchomości hasEdition domenę wynosi Book, wtedy pojawia się pytanie, jaki powinien być zakres. Jeśli oczekujesz trójki na przykład:

Book72 hasEdition "1"^^xsd:int
Book16 hasEdition "3"^^xsd:int

gdzie wartość literały,hasEdition powinno być właściwością typu danych. Jeśli, z drugiej strony, masz klasę Edition Z niektórymi osobami, np.

Edition a owl:Class .
first a Edition .
second a Edition .
third a Edition .
…

tak, że można mieć

Book72 hasEdition first .
Book16 hasEdition third .

a następnie hasEdition powinno być właściwością obiektu.

Jeśli potrzebujesz zobacz szereguje RDF i określić, które typy właściwości, należy zażądać klasy owl:ObjectProperty a owl:DatatypeProperty (i dla kompletności,owl:AnnotationProperty). Czyli, w zależności od tego,hasEdition - właściwość obiektu lub właściwości rodzaju danych, która pojawi się:

hasEdition a owl:ObjectProperty .

lub

hasEdition a owl:DatatypeProperty .

decyduje, że korzystać z

jeśli chcesz hasEdition właściwości właściwość typ danych lub nieruchomości naprawdę zależy od tego, jakie dane masz zamiar przechowywać, i to zależy od twojej aplikacji. Jeśli po prostu ochotę proste informacje, takie jak "first","second", etc. to, prawdopodobnie chcesz użyć właściwości datatype, która łączy książkę z jej publikacją. To chyba dobry trasę, jeśli masz ochotę książki abstrakcyjnego, jak ja.e, nie indywidualny egzemplarzy książek (w przeciwieństwie do systemu inwentaryzacji книготорговца, która będzie dotyczyć pojedynczych egzemplarzy książek).

jeśli, z drugiej strony, to, co faktycznie jest,egzemplarzy książek. Na przykład, jeśli jesteś ... книготорговец i mieć w magazynie 25 egzemplarzy semantyczna sieć do pracy Онтолога i 27 egzemplarzy Programowanie sieci semantycznej), wtedy może być naprawdę ciekawe reprezentować poszczególne wydania książek, na których tytuł, ISBN, i tym podobne, prawdopodobnie, będą przechowywane na wydaniu, a nie na osobnej książce.

to jest po prostu opinia, i naprawdę masz dużo elastyczności w wyborze modelu danych. To zwykle zajmuje trochę doświadczenie w celu uzyskania dobrych modeli danych, a doświadczenia wymaga czasu. Tym nie mniej, masz dobre narzędzia do manipulowania i konwersji danych, więc można eksperymentować z różnymi widokami i porównać je ze sobą.

przykład skutków wyboru tego lub innego

proponuję spojrzeć na RDF Primer. Zasoby i literały-są to różne rodzaje rzeczy. Zasoby są anonimowe lub są identyfikowane IRI i mogą bądź podmiotami wypowiedzi (i, w ten sposób, bądź członkami klas, w życie wypowiedzi

@prefix lib: <http://example.org/library/> .

lib:HermanMelville rdf:type lib:Author .

literały, takie jak wiersze

lib:MobyDick lib:hasAuthor lib:HermanMelville .
lib:HermanMelville  lib:hasName "HermanMelville"@en .

w tym przypadku hasAuthor jest właściwością obiektu i hasName jest właściwością typu danych.

Z drugiej strony, można to zrobić hasAuthor właściwość typu danych i zamiast tego zrobić

lib:MobyDick lib:hasAuthor "Herman Melville"@en .

jeśli to zrobisz, to nie ma łatwego sposobu, aby dodać jakieś dodatkowe informacje o autorze, tak jak literał "Herman Melville"@en nie może być przedmiotem trójki, więc nie można na przykład powiedzieć

"Herman Melville"@en places:livedAt places:Arrowhead .

, podczas gdy w pierwszym przypadku, można powiedzieć

lib:HermanMelville places:livedAt places:Arrowhead .

to naprawdę tylko kwestia tego, jak chcesz mieć możliwość zażądania swoje dane. W takim wypadku ... --27--> jest właściwością obiektu, mogę napisać taki wniosek, aby znaleźć książki, napisane przez autorów, którzy mieszkali w Arrowhead:

PREFIX lib: <http://...>
PREFIX places: <http//...>

SELECT ?book WHERE { 
  ?book lib:hasAuthor ?author .
  ?author places:livedAt places:Arrowhead .
}

lub jeszcze bardziej krótko (ale równoważne):

PREFIX lib: <http://...>
PREFIX places: <http//...>

SELECT ?book WHERE { 
  ?book lib:hasAuthor [ places:livedAt places:Arrowhead ] .
}

Z drugiej strony, jeśli hasAuthor jest właściwością typu danych, który łączy książkę z nazwiskiem jej autora, wciąż możemy mieć Author klasy, instancje, które są skojarzone z ich nazwiskami na hasName właściwości, ale to sprawia, że dane zapytanie jest trochę trudniejsze, ponieważ hasAuthor właściwości zmusza warstwa косвенности (zobacz domeny autora książki, a następnie znajdź autora, który ma to nazwę), więc mamy takie pytania, jak:

PREFIX lib: <http://...>
PREFIX places: <http//...>

SELECT ?book WHERE { 
  ?book lib:hasAuthor ?authorName .
  ?author lib:hasName ?authorName .
  ?author places:livedAt places:Arrowhead .
}

ten wniosek nie może zostać uproszczone tak pięknie. To naprawdę sprowadza się do tego, jak chcesz, aby mieć możliwość zażądania dane, i co jest wygodne dla ciebie. Należy pamiętać, że niektóre wnioski, które można napisać w SPARQL, o wiele trudniej napisać jak wyrażenia OWL DL. Gdy hasAuthor jest właściwością obiektu, klasa książek, których autorzy żyli w Arrowhead z stosowany wyrażenie:

lib:hasAuthor (places:livedAt value places:Arrowhead)

że po prostu a klasa rzeczy, które mają autora, który mieszkał w Arrowhead. Jeśli hasAuthor - to właściwość DataType, to jest o wiele trudniejsze, jeśli nie niemożliwe, aby napisać ten wyraz, bo trzeba znaleźć dwie rzeczy (książki i autora), które mają taką samą literę wartość (ciąg znaków, imię i nazwisko autora).