Ontologier og OWL

Ontologier og OWL

OWL er en samling representasjonsspråk for å skape ontologier. I dette innlegget skal vi se på de forskjellige syntaksene, samt skape en enkel ontologi med redigeringsverktøyet Protégé.

Hva er en ontologi?

En ontologi er i filosofien studien av eksistens, samt kategorier og relasjoner mellom det som er. I informatikken er dette den formelle navngivningen og definisjoner av typer, egenskaper og relasjonene mellom disse. Ontologier brukes innen kunstig intelligens, semantiske teknologier og bioinformatikk med fler for å begrense kompleksitet og organisere informasjon. Vi skal se på hvordan vi skaper ontologier for vokabularer ved å benytte språket OWL.

Vi har fra før sett flere vokabularer som er et sett med ord. Ontologien til et vokabular er meningen med disse ordene.

Web Ontology Language (OWL)

OWL er en samling representasjonsspråk for å skape ontologier. I dette innlegget skal vi se på de forskjellige syntaksene, samt skape en enkel ontologi med redigeringsverktøyet Protégé.

OWL ble en W3C anbefalning i 2004, og er nå den ubestridte standarden for ontologispråk. Språket bygger på Description Logic (DL) og kombinerer DL med RDF-teknologi. OWL forlenger RDFS med boolske operatorer, universelle og eksistensielle restriksjoner med mer.

Egenskaper i OWL

Det er tre typer av gjensidig disjunkte egenskaper (eng: mutually disjoint properties) i OWL.

  • owl:DatatypeProperty

Disse linker individer til datatyper som for eksempel xsd:string. En egenskap av denne typen er for eksempel :hasSurname.

  • owl:ObjectProperty

Disse egenskapene linker individer til individer eller klasser. Et eksempel på denne egenskapen er :hasFather.

  • owl:AnnotationProperty

Annotasjonsegenskaper har ingen logiske implikasjoner. Hva som helst kan bli annotert, og er brukt kun for data som er lesbare for mennesker. Eksempel på denne typen egenskaper er rdfs:label.

Karakteristikker for egenskaper i OWL

Objektegenskaper linker individer til individer eller klasser, så alle karakterisitkker og operasjoner kan defineres for disse. Dataegenskapene linker individer til dataverdier, så de kan ikke ha disse karakteristikkene.

Karakteristikker for objektegenskapene er at egenskapen kan være transitive, refleksive, irrefleksive, symmetriske og asymmetriske. Mer om dette er beskrevet senere i innlegget.

Felles for både objekt- og dataegenskaper er at de kan være funksjonelle, ekvivalente eller disjunkte. Annoteringsegenskaper kan ikke ha noen logiske egenskaper, så ingenting kan bli sagt om de.

Individer

OWL introduserer owl:NamedIndividual. Individer er en instans av en klasse, men er ikke en klasse i seg selv. De er definert med aksiomer (også kalt fakta, eng: facts). Det er to typer fakta:

  • Fakta om klassetilhørighet og egenskaper for individer.
  • Fakta om individets indentitet.

Klassetilhørighet og egenskaper

:MittJuletre a            :Juletre,
                          owl:NamedIndividual ;
             :eier        "Veronika" ;
             :farge       :Grønn ;
             :erPyntetMed :Glitter .

Her er det flere fakta om individet :MittJuletre. Det er en instans av :Juletre, og har :eier "Veronika", :erPyntetMed :Glitter og så videre.

Identitet

Mange språk har antakelser om «unike navn»; Forskjellige navn referer til forskjellige ting. På webben finnes det ikke slike antakelser. Samme person kan bli referert på mange forskjellige vis, med forskjellige URIer. OWL lager ikke antakelser, med mindre de er satt eksplisitt. OWL har tre forskjellige egenskaper som sier noe om identiteten.

owl:sameAs

To URIer beskriver samme individ.

owl:differentFrom

To URIer beskriver forskjellig individ.

owl:AllDifferent

Idiom for å si at en rekke individer er disjunkte.

Vær forsiktig med bruken av owl:sameAs. Denne egenskapen beskriver at to URIer er identiske og ekvivalente. Den skal ikke brukes om individer som er tilnærmet like. For flere beskrivelser av identitet, kan man bruke vokabularet SKOS.

Eksempel med universelle restriksjoner i OWL/RDF

Her kommer et eksempel som beskriver et juletre som et bartre.

Description logic

Juletre ⊑ ∀ Tresort.Bartre

RDF-graf

Turtle syntaks

:Juletre rdfs:subClassOf [ a                   owl:Restriction ;
                             owl:onProperty    :Tresort ;
                             owl:allValuesFrom :BarTre
                         ] .

OWL functional syntaks

SubClassOf(Juletre ObjectAllValuesFrom(Tresort Bartre))

OWL syntakser

Som eksemplene over viser, så finnes det flere syntakser for å beskrive OWL. I tillegg til DL, OWL Functional og RDF, skal jeg også introdusere en fjerde form; Manchester syntaks.

Denne tabellen illustrerer OWL konstruktører (fra OWL Functional) og deres ekvivalenter i DL syntaks og Manchester.

OWL

DL

Manchester

intersectionOf

C ⊓ D

C AND D

unionOf

C ⊔ D

C OR D

complementOf

¬ C

NOT C

oneOf

{a} ⊓ {b} ...

{a b ...}

someValuesFrom

∃RC

R SOME C

allValuesFrom

∀ RC

R ONLY C

minCardinality

≥ N R

R MIN 3

maxCardinality

≤ N R

R MAX 3

cardinality

= N R

R EXACTLY 3

hasValue

∃R {a}

R VALUE a

NegativePropertyAssertion

¬R(a, b)

a NOT R b

hasSelf

∃R.Self

SELF

Matematiske egenskaper og operasjoner

Som nevnt i avsnittet om egenskaper i OWL, så kan objektegenskapene tilegnes karakteristikker som sier noe om hvordan relasjonene som denne egenskaper beskriver oppfører seg.

La oss si at R er en relasjon over settet X(R SUB X × X) og, er

  • refleksiv, hvis <a,a> ∈ R for alle ∈ X
  • irrefleksiv, hvis <a,a> ∉ R for alle ∈ X
  • symmetrisk, hvis <a, b> ∈ R impliserer <b, a> ∈ R
  • asymmetrisk, hvis <a, b> ∈ R impliserer <b, a> ∉ R
  • transitiv, hvis <a,b>, <b,c> ∈ R impliserer <a,c> ∈ R
  • funksjonell, hvis <a,b>, <a,c> ∈ R impliserer b = c

Eksempler på relasjoner fra et «lesbart» språk som dekker disse karakteristikkene er

  • Symmetrisk: hasSibling
  • Ikke-symmetrisk: hasBrother
  • Asymmetrisk: olderThan
  • Transitiv: hasSibling, olderThan
  • Funksjonell: hasBiologicalMother
  • Invers funksjonell: gaveBirthTo

Bygge en ontologi med redigeringsverktøyet Protégé

Nå som vi har fundamentet for OWL på plass, kan vi begynne å se på hvordan vi kan byge en ontologi med redigeringsverktøyet Protégé. Protégé er et open source verktøy som kan lastes ned gratis fra hjemmesiden [1].

I denne gjennomgangen av Protégé skal vi bygge en ontologi for juletrær og julepynt. Programmet kjøres ved å kjøre filen run.

Det første vi kan gjøre er å gi en IRI (International resource identifier) til ontologien vår, denne kan være hva som helst i dette eksempelet.

Legge til klasser

Under fanen Entities har vi oversikt over klasser og egenskaper. I OWL er alle klasser sub-klasser av owl:Thing. Med knappen  kan vi legge til nye klasser.

Jeg legger inn følgende klassehierarki som representerer trær, julepynt og juletre.

Legge til egenskaper

I vinduet nederst til venstre under fanen Entities finner vi en oversikt over de forskjellige egenskapene. Her legger jeg til to objektegenskaper og to dataegenskaper.

Legge til individer

Under fanen Individuals by class kan vi legge til individer av klassene våre. Som bildet viser har jeg lagt til to individer under klassen Glitter; Gullglitter og Sølvglitter. Klassene, egenskapene og individene blir automagisk gitt en URI som tilsvarer ontologiens IRI med et fragment som er lik identifikatoren for klassen, egenskapen eller individet.

Når vi har et individ markert får vi opp flere valg for å legge inn relasjoner for dette individet i vinduene til høyre. Under Object propterty assertions har vi muligheten til å legge inn relasjoner ved å bruke objektegenskapene. Her sier jeg at fargen til Gullglitter skal være Gull. Individet Gull legger jeg til via Object property assertions-vinduet ved å bruke knappen

Gull legges ikke under noen klasse, så Protégé legger denne inn under owl:Thing, da alt er et element i owl:Thing. Det kan vi se om vi trykker på Thing under fanen Individuals by class.

Vi kan legge inn flere restriksjoner på individet Gullglitter i vinduet Description. Her ser vi allerede at Gullglitter er av typen Glitter. Oversatt til RDF vil dette være :Gullglitter rdf:type :Glitter .
Jeg legger også inn restriksjonen at Gullglitter ≠ Sølvglitter.

Restriksjoner på egenskaper

Vi kan legge til nye faner ved Window > Tabs i menyen på toppen. Her har jeg lagt til fanen Data properties. Dataegenskapen størrelse har jeg gitt en rdfs:range til int, slik at denne egenskapen kan inneha literaler av typen int. Jeg har også lagt til en annotasjonsegenskap som sier noe om hva størrelsen er. Husk at annotasjonsegenskaper ikke gir noen logikk til ontologien, men er kun til for å kunne leses av mennesker. Egenskapen er ikke funksjonell, da jeg ønsker at en klasse eller et individ kan kunne ha flere enn én størrelse.

MittJuletre

Nå som vi har egenskaper og klasser på plass for å skape et juletre, kan vi legge til individet MittJuletre under klassen Juletre. Jeg har jukset litt og lagt til ristriksjoner på dataegenskapene og objektegenskapene, samt noen flere individer som beskriver pynt og farger.

I beskrivelsen av juletre har jeg lagt inn restriksjonen at dette juletreet er av typen Gran og det er ikke Furu eller Bjørk. Når man legger til nye restriksjoner () får man flere valg, blant annet Class expression editor. Her kan man skrive inn Manchester syntaks for restriksjoner. Syntaksen for å si at treet er Gran og ikke Furu eller Bjørk er Gran and (not (Furu or Bjørk)). 

Ressonering (eng: reasoning)

Med Protégé følger et ressoneringsverktøy som kan fortelle oss noe om gyldigheten ved ontologien vår. Hvis vi har noen logiske brister vil den fortelle oss dette, samt indirekte implikasjoner. Vi kan skru på ressoneringsverktøyet i menyen på toppen Reasoner > Start reasoner.

Ressoneringsverktøyet forteller oss at MittJuletre også er av typen Gran. Det gjør den fordi vi har lagt på restriksjonen Gran and (not (Furu or Bjørk)).

Eksportere ontologien

Vi kan lagre ontologien med File > Save As. Her får vi flere valg for formater vi ønsker å lagre på. Jeg velger Turtle, da dette er det mest lesbare formatet for meg.

Turtle-filen du får fra Protégé er godt formatert og særdeles lesbar. Her er beskrivelsen av MittJuletre fra Turtle-filen.

:MittJuletre a :Juletre ,
              owl:NamedIndividual ,
              [ rdf:type owl:Class ;
              owl:intersectionOf ( :Gran
                                   [ rdf:type owl:Class ;
                                     owl:complementOf [ rdf:type owl:Class ;
                                                        owl:unionOf (:Bjørk  :Furu)
                                                      ]
                                   ]
                                 )
              ] ;
             rdfs:label   "Mitt juletre i 2015."@no ;
             :størrelse   "2"^^xsd:int
             :eier        "Veronika"^^xsd:Name ;
             :farge       :Grønn ;
             :erPyntetMed :Gullglitter ,
                          :Røde_kuler .

Alle de blanke nodene beskriver restriksjonen vår at juletreet skulle være Gran og ikke Furu eller Bjørk.

Hvis vi har en stor ontologi med mange aksiomer og logikk, kan vi bruke File > Export inferred axioms as ontology. Denne gir deg muligheten til å inkludere absolutt alt som du har beskrevet i Protégé, inkludert de sluttningene ressoneringsverktøyet gir. 

Importere andre ontologier

Det fins allerede mange ontologier der ute. Dublin Core og BBC Music er eksempler på dette. Hvis du ønsker å gjenbruke eksterne ontologier, kan du gjøre dette via vinduet Ontology imports under fanen Active Ontology.

Er du usikker på hvor du finner all verdens ontologier, kan du for eksempel benytte deg av ontologi-søkemotoren Swoogle [2]. Merk at Swoogle er noe utdatert, flere ontologier finnes også på W3Cs oversikt [3]. Ellers er Google alltid et godt verktøy.

Oppsummering

Med dette innlegget er bloggserien om semantiske teknologier over. I dette blogginnlegget har vi fått en innføring i OWL og språkets mange syntakser, vi har også sett litt på matematiske funksjoner og operasjoner man burde kjenne til under arbeid med ontologier. I tillegg har vi prøvd oss på redigeringsverktøyet Protégé og lagd vår egen ontologi.

Hvis du vil lære mer om semantiske teknologier kan jeg anbefale boken Foundations of Semantic Web Technologies [4].

Referanser

[1] Standford. 2015. Protégé.

[2] Swoogle. 2007. 

[3] W3C Wiki. 2013. List of ontologies.

[4] Hitzler, P., Krötzsch, M., Rudolph, S. 2009. Foundations of Semantic Web Technologies. Chapman & Hall/CRC.

 

Om bloggeren:
Veronika har studert programmering og nettverk ved Universitetet i Oslo og har en forkjærlighet for logikk, semantiske teknologier, typografi og elektronikk.

comments powered by Disqus