How to create a simple pizza ontology?

Budowa Ontologii Pizzy: Przewodnik od Podstaw

24/01/2024

Rating: 4.93 (11522 votes)

W świecie informatyki i sztucznej inteligencji, pojęcie ontologii odgrywa kluczową rolę w strukturyzowaniu i reprezentowaniu wiedzy. Choć na pierwszy rzut oka może się to wydawać skomplikowane, przykład tak prozaiczny jak pizza, doskonale ilustruje, jak można budować złożone systemy wiedzy. Ten artykuł zabierze Cię w podróż po procesie tworzenia ontologii pizzy, wykorzystując popularne narzędzia takie jak Protégé i TopBraid Composer. Dowiesz się, jak definiować klasy, właściwości i złożone relacje, a także jak zadawać pytania do tak zbudowanej bazy wiedzy za pomocą języka SPARQL. Celem nie jest oczywiście gotowanie pizzy, lecz zrozumienie, jak komputer może „rozumieć” i przetwarzać informacje o niej.

How long does it take to build a pizza ontology?
So many features that many users have not found most of them. This is a quick trip through how to build our standard Pizza ontology in 10 minutes or less of actual typing. If you have any problems with this walkthrough it is advised that you download and run through the much more substantial Protege OWL tutorial.

Czym jest Ontologia Pizzy w Kontekście Informatyki?

Kiedy mówimy o ontologii pizzy w środowisku informatycznym, nie mamy na myśli przepisu kulinarnego czy listy składników. Mowa tu o formalnym, jawnym przedstawieniu pojęć i relacji w domenie pizzy, tak aby były one zrozumiałe dla maszyn. Ontologia pizja to model danych, który definiuje takie elementy jak: co to jest pizza, jakie ma składniki (bazy, dodatki), jakie są jej typy (np. Margherita, Hawajska), i jakie relacje zachodzą między nimi (np. pizza ma_dodatek ser). Jest to struktura, która pozwala systemom komputerowym na wnioskowanie, wyszukiwanie i integrację danych w sposób inteligentny. Wykorzystanie pizzy jako przykładu w wielu tutorialach wynika z jej uniwersalności i znajomości tematu przez większość użytkowników, co ułatwia zrozumienie złożonych koncepcji modelowania ontologicznego.

Budowanie Ontologii Pizzy w Protégé: Szybkie Wprowadzenie

Protégé to potężne środowisko do edycji ontologii, oferujące wiele funkcji, które mogą być początkowo przytłaczające. Jednakże, dzięki pewnym skrótom i efektywnym technikom, można zbudować podstawową ontologię pizzy w zaskakująco krótkim czasie. Zakładamy, że masz już wstępnie zdefiniowaną strukturę „na papierze” – listę głównych kategorii, ich podkategorii, właściwości oraz ich dziedzin i zakresów.

Konfiguracja Środowiska Protégé

Przed rozpoczęciem budowy ontologii, warto odpowiednio skonfigurować Protégé:

  • Uruchom Protégé i stwórz nową ontologię OWL. Nadaj jej odpowiednie URI związane z pizzą i określ miejsce zapisu.
  • Skonfiguruj interfejs użytkownika (UI). Włącz zakładki takie jak Matrix i Property Matrix, które ułatwią szybkie wprowadzanie danych. Możesz wyłączyć mniej używane zakładki, takie jak individuals czy object and data property, a zamiast nich używać zakładki entities.
  • Ustawienia preferencji. W sekcji New Entities wybierz auto ID, aby Protégé automatycznie nadawało unikalne identyfikatory URI, a Ty mógł skupić się na czytelnych etykietach. W zakładce Renderer zaznacz opcję Render entities using annotation values.
  • Zakładka Entities. Dodaj widok Annotation Template, co pozwoli na szybkie dodawanie adnotacji do tworzonych elementów.

Tworzenie Hierarchii Klas

