{ "cells": [ { "cell_type": "markdown", "id": "loving-wholesale", "metadata": {}, "source": [ "# Get started with owlready2 and pizza" ] }, { "cell_type": "code", "execution_count": 1, "id": "transparent-disease", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "* Owlready2 * Warning: optimized Cython parser module 'owlready2_optimized' is not available, defaulting to slower Python implementation\n" ] } ], "source": [ "from owlready2 import *" ] }, { "cell_type": "markdown", "id": "divine-approval", "metadata": {}, "source": [ "### Load ontology" ] }, { "cell_type": "markdown", "id": "bulgarian-savings", "metadata": {}, "source": [ "local file or network resources, RDF/XML, OWL/XML, NTriplets" ] }, { "cell_type": "code", "execution_count": 2, "id": "matched-arizona", "metadata": {}, "outputs": [], "source": [ "onto = get_ontology(\"http://www.lesfleursdunormal.fr/static/_downloads/pizza_onto.owl\").load() " ] }, { "cell_type": "markdown", "id": "reported-collector", "metadata": {}, "source": [ "### Ontology content" ] }, { "cell_type": "code", "execution_count": 3, "id": "vertical-garbage", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.CheeseTopping,\n", " pizza_onto.FishTopping,\n", " pizza_onto.MeatTopping,\n", " pizza_onto.Pizza,\n", " pizza_onto.TomatoTopping,\n", " pizza_onto.Topping]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.classes())" ] }, { "cell_type": "code", "execution_count": 4, "id": "infrared-craft", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.has_topping]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.properties())\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "perceived-termination", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.CheeseTopping, pizza_onto.FishTopping, pizza_onto.MeatTopping, pizza_onto.TomatoTopping, pizza_onto.Topping]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.search(iri = \"*Topping\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "clear-consultancy", "metadata": {}, "outputs": [], "source": [ "onto.save('test_start.owl')" ] }, { "cell_type": "markdown", "id": "experimental-market", "metadata": {}, "source": [ "### Classes" ] }, { "cell_type": "code", "execution_count": 7, "id": "regular-sandwich", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.CheeseTopping,\n", " pizza_onto.FishTopping,\n", " pizza_onto.MeatTopping,\n", " pizza_onto.Pizza,\n", " pizza_onto.TomatoTopping,\n", " pizza_onto.Topping,\n", " pizza_onto.Board,\n", " pizza_onto.MargueritaPizza,\n", " pizza_onto.CheeseBoard]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with onto:\n", " class Board(Thing):\n", " pass\n", " \n", " class MargueritaPizza(onto.Pizza):\n", " pass\n", " \n", " class CheeseBoard(onto.Board):\n", " pass\n", "\n", "list(onto.classes())\n" ] }, { "cell_type": "code", "execution_count": 8, "id": "silent-finnish", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.MargueritaPizza]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.Pizza.subclasses())" ] }, { "cell_type": "code", "execution_count": 9, "id": "decimal-default", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[owl.Thing, pizza_onto.Board, pizza_onto.CheeseBoard]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(onto.CheeseBoard.ancestors())" ] }, { "cell_type": "markdown", "id": "comprehensive-democrat", "metadata": {}, "source": [ "### Individuals" ] }, { "cell_type": "code", "execution_count": 9, "id": "trying-beaver", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pizza_onto.pizza1\n" ] } ], "source": [ "with onto:\n", " my_take_away = onto.Pizza()\n", " print(my_take_away)" ] }, { "cell_type": "code", "execution_count": 10, "id": "employed-membrane", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[pizza_onto.pizza1]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.Pizza.instances()" ] }, { "cell_type": "markdown", "id": "respected-engine", "metadata": {}, "source": [ "### Properties" ] }, { "cell_type": "code", "execution_count": 13, "id": "assured-reliance", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pizza_onto.cheeseboard1\n" ] } ], "source": [ "with onto:\n", " class has_board(onto.Pizza >> onto.Board, FunctionalProperty): # Domain = Pizza, Range = Board\n", " pass\n", " \n", " class has_price(onto.Pizza >> int, DataProperty, FunctionalProperty):\n", " pass\n", " \n", " \n", " \n", " my_take_away.has_board = onto.CheeseBoard()\n", " print(my_take_away.has_board)" ] }, { "cell_type": "code", "execution_count": 14, "id": "excellent-logan", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pizza_onto.cheeseboard1" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "onto.has_board.python_name = \"board\"\n", "my_take_away.board" ] }, { "cell_type": "markdown", "id": "alive-strengthening", "metadata": {}, "source": [ "### Logic" ] }, { "cell_type": "code", "execution_count": 15, "id": "flying-mineral", "metadata": {}, "outputs": [], "source": [ "with onto:\n", " class CheesePizza(onto.Pizza):\n", " equivalent_to = [onto.Pizza & onto.has_topping.some(onto.CheeseTopping) ]\n", " \n", " class CheapPizza(onto.Pizza):\n", " equivalent_to = [onto.Pizza & onto.has_price.some(ConstrainedDatatype(int, max_inclusive = 20))]\n", " " ] }, { "cell_type": "code", "execution_count": 16, "id": "victorian-chester", "metadata": {}, "outputs": [], "source": [ "with onto:\n", " my_take_away.has_price = 10\n", " my_take_away.has_topping = [onto.CheeseTopping() ]" ] }, { "cell_type": "code", "execution_count": 17, "id": "unlike-blink", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "* Owlready2 * Running HermiT...\n", " java -Xmx2000M -cp /usr/local/lib/python3.9/site-packages/owlready2/hermit:/usr/local/lib/python3.9/site-packages/owlready2/hermit/HermiT.jar org.semanticweb.HermiT.cli.CommandLine -c -O -D -I file:////var/folders/tp/9kq1ftdj33n9zvb5jpxnh2j80000gq/T/tmpzbfenr2w\n", "* Owlready2 * HermiT took 2.849975109100342 seconds\n", "* Owlready * Reparenting pizza_onto.pizza1: {pizza_onto.Pizza} => {pizza_onto.CheesePizza, pizza_onto.CheapPizza}\n", "* Owlready * (NB: only changes on entities loaded in Python are shown, other changes are done but not listed)\n" ] } ], "source": [ "sync_reasoner()" ] }, { "cell_type": "code", "execution_count": 18, "id": "popular-nutrition", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(my_take_away)" ] }, { "cell_type": "code", "execution_count": 18, "id": "numerical-western", "metadata": {}, "outputs": [], "source": [ "onto.save('test_end.owl')" ] }, { "cell_type": "markdown", "id": "celtic-spain", "metadata": {}, "source": [ "### Open and local close world" ] }, { "cell_type": "code", "execution_count": 19, "id": "loaded-scientist", "metadata": {}, "outputs": [], "source": [ "with onto:\n", " class MargueritaPizza(onto.Pizza):\n", " equivalent_to = [onto.Pizza & onto.has_topping.only(onto.CheeseTopping|onto.TomatoTopping) ]" ] }, { "cell_type": "code", "execution_count": 20, "id": "periodic-emission", "metadata": {}, "outputs": [], "source": [ "onto.save('test_open.owl')" ] }, { "cell_type": "code", "execution_count": 21, "id": "configured-clause", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "* Owlready2 * Running HermiT...\n", " java -Xmx2000M -cp /usr/local/lib/python3.9/site-packages/owlready2/hermit:/usr/local/lib/python3.9/site-packages/owlready2/hermit/HermiT.jar org.semanticweb.HermiT.cli.CommandLine -c -O -D -I file:////var/folders/tp/9kq1ftdj33n9zvb5jpxnh2j80000gq/T/tmpfhlz45w6\n", "* Owlready2 * HermiT took 3.361910820007324 seconds\n", "* Owlready * (NB: only changes on entities loaded in Python are shown, other changes are done but not listed)\n" ] } ], "source": [ "sync_reasoner()" ] }, { "cell_type": "code", "execution_count": 22, "id": "sexual-serve", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(my_take_away)" ] }, { "cell_type": "code", "execution_count": 23, "id": "attractive-direction", "metadata": {}, "outputs": [], "source": [ "close_world(my_take_away)" ] }, { "cell_type": "code", "execution_count": 24, "id": "egyptian-agenda", "metadata": {}, "outputs": [], "source": [ "onto.save('test_closed.owl')" ] }, { "cell_type": "code", "execution_count": 25, "id": "crude-example", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "* Owlready2 * Running HermiT...\n", " java -Xmx2000M -cp /usr/local/lib/python3.9/site-packages/owlready2/hermit:/usr/local/lib/python3.9/site-packages/owlready2/hermit/HermiT.jar org.semanticweb.HermiT.cli.CommandLine -c -O -D -I file:////var/folders/tp/9kq1ftdj33n9zvb5jpxnh2j80000gq/T/tmpiu_f0ag_\n", "* Owlready2 * HermiT took 2.112966775894165 seconds\n", "* Owlready * Reparenting pizza_onto.pizza1: {pizza_onto.CheesePizza, pizza_onto.CheapPizza} => {pizza_onto.CheesePizza, pizza_onto.MargueritaPizza, pizza_onto.CheapPizza}\n", "* Owlready * (NB: only changes on entities loaded in Python are shown, other changes are done but not listed)\n" ] } ], "source": [ "sync_reasoner()" ] }, { "cell_type": "code", "execution_count": 26, "id": "twenty-cooperative", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(my_take_away)" ] }, { "cell_type": "markdown", "id": "medieval-martin", "metadata": {}, "source": [ "### Mixing python and OWL" ] }, { "cell_type": "code", "execution_count": 27, "id": "amazing-scout", "metadata": {}, "outputs": [], "source": [ "with onto:\n", " class Pizza(Thing):\n", " \n", " def cost_of_slice(self):\n", " return self.has_price/self.slice_number\n", " \n", " cheap_pizza = CheapPizza(has_price=10, slice_number=8)" ] }, { "cell_type": "code", "execution_count": 28, "id": "falling-union", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.25" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cheap_pizza.cost_of_slice()" ] }, { "cell_type": "code", "execution_count": 29, "id": "convertible-joining", "metadata": {}, "outputs": [], "source": [ "with onto:\n", " class has_property(Thing >> Thing):\n", " pass\n", " \n", " class DemoPizza(Thing):\n", " \n", " has_property = [onto.Topping]\n", " \n" ] }, { "cell_type": "code", "execution_count": 31, "id": "initial-cleaners", "metadata": {}, "outputs": [], "source": [ "onto.save('test_last.owl')" ] }, { "cell_type": "code", "execution_count": null, "id": "exterior-shark", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" } }, "nbformat": 4, "nbformat_minor": 5 }