Kolejnym krokiem jest zbudowanie hierarchii klas, co jest fundamentalnym elementem każdej ontologii:

  1. Wybierz zakładkę entities i upewnij się, że wybrana jest klasa Thing.
  2. Użyj Tools | Create class hierarchy, aby stworzyć podstawowe kategorie, takie jak Domain_entity, Independent_entity, Value.
  3. Następnie, pod Independent_entity, stwórz główne klasy dla ontologii pizzy: Pizza, Pizza_topping, Pizza_base.
  4. Dla Pizza_topping i Pizza_base, użyj opcji Create Class Hierarchy ponownie, tym razem dodając sufiksy (np. „_topping”, „_base”), co znacznie przyspieszy wprowadzanie poszczególnych rodzajów dodatków i baz.
  5. Dla klasy Pizza, pamiętaj, aby odznaczyć Make classes disjoint, ponieważ niektóre z tych klas będą definiowane w późniejszym etapie.
  6. Stwórz hierarchię dla wartości, np. Spiciness (Hot, Medium, Mild), z sufiksem „_value”. Zamknij partycję wartości, dodając aksjomat pokrywający (Add covering axiom).

Tworzenie Właściwości Obiektowych

Właściwości obiektowe definiują relacje między instancjami klas:

  1. W widoku Object properties stwórz dwie główne właściwości: relational_property i modifier_property.
  2. Stwórz podwłaściwości dla relational_property: has_topping i has_base.
  3. Stwórz podwłaściwość dla modifier_property: has_spiciness.
  4. W zakładce Property Matrix, ustaw has_spiciness i has_base jako właściwości functional (każda instancja może mieć tylko jedną wartość dla tej właściwości).
  5. Uzupełnij odpowiednie dziedziny (domain) i zakresy (range) dla każdej właściwości, przeciągając i upuszczając klasy z palety klas.

Dodawanie Toppingów i Pikantności

Teraz czas na konkretne dane:

  1. Przejdź do zakładki Matrix.
  2. Dodaj kolumny dla właściwości has_topping i has_spiciness, przeciągając je z palety Object properties.
  3. Dodaj wartości (np. Mild, Medium, Hot) dla poszczególnych dodatków do pizzy. Możesz przeciągać i upuszczać wartości, a także edytować komórki bezpośrednio, używając autouzupełniania. Wartości dziedziczą się, więc wystarczy dodać je do klas nadrzędnych.
  4. Dodaj podstawowe dodatki do klas pizzy, z wyjątkiem tych, które będą miały złożone definicje (np. Vegetarian Pizza, Spicy Pizza, Cheesy Pizza).

Definiowanie Złożonych Klas Pizzy

To jest moment, w którym ontologia staje się inteligentna, dzięki definiowaniu klas na podstawie restrykcji:

  1. Wróć do zakładki class.
  2. Dla pizz, które mają stały zestaw dodatków (np. Margherita_pizza, Quatro_formaggi_pizza, Seafood_pizza), kliknij prawym przyciskiem myszy na restrykcji has_topping w widoku Description i wybierz Create closure axiom. Spowoduje to utworzenie restrykcji AllValuesFrom, która oznacza, że pizza może mieć tylko te dodatki, które zostały zdefiniowane.
  3. Dla klas definiowanych na podstawie egzystencjalnych restrykcji (np. Spicy_pizza):
    • Stwórz podklasę Pizza_topping o nazwie Spicy_topping.
    • Dodaj nadklasę (superclass) w widoku description: has_spiciness some Hot_value.
    • Wybierz Edit | Convert to defined class (skrót CTRL-D/CMD-D). Spowoduje to, że wszystkie nadklasy zostaną połączone w jedną klasę równoważną (equivalent class).
    • Podobnie, stwórz lub wybierz Spicy_pizza, dodaj nadklasę has_topping some Spicy_topping i przekształć ją w klasę definiowaną.
  4. Dla bardziej skomplikowanych definicji, takich jak Cheesey_pizza (Pizza, która ma co najmniej dwa rodzaje serów) lub Vegetarian_pizza (Pizza, która nie ma dodatków mięsnych ani rybnych), dodaj odpowiednie restrykcje (np. has_topping min 2 Cheese_topping, not(has_topping some (Meat_topping or Fish_topping))) i przekształć je w klasy definiowane.

Zapisywanie, Klasyfikowanie i Sprawdzanie

Ontologia nie jest kompletna, dopóki nie zostanie sklasyfikowana i sprawdzona:

Zawsze zapisuj swoją pracę. Wybierz reasoner (silnik wnioskujący) z menu Reasoner. Spowoduje to automatyczną klasyfikację ontologii. Jeśli coś zmieni kolor na czerwony, prawdopodobnie jest to problem z aksjomatami rozłączności (disjoint axioms). Jeśli zmieniasz hierarchię klas, usuń aksjomaty rozłączności przed przeniesieniem klasy, a następnie dodaj je ponownie, gdy klasa znajdzie się w nowym miejscu.

Tworzenie Prostej Ontologii Pizzy w TopBraid Composer

TopBraid Composer to kolejne narzędzie do tworzenia ontologii, które w intuicyjny sposób wprowadza w świat RDF i OWL. Proces tworzenia prostej ontologii pizzy jest tu nieco inny, ale równie efektywny.

Kroki Tworzenia Ontologii

  1. Utwórz nowy projekt i plik RDF. Uruchom TopBraid Composer, stwórz nowy projekt o nazwie „Pizza” i nowy plik RDF o nazwie „mypizza”.
  2. Stwórz pierwszą klasę: Pizza. Kliknij na istniejącą klasę owl:Thing i utwórz jej podklasę o nazwie Pizza. W OWL, każda zdefiniowana przez użytkownika klasa jest podklasą owl:Thing.
  3. Stwórz więcej klas. Utwórz klasę rodzeństwa PizzaTopping, a następnie jej podklasy, takie jak CheeseTopping, HamTopping, TomatoTopping, EggTopping.
  4. Stwórz właściwość obiektową hasTopping. Wybierz owl:ObjectProperty i nadaj nazwę hasTopping. Ta właściwość będzie łączyć instancje dwóch klas. W OWL wyróżniamy ObjectProperty (relacje między instancjami klas) i DatatypeProperty (relacje między instancją klasy a literałem RDF lub typem danych XML Schema).
  5. Stwórz klasę MargheritaPizza i dodaj adnotacje. Utwórz nową podklasę klasy Pizza o nazwie MargheritaPizza. Dodaj adnotacje, takie jak rdf:label i rdfs:comment, aby opisać klasę, np. „Według legendy, w 1889 roku pizza Margherita została stworzona i nazwana na cześć królowej Małgorzaty.”
  6. Dodaj semantykę do klasy MargheritaPizza. Aby wyrazić, że MargheritaPizza ma relacje z TomatoTopping i CheeseTopping, użyj restrykcji klasowych (Class Restriction). W OWL, wykorzystujemy logikę deskrypcyjną, aby zawęzić możliwe stwierdzenia logiczne o klasie. Dla MargheritaPizza, stworzymy restrykcję subClassOf, wskazując, że „istnieją instancje Pizzy, gdzie właściwość hasTopping to CheeseTopping” oraz „istnieją instancje Pizzy, gdzie właściwość hasTopping to TomatoTopping”. Wybierz hasTopping jako właściwość i someValuesFrom jako typ restrykcji, a następnie wybierz odpowiednie klasy dodatków.
  7. Dodatkowe ćwiczenie. Stwórz nową klasę AussiePizza i dodaj restrykcje hasTopping z CheeseTopping, TomatoTopping, EggTopping i HamTopping.

Importowanie Istniejącej Ontologii

Często nie będziesz tworzyć ontologii od zera, ale importować istniejące. TopBraid Composer umożliwia łatwy import ontologii z URL. Możesz zaimportować np. ontologię pizzy stworzoną przez University of Manchester.

  1. W bieżącym projekcie stwórz nowy plik RDF o nazwie „pizza”.
  2. W nowym pliku przejdź do zakładki Imports i kliknij Import from URL. Wprowadź URL ontologii (np. https://protege.stanford.edu/ontologies/pizza/pizza.owl).
  3. Po zaimportowaniu, możesz eksplorować definicje i relacje w załadowanej ontologii.

Zapytania SPARQL: Klucz do Danych Ontologicznych

Po zbudowaniu ontologii, kluczowe staje się wydobycie z niej użytecznych informacji. Do tego celu służy SPARQL (SPARQL Protocol and RDF Query Language), język zapytań dla danych RDF, podobny do SQL dla relacyjnych baz danych.

Anatomia Zapytania SPARQL SELECT

Podstawowa forma zapytania SPARQL SELECT to:

SELECT [lista zmiennych oddzielonych spacją] WHERE { [lista instrukcji potrójnych oddzielonych kropką] }

Na przykład, SELECT ?subject1 ?subject2 WHERE { ?subject1 ?predicate1 ?object1 . ?subject2 ?predicate2 ?object2 . } zwróci wiersze z kolumnami ?subject1 i ?subject2.

What is the pizza ontology in protege 4?
The Pizza ontology demonstrates various features of Protege 4, using a familiar topic as its subject matter. This guide uses the Pizza ontology for most of its example text, screenshots, etc. There are several reasons for this: Although Pizza originated in Italy, Pizza parlors can be found around the world.

Ćwiczenia z Zapytaniami SPARQL dla Ontologii Pizzy

Korzystając z zaimportowanej ontologii pizzy, możesz wykonywać następujące zapytania w zakładce SPARQL:

Zapytanie SPARQLOpis
SELECT ?x WHERE { ?x rdfs:subClassOf pizza:Pizza }Wyświetla bezpośrednie podklasy klasy pizza:Pizza.
SELECT ?x WHERE { ?x rdfs:subClassOf+ pizza:Pizza }Wyświetla wszystkie podklasy klasy pizza:Pizza (bezpośrednie i pośrednie), używając operatora + dla tranzytywnej podklasy.
SELECT ?x WHERE { ?x rdfs:subClassOf+ pizza:Pizza . ?x rdfs:label ?label FILTER (regex(?label, "margherita", "i")) . }Znajduje wszystkie podklasy pizza:Pizza, których etykieta (rdfs:label) zawiera słowo „margherita” (ignorując wielkość liter dzięki flagi „i” w funkcji regex).
SELECT ?x WHERE { ?x rdfs:subClassOf+ pizza:Pizza . ?x rdfs:subClassOf [ a owl:Restriction ; owl:onProperty pizza:hasTopping; owl:someValuesFrom pizza:TomatoTopping ] }Znajduje wszystkie klasy pizzy, które mają dodatek TomatoTopping poprzez restrykcję someValuesFrom na właściwości hasTopping.
SELECT ?x WHERE { ?x rdfs:subClassOf+ pizza:Pizza . ?x rdfs:subClassOf [ a owl:Restriction ; owl:onProperty pizza:hasTopping; owl:someValuesFrom ?fishClasses ] . ?fishClasses rdfs:subClassOf+ pizza:FishTopping }Znajduje wszystkie klasy pizzy, które mają dodatek TomatoTopping ORAZ dowolny dodatek z kategorii FishTopping (wliczając jego podklasy).
SELECT ?x WHERE { ?x rdfs:subClassOf+ pizza:Pizza . ?x rdfs:subClassOf [ a owl:Restriction ; owl:onProperty pizza:hasTopping; owl:someValuesFrom ?topping ] . ?topping rdfs:subClassOf+ pizza:PizzaTopping . ?topping rdfs:label ?label . FILTER (regex(?label, "seafood", "i")) . }Znajduje wszystkie klasy pizzy, które mają dodatek (?topping), którego etykieta zawiera słowo „seafood”.

Porównanie Narzędzi: Protégé vs. TopBraid Composer

Oba narzędzia, Protégé i TopBraid Composer, są potężnymi edytorami ontologii, ale różnią się nieco podejściem i interfejsem:

CechaProtégéTopBraid Composer (Free Edition)
Podejście do budowyBardzo elastyczne, wiele widoków i funkcji do szybkiego wprowadzania (np. Matrix Tab, Create Class Hierarchy z sufiksami).Bardziej krok po kroku, intuicyjne tworzenie klas i właściwości; silny nacisk na wizualizację RDF.
Definiowanie relacjiZaawansowane opcje restrykcji, tworzenie aksjomatów domknięcia (closure axioms) z istniejących restrykcji.Intuicyjne dodawanie restrykcji someValuesFrom i allValuesFrom; klarowne wizualizacje diagramów Venna dla zrozumienia semantyki.
Zarządzanie URIOpcja auto ID dla automatycznego generowania URI, co minimalizuje błędy przy zmianie etykiet.Ręczne nadawanie nazw, które stają się częścią URI, wymaga większej uwagi na spójność.
Zapytania SPARQLMożliwe poprzez integrację wtyczek, ale nie jest to podstawowa funkcja interfejsu.Wbudowana, intuicyjna zakładka SPARQL z gotowymi przykładami i łatwym tworzeniem zapytań.
Cel tutorialiSkupia się na efektywności pracy z narzędziem i skrótami klawiszowymi.Skupia się na wprowadzeniu do konceptów RDF i OWL oraz podstawach zapytań SPARQL.

Najczęściej Zadawane Pytania (FAQ)

Czym dokładnie jest ontologia w kontekście informatyki?

W informatyce, ontologia to formalny, jawny opis pojęć i relacji w danej dziedzinie wiedzy. Służy do reprezentowania wiedzy w sposób zrozumiały dla maszyn, umożliwiając wnioskowanie, wyszukiwanie i integrację danych. Jest to jak słownik i gramatyka dla określonego obszaru wiedzy, pozwalająca komputerom na „rozumienie” danych.

Dlaczego pizza jest często używana jako przykład w tutorialach ontologicznych?

Pizza jest tematem uniwersalnym i dobrze znanym większości ludzi na całym świecie. Jednocześnie jest wystarczająco złożona, aby zademonstrować wiele zaawansowanych funkcji ontologii (np. różne dodatki, bazy, typy pizzy, stopnie pikantności), ale na tyle prosta, że koncepcje są łatwo przyswajalne. To sprawia, że jest doskonałym narzędziem dydaktycznym.

Jakie są główne różnice między właściwościami ObjectProperty a DatatypeProperty w OWL?

ObjectProperty opisuje relacje między dwiema instancjami klas (np. Pizza ma_dodatek Ser, gdzie Pizza i Ser są instancjami klas). Natomiast DatatypeProperty opisuje relacje między instancją klasy a wartością danych (literałem), taką jak liczba, ciąg znaków czy data (np. Pizza ma_średnicę 30cm, gdzie 30cm to literał).

Co to są restrykcje klasowe w OWL i do czego służą?

Restrykcje klasowe (Class Restrictions) to mechanizm w OWL, który pozwala na definiowanie klas w oparciu o ich właściwości i wartości tych właściwości. Na przykład, można zdefiniować „Pizzę Wegetariańską” jako „Pizzę, która nie ma żadnych dodatków mięsnych”. Restrykcje pozwalają na precyzyjne modelowanie i umożliwiają silnikom wnioskującym (reasonerom) wyciąganie nowych, implicitnych wniosków z ontologii.

Co to jest Reasoner i dlaczego jest ważny w pracy z ontologiami?

Reasoner to program (silnik wnioskujący), który analizuje ontologię i wyciąga z niej nowe, logicznie wynikające wnioski. Na przykład, jeśli zdefiniujesz, że „Pizza Margherita ma dodatek Ser” i „Ser jest składnikiem nabiałowym”, reasoner może wywnioskować, że „Pizza Margherita ma dodatek nabiałowy”. Reasonery są kluczowe dla sprawdzania spójności ontologii, klasyfikowania klas i instancji, oraz dla odpowiadania na złożone zapytania.

Budowanie ontologii, nawet tak pozornie prostych jak ontologia pizzy, jest potężnym narzędziem w dziedzinie semantycznego internetu i sztucznej inteligencji. Pozwala na tworzenie uporządkowanych, maszynowo czytelnych baz wiedzy, które mogą być wykorzystywane do zaawansowanego wyszukiwania, analizy danych i wnioskowania. Niezależnie od tego, czy użyjesz Protégé, TopBraid Composer, czy innego narzędzia, zrozumienie podstawowych koncepcji ontologicznych otwiera drzwi do fascynującego świata inteligentnych systemów.

Zainteresował Cię artykuł Budowa Ontologii Pizzy: Przewodnik od Podstaw? Zajrzyj też do kategorii Gastronomia, znajdziesz tam więcej podobnych treści!

Go up