Sunteți pe pagina 1din 20

Inferene RDF Schema (Sesame)

Am vzut cum putem realiza reguli ncorporate n interogri (CONSTRUCT, INSERT WHERE) pentru a
genera afirmaii noi pornind de la cele existente.

O alt abordare este stocarea regulilor direct n baza de cunotine, alturi de afirmaii, cu o serie de
avantaje:
Regulile sunt permanent stocate n baza de cunotine i disponibile oricrui client, nu doar celui
care realizeaz o anumit interogare
Regulile pot fi ele nsele interogate, copiate, reutilizate de alte baze de cunotine (pot fi stocate
separate de restul afirmaiilor i importate de diverse baze de cunotine)
Generarea afirmaiilor noi are loc n mod automat de cte ori se uploadeaz cunotine noi, fr
a necesita executarea unei interogri
Dac se terg sau modific afirmaii, regulile se reexecut automat pentru a pstra consistena
logic a afirmaiilor generate

Aceast abordare necesit ns unele elemente suplimentare fa de modul de lucru de pn acum:


1. Regulile trebuie formulate fie (a) ntr-o sintax dedicat pentru reguli (SPIN, SWRL etc.), fie (b)
ca axiome (afirmaii RDF ce folosesc termeni standardizai de tip RDFS i OWL i au ca subiecte
clase sau proprieti). n acest semestru vom exemplifica doar abordarea bazat pe axiome
(axiomele formeaz un vocabular sau o ontologie);
2. Serverul trebuie s aib instalat un motor inferenial care s asigure generarea automat a
noilor afirmaii, fr intervenia utilizatorului. Pentru aceasta motorul inferenial trebuie s fie
capabil fie (a) s interpreteze sintaxa n care s-au scris regulile, fie (b) s interpreteze axiomele ca
reguli (pe baza folosirii corecte a termenilor standardizai). n acest semestru vom exemplifica
doar abordarea bazat pe axiome, folosind urmtoarele motaore infereniale:
a. Motorul inferenial RDF Schema, capabil s interpreteze termenii RDFS (este inclus n
Sesame!)
b. Motorul inferenial OWL, capabil s interpreteze termenii RDFS i OWL (nu este inclus
n Sesame, dar este disponibil ntr-un alt server similar cu Sesame, numit GraphDB).

Creai un nou depozit de cunotine n Sesame (cu numele InferRepo). De aceast dat selectai pentru
tipul bazei de cunotine Native Java Store with RDF Schema (n acest fel se va activa motorul de
inferene care interpreteaz identificatorii din vocabularul RDF Schema).

Executai o interogare generic:


select * where {?x ?y ?z}
Observai c dei nu am adugat nc afirmaii, baza de cunotine nu este goal! Aceasta conine deja
141 de axiome RDF Schema (axiome implicite) care stabilesc semnificaia termenilor cheie din
terminologia RDFS. Putei s folosii i opiunea Types pentru a vedea o list cu clase RDFS predefinite.

Pentru evita afiarea de URI integrali, definii prefixele standard n ecranul Namespaces:
rdf -> http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs -> http://www.w3.org/2000/01/rdf-schema#
Executai din nou interogarea pentru a vedea identificatorii standardizai. Efectuai clic pe rdfs:Resource
pentru a vedea subclasele acesteia, proprietile i axiomele unde apare (reamintim rdfs:Resource este
clasa universal, creia aparin toate "resursele").
Facei clic pe o proprietate pentru a vedea domeniul acesteia i codomeniul.

Adugai urmtoarea afirmaie:


@prefix :<http://expl.at#>.
:JamesCameron :directorOf :Terminator.
Executai din nou interogarea generic. Observai c dei am adugat doar o singur afirmaie numrul
total a crescut de la 141 la 147. Noile afirmaii adugate pot fi vzute n partea de jos a listei:

afirmaia adugat este :JamesCameron :directorOf :Terminator; celelalte au fost generate pe


baza axiomelor RDF Schema dup cum urmeaz:
o pentru fiecare termen X a fost generat o afirmaie X a rdfs:Resource (sunt 3 astfel de
afirmaii)
o pentru orice termen X din mijlocul unei afirmaii s-a generat o afirmaie ce specific
faptul c este o proprietate: X a rdf:Property
o n final, pentru proprietate s-a generat i afirmaia c este subproprietatea ei
(:directorOf rdfs:subPropertyOf :directorOf)
Adugai urmtoarele dou afirmaii:
@prefix :<http://expl.at#>.
@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
:directorOf rdfs:domain :Director; rdfs:range :Movie.

Spre deosebire de primul upload, aceste afirmaii ies n eviden prin urmtoarele:
au ca subiect o proprietate (:directorOf) i nu un individ
folosesc termeni RDFS standard pentru a defini semnificaia proprietii (faptul c :directorOf
este o relaie ce are loc ntre regizori i filme)
Astfel de afirmaii poart numele de axiome, iar mai multe astfel de axiome formeaz un vocabular (sau
ontologie, dac se folosesc i termeni OWL). Axiomele sunt interpretate ca reguli i permit motorului
inferenial s realizeze deducii logice automate. Putem nelege avantajele axiomelor de mai sus dac
executm interogarea:
prefix : <http://expl.at#>
select * where {:Terminator a ?z}
Chiar dac noi nu am adugat o afirmaie de forma ":Terminator a ...", Sesame e capabil s rspund c
Terminator e un film (apartenena la clasa :Movie e dedus din axioma cu rdfs:range), iar pe lang asta
este i o resurs (deoarece orice e resurs). Dac dorim s evitm rspunsul rdfs:Resource, putem
include un filtre care s elimine din rspuns orice termen standardizat (care ncepe cu adresa W3C).

prefix : <http://expl.at#>
select * where
{
:Terminator a ?z
filter (!strstarts(str(?z),"http://www.w3.org"))
}

n mod similar putem ntreba ce este :JamesCameron...


prefix : <http://expl.at#>
select * where {:JamesCameron a ?z}
...i vom afla c e regizor, dei noi nu am introdus o astfel de afirmaie (ea e dedus din axioma cu
rdfs:domain).

Aceste deducii pot fi verificate dac executm interogarea generic pentru a vedea ce afirmaii noi au
aprut n urma ultimului upload. Numrul total de afirmaii a crescut la 159 (deci nc 12 noi):
2 dintre acestea sunt axiomele nou adugate
2 dintre acestea sunt declaraii de resurse noi (:Director a rdfs:Resource, :Movie a rdfs:Resource)
2 dintre acestea sunt declaraii de clas (:Director a rdfs:Class, :Movie a rdfs:Class) rdfs:domain i
rdfs:range leag ntotdeauna o relaie de clase (s-ar fi generat i declaraia :directorOf a rdf:Property
dac nu exista deja)
Fiecare clas este o subclas a ei nsi (:Director rdfs:subClassOf :Director, :Movie rdfs:subClassOf
:Movie)
Fiecare clas este inclus n rdfs:Resource (:Movie rdfs:subClassOf rdfs:Resource, :Director
rdfs:subClassOf rdfs:Resource)
Fiecare subiect din relaia :directorOf este de tip :Director (JamesCameron a :Director)
Fiecare obiect din relaia :directorOf este de tip :Movie (:Terminator a :Movie)
S vedem cum se comport baza de cunotine dac ulterior introducerii axiomei se adaug afirmaii
noi. Adugai urmtoarele afirmaii:
@prefix :<http://expl.at#>.
:TimBurton :directorOf :Batman.
:StevenSpielberg :directorOf :ET.
Apoi executai interogri precum "Ce este TimBurton?", "Ce este ET?" etc. i vei remarca faptul c
rspunsurile exist deja, ele fiind generate automat de motorul inferenial cnd s-au uploadat noile
afirmaii. Cu alte cuvinte, axiomele se introduc o singur dat i vor afecta toate afirmaiile care se vor
aduga n viitor.
Acesta e un avantaj major fa de generarea cu INSERT sau CONSTRUCT, care genereaz afirmaii noi
DOAR pe baza afirmaiilor care exist la momentul interogrii (iar dac ulterior se adaug afirmaii,
interogarea trebuie reexecutat). n schimb motorul inferenial ine evidena generrilor care s-au fcut
n trecut (are axiomele/regulile stocate permanent) i le recalculeaz la fiecare modificare (inclusiv la
tergeri, dup cum se va arta imediat).
Cu alte cuvinte, un motor inferenial garanteaz la orice moment consistena logic a cunotinelor
generate (n timp ce INSERT/CONSTRUCT o garanteaz cel mult la momentul executrii interogrii1, cci
interogrile SPARQL nu "in minte" ce interogri s-au mai executat nainte).

Am vzut cum funcioneaz axiomele ce folosesc predicatele standard rdfs:domain (domeniu) i


rdfs:range (codomeniu). n continuare vom studia i alte axiome, cu ali termeni standard.

Adugai urmtoarea afirmaie:


@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
@prefix :<http://expl.at#>.
:Director rdfs:subClassOf :Artist.

1
uneori nici atunci, dac de la INSERT-ul precedent au avut loc i tergeri
Aceast axiom declar incluziunea ntre dou clase. Cu alte cuvinte "oricine e regizor, este i artist".
Acum dac ntrebm "ce este :JamesCameron?"...
prefix : <http://expl.at#>
select * where {:JamesCameron a ?z}
...observm c acesta a devenit i Artist dei, ca i n cazul precedent, nu am introdus nicio afirmaie de
forma :JamesCameron a :Artist. Aceast afirmaie s-a dedus din axioma de incluziune.

Mai multe axiome de tip rdfs:subClassOf pot alctui o ierarhie de clase incluse unele n altele
("taxonomie"). O astfel de ierarhie permite ca un individ s primeasc mai multe tipuri (deci pot exista
mai multe rspunsuri la ntrebarea "Ce este X?", rspunsurile fiind mai vagi sau mai precise n funcie de
ct de jos/sus poate fi poziionat individul X n ierarhie). Ierarhia de clase este scheletul oricrui
vocabular/ontologii i are n vrf clasa rdfs:Resource (clasa tuturor resurselor include orice alt clas,
deci la ntrebarea "Ce este X?" va exista cel puin rspunsul rdfs:Resource).

Executai din nou interogarea generic. S-au adugat 6 afirmaii noi:


Axioma pe care am adugat-o;
Afirmaia ce ne d rspunsul nou la interogarea de mai sus (c JamesCameron este, pe lng
regizor, i artist);
Declaraia de resurs nou adugat (:Artist a rdfs:Resource)
Declaraia de clas nou (:Artist a rdfs:Class)
Orice clas este inclus n rdfs:Resource (:Artist rdfs:subClassOf rdfs:Resource)
Orice clas este propria subclas (:Artist rdfs:subClassOf :Artist)

Adugai urmtoarea afirmaie:


@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
@prefix :<http://expl.at#>.
:AmericanDirector rdfs:subClassOf :Director.

ntrebai "Ce este James Cameron?"


prefix : <http://expl.at#>
select * where {:JamesCameron a ?z}

Rspunsul e identic cu cazul precedent, deoarece noua axiom adugat, chiar dac e tot o relaie
subClass, nu afecteaz tipul lui James Cameron (faptul c James Cameron e regizor nu e o garanie c e
neaprat i regizor american)! Practic am introdus regula "oricine e regizor american e i regizor" ns
regula nu e valabil i n sens invers faptul c JamesCameron e regizor nu l face automat i regizor
american!

Ne putem convinge de asta executnd interogarea generic. Au aprut 6 noi afirmaii, ns nu a aprut
niciuna nou despre James Cameron:
Axioma adugat de noi
Declaraia de resurs nou (:AmericanDirector a rdfs:Resource)
Declaraia de clas (:AmericanDirector a rdfs:Class)
Orice clas e inclus n rdfs:Resource (:AmericanDirector rdfs:subClassOf rdfs:Resource)
Orice clas este propria subclas (:AmericanDirector rdfs:subClassOf :AmericanDirector)
Tranzitivitatea ierarhiei de clase: AmericanDirector devine i subclas a clasei Artist, deoarece
aceasta includea clasa Director (:AmericanDirector rdfs:subClassOf :Artist).
Observai c James Cameron nu a primit tipul AmericanDirector, cci relaia rdf:type ("a") se propag
doar "n sus" prin ierarhia de clase (prin deducie logic, James Cameron primete doar tipurile de
deasupra lui Director, dar nu i pe cele de dedesubt!) Sau, cu alte cuvinte, orice instan a unei clase
este i o instan a superclaselor sale, dar nu neaprat i a subclaselor.

S se adauge urmtoarea afirmaie:


@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
@prefix :<http://expl.at#>.
:directorOf rdfs:subPropertyOf :creatorOf.

Aceast axiom are un rol similar cu axiomele subClass, dar se aplic asupra relaiilor i nu asupra
claselor! Ea poate fi interpretat sub forma unei implicaii logice ntre dou relaii, a doua fiind o
versiune mai vag a primeia: "Dac x e regizorul lui y, nseamn c x e i creatorul lui y".

Executai din nou interogarea generic pentru a vedea ce se deduce din ea. S-au adugat 5 afirmaii noi:
Axioma nou introdus
Afirmaia dedus, c JamesCameron nu doar a regizat Terminator, ci a i creat Terminator (deci
"a creat" e o versiune mai vag a lui "a regizat"); atenie, deducia e aplicat relaiei, aciunii de
a regiza (:directorOf), nu clasei regizorilor (:Director)
Declaraia de resurs nou pentru relaie nou introdus (:creatorOf a rdfs:Resource)
Declaraia c avem o nou proprietate (:creatorOf a rdf:Property)
Orice proprietate este propria subproprietate (:creatorOf rdfs:subPropertyOf :creatorOf)

Acest exemplu ne demonstreaz c nu doar clasele pot forma o ierarhie, ci i proprietile! O


supraproprietate e o relaie aplicabil ntre aceiai indivizi ca i subproprietile sale; sau, cu alte
cuvinte, o supraproprietate e o versiune mai vag i mai general aplicabil a subproprietilor sale (ex.:
dac cineva a regizat ceva, a i creat acel ceva; dac cineva e frate cu cineva, e i rud cu acel cineva
etc.).
Acelai mecanism de deducie "n sus pe ierarhie", discutat deja la subClass, se aplic i aici. Adugai
urmtoarea afirmaie:
@prefix rdfs:<http://www.w3.org/2000/01/rdf-schema#>.
@prefix :<http://expl.at#>.
:codirectorOf rdfs:subPropertyOf :directorOf.
Interpretare: "dac x a co-regizat y, putem spune c x a regizat y".

Executai din nou interogarea generic. S-au adugat 5 afirmaii noi:


Cea introdus de noi
Declaraia de resurs pentru noua resurs (:codirectorOf a rdfs:Resource)
Orice resurs implicat n relaia rdfs:subPropertyOf este o proprietate (:codirectorOf a
rdf:Property)
Orice proprietate este o subproprietate a ei (:codirectorOf rdfs:subPropertyOf :codirectorOf)
Afirmaia dedus c codirectorOf este de asemenea i subproprietate a relaiei creatorOf
(:codirectorOf rdfs:subPropertyOf :creatorOf)
Observai c nu s-a generat afirmaia :JamesCameron :codirectorOf :Terminator, deoarece deducia se
poate face doar n sus (din existena subproprietii se deduce supraproprietatea dar nu i invers!)

Realizai o tergere a unei axiome (declaraia domeniului relaiei :directorOf):


prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix : <http://expl.at#>
delete data {:directorOf rdfs:domain :Director}

Observai c s-au ters mai multe, nu doar o singur afirmaie. Pe lng cea tears explicit, au disprut
i concluziile care s-au dedus din aceasta:
:JamesCameron a :Director (concluzia dedus din domeniul relaiei :directorOf)
:JamesCameron a :Artist (dedus din concluzia anterioar combinat cu subClassOf)

Prin aceast tergere putem observa unul din avantajele majore ale utilizrii motoarelor infereniale,
comparativ cu regulile ncorporate n interogri CONSTRUCT/INSERT: dac baza de cunotine se
modific, toate deduciile se reexecut automat pentru a garanta n orice moment consistena logic a
afirmaiilor rmase.

2. Inferene OWL (GraphDB )


GraphDB este un server de cunotine construit pe baza Sesame-ului, cruia i adaug o interfa de
utilizare nou, dar i un motor inferenial care recunoate terminologia OWL (deci permite construirea
de ontologii). n ce privete accesarea prin HTTP, GraphDB ofer aceleai servicii ca i Sesame, unica
modificare fiind aceea c n adresele URL la care se pot trimite cereri HTTP nu mai apare poriunea
openrdf-sesame. Deci n loc de adrese precum:
http://localhost:8080/openrdf-sesame/repositories/numele bazei de cunotine/rdf-graphs/service?
Se vor putea folosi adrese precum:
http://localhost:8080/repositories/numele bazei de cunotine/rdf-graphs/service?

OWL e o terminologie mai bogat dect RDFS include toi termenii RDFS, dar i unii suplimentari ce
permit, de exemplu, detectarea de contradicii prin deducii logice. Pe lng asta, permit s se
detecteze ce sunt lucrurile menionate n afirmaii, pe baza unor criterii mai sofisticate dect relaiile
O alt diferen major este c OWL are mai multe versiuni pariale (subseturi ale terminologiei OWL
complete). Motivul este c motoarele infereniale OWL au o performan slab pentru anumite deducii,
bazate pe anumii termeni OWL. Din acest motiv se ofer i posibilitatea de a folosi versiuni optimizate
ale motoarelor infereniale OWL, care nu recunosc toi termenii standard dar au performane
superioare. Exist i posibilitatea de a folosi un motor inferenial ce recunoate toi termenii OWL,
sacrificnd ns performana.
Indiferent de situaie, decizia se ia la crearea bazei de cunotine.

Versiunea gratuit (GraphDB Free) poate fi descrcat de la adresa:


http://info.ontotext.com/graphdb-free-graphdb
(Va trebui s completai un formular, dup care este posibil s ateptai cteva ore pentru a obine
aprobarea i un link pentru o adres de unde se va putea descrca. Pentru a evita acest proces putei
contacta profesoruld e la seminar s preluai kitul de instalare pe un stick.
Versiunea pe care s-au testat urmtoarele exemple este 6.6)

GraphDB este oferit n variant complet cu propriul su server Tomcat, confirguat s porneasc tot pe
portul 8080, deci asigurai-v c Tomcatul folosit pn acum pentru Sesame este oprit. n folderul
principal GraphDB vei gsi startup.bat, care asigur i pornirea serverului intern, deschiznd automat i
browserul la adresa localhost:8080, unde vei putea vedea nou interfa workbench.

GraphBD permite definirea mai multor locaii unde se vor salva bazele de cunotine. Adugarea unei
locaii se va face din seciunea Admin->Locations and Repositories->Attach Location ->calea ctre
directorul unde se vor salva bazele de cunotine. Dac nu se alege o alt locaie, acestea se vor salva n
locaia implicit users/../graphdb-workbench/data.

Numele bazei de
cunotine la care
suntei conectat

Buton de conectare la
o baz de cunotine

Folosii butonul Create repository pentru a crea o nou baz de cunotine MyRepoOWL cu urmtoarele
caracteristici:
- RepositoryID : MyRepoOWL
- Repository title: MyRepoOWL
- Rule-set: Am amintit anterior c avem posibilitatea de a alege ct de mult din terminologia OWL
s fie "recunoscut" (interpretabil ca reguli). Dintre opiunile oferite de versiunea gratuit
GraphDB, OWL2-RL este setul de reguli cel mai extins2 (n aplicaii realiste, administratorul poate
mbunti performana serverului folosind un set de reguli mai redus, sau poate extinde setul
OWL2-RL cu noi reguli ce nu sunt suportate implicit);
- Base URL: tergei identificatorul sugerat
- n partea de jos bifai caseta Check for inconsistencies pentru a activa posibilitatea de detectare
a contradiciilor, pe care o ofer motoarele infereniale OWL (nu i cele de tip RDFS!).
Dup creare trebuie s v conectai la baza de cunotine MyRepoOWL (clic pe butonul din dreptul
numelui bazei de cunotine) dac nu suntei deja conectai.

Intrai n ecranul SPARQL pentru interogri. Verificai n dreapta s avei activat opiunea de includere a
cunotinelor deduse (Include inferred data in results:ON), altfel vei vedea doar afirmaiile uploadate
manual.

Executai urmtoarea interogare generic:


select * where {?x ?y ?z}

Un singur
ecran pentru
Query i
Update

Avem posibilitatea s vizualizm n


acelai timp i interogarea i rezultatele
Avem acesteia: Editor and Resuts
posibilitatea s
definim simultan
mai multe
interogri

De aceast dat vom putea vedea peste 1800 de axiome implicite (dac la crearea bazei de cunotine
nu alegei setul de reguli OWL2-RL, numrul va fi mai mic). Principiul este acelai ca la RDFS: aceste
axiome implicite definesc semnificaia termenilor OWL i modul n care ei vor fi interpretai ca reguli de

2
Nici acesta nu suport 100% terminologia OWL, dar e cel mai larg set ce ofer garanii de performan
polinomial la generarea de afirmaii i cnd se urmrete mai mult generarea de afirmaii despre indivizi i mai
puin generarea de axiome. I se pot aduga reguli noi, dac se lucreaz cu exemple reduse. Nu vom intra n detalii
legate de performana motoarelor infereniale, cei care vor s aprofundeze pot consulta diferenele ntre mai
multe subseturi ale terminologiei OWL (numite i "profile") au la dispoziie pagina https://www.w3.org/TR/owl2-
profiles/
motorul inferenial. Mai mult, trebuie s cunoatem aceti termeni i s construim propriile axiome cu
ajutorul lor.

Rezultatele pot fi
oferite n mai multe
formate; Table
formatul cunoscut
din Sesame

Putem descrca
rezultatele n mai
multe formate

Rspunsurile pot fi extrase n


format Raw Response: arat
structura JSON care ar fi primit
la interogri prin HTTP

Pentru upload de afirmaii, folosii Data->Import->Text area


Alegem formatul pentru sintaxa
datelor introduse

Uploadai urmtoarele axiome OWL folosind butonul Import (e posibil s apar un pop-up suplimentar
n care s mai apsai o dat butonul Import):
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:hasFriend a owl:SymmetricProperty.
:hasRelative a owl:TransitiveProperty.
:hasHusband owl:inverseOf :hasWife.

Acestea sunt axiome OWL ce vor fi interpretate n modul urmtor:


Proprietate simetric = o relaie ce are loc n ambele sensuri: Dac x are prieten pe y, atunci i y
are prieten pe x
Proprietare tranzitiv: Dac x are rud pe y i y are rud pe z, atunci i x are rud pe z
Proprietate invers: Dac x are so pe y, atunci y are soie pe x

Pentru a observa efectul acestor axiome, ncrcai urmtoarele afirmaii care folosesc proprietile
definite prin axiome:
@prefix : <http://expl.at#>.
:Jim :hasFriend :George.
:Anna :hasHusband :George.
:Andrew :hasRelative :Jim.
:Jim :hasRelative :Jane.

Pe lng afirmaiile adugate manual, motorul de inferene va mai genera urmtoarele:


:George :hasFriend :Jim (datorit simetriei/reciprocitii relaiei de prietenie)
:George :hasWife :Anna (datorit relaiei inverse)
:Andrew :hasRelative :Jane (deoarece a fi ruda cuiva este o relaie tranzitiv)
Pentru a ne convinge, putem executa urmtoarele interogri (atenie, s fie activ butonul Include
inferred data in results)
prefix : <http://expl.at#>
select*
where {?x :hasFriend ?y}
(va afia relaiile de prietenie, att cele originale ct i cele deduse din reciprocitate)
prefix : <http://expl.at#>
select*
where {?x :hasWife ?y}
(va arta relaia generat pentru soie)
prefix : <http://expl.at#>
select*
where {?x :hasRelative?y}
(va arta att relaia de rudenie original ct i cea generat)

n plus, tot ce s-a discutat la RDFS e valabil i aici, toate afirmaiile generate de un motor inferenial RDFS
vor fi generate i de orice motor OWL. Deci putem obine lista complet de relaii bazndu-ne pe faptul
c s-au generat pentru fiecare afirmaii de forma "p a rdf:Property":
select *
where
{
?x a rdf:Property.
filter contains(str(?x),"expl.at")
}
(am aplicat un filtru pentru a neglija proprietile standardizate)

Adugai urmtoarele afirmaii mpreun cu o axiom OWL:


@prefix : <http://expl.at#>.
@prefix owl:<http://www.w3.org/2002/07/owl#>.

:hasUncle owl:propertyChainAxiom (:hasParent :hasBrother).


:John :hasParent :Richard.
:Richard :hasBrother :Mike.

Axioma va fi interpretat astfel: "dac x are printe pe y i y e frate cu z, atunci x are unchi pe z". Astfel,
afirmaia generat va fi:
:John :hasUncle :Mike.

Putem gsi att afirmaia generat ct i cea original despre John executnd interogarea:
prefix : <http://expl.at#>
select *
where
{
:John ?y ?z
filter contains(str(?y),"expl.at")
}

Adugai urmtoarele afirmaii mpreun cu axiomele OWL incluse:


@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:SolarSystemBody owl:onProperty :Orbits; owl:hasValue :Sun.
:Mars :Orbits :Sun.
:Earth a :SolarSystemBody.
Interpretarea axiomei: "dac x orbiteaz Soarele, atunci x este un Corp al Sistemului Solar; dac x este
un Corp al Sistemului Solar, atunci x orbiteaz soarele" (deducia poate avea loc n ambele sensuri!).

Afirmaiile generate sunt urmtoarele:


:Mars a :SolarSystemBody.
(dedus din faptul c Marte orbiteaz soarele)
:Earth :Orbits :Sun.
(dedus din faptul c Pmntul e un Corp al Sistemului Solar)

Putei verifica prin faptul c la urmtoarele interogri att Marte ct i Pmntul apar ca rspunsuri:
prefix : <http://expl.at#>
select *
where {?x :Orbits ?y}

prefix : <http://expl.at#>
select *
where {?x a :SolarSystemBody}

La acestea se mai adaug unele afirmaii mai generale (:Orbits a rdf:Property, :SolarSystemBody a
owl:Restriction .a.m.d.). owl:Restriction este mulimea acelor clase care s-au definit cu ajutorul unei
restricii aplicate asupra unei proprieti (axiomele cu owl:onProperty).
n slide-urile de la curs vei ntlni i alte exemple de axiome ce definesc apartenena la o clas cu
ajutorul unei restricii aplicate unei proprieti (practic prin asta OWL ofer versiuni mai sofisticate ale lui
rdfs:domain i rdfs:range, pentru a deduce ce este un lucu n funcie de relaiile la care particip)

Adugai urmtoarele afirmaii i axiome:


@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
:Human owl:onProperty :hasFather;
owl:maxCardinality "1"^^xsd:nonNegativeInteger.
:Jack a :Human; :hasFather :Chris, :Christoph.
:Anne :hasEmail <mailto:anne@yahoo.com>.
:Ana77 :hasEmail <mailto:anne@yahoo.com>.
:hasEmail a owl:InverseFunctionalProperty.

Interpretarea axiomelor pentru :Human (ca restricie de cardinalitate): "un om x poate avea maxim un
tat" (sau, sub form de regul: "dac x este om i are ca tat doi indivizi y i z, atunci y i z sunt acelai
individ")

Interpretarea axiomei pentru :hasEmail (ca proprietate invers funcional): "dou persoane x nu pot
avea aceeai adres de e-mail" (sau, sub form de regul: "dac x i y au aceeai adres de e-mail z,
atunci x i y sunt acelai individ")

Afirmaiile generate sunt urmtoarele:


:Chris owl:sameAs :Christoph.
(deoarece ambii indivizi sunt tat pentru Jack, iar Jack este om)
:Anne owl:sameAs :Ana77.
(deoarece ambele instane au aceeai adres email)

Putem verifica n felul urmtor (filtrul va evita afirmaiile n care o resurs e echivalent cu ea nsi):
prefix : <http://expl.at#>
select *
where
{
?x owl:sameAs ?y
filter (?x!=?y)
}
De asemenea, observai c rezultatele pentru owl:sameAs sunt afiate n ambele direcii, deoarece
exist o axiom OWL care specific faptul c owl:sameAs este o proprietate simetric (reciproc).

Sunt important de remarcat urmtoarele:


Am folosit n acest exemple axiome care permit deducerea de echivalene ntre indivizi cu
identificatori diferii (un mecanism important n detectarea fraudelor sau n descoperirea
automat a echivalenelor ntre baze de cunotine create de organizaii diferite!)
Principala diferen ntre cele dou deducii este c n primul caz deducia are loc doar pentru
indivizi de tip :Human, n timp ce n cazul e-mailului deducia are loc pentru orice subiecte,
indiferent de tipul lor. La fel de bine am putea inversa axiomele (s declarm :hasFather ca fiind
proprietate invers funcional, sau s declarm e-mailul cu cardinalitate maxim 1 pentru orice
individ de tip :Human). Sau, am putea folosi acelai gen de axiom n ambele cazuri;
n slide-urile de la curs vei ntlni i alte exemple de axiome pentru detectarea echivalenelor, nrudite cu
cele prezentate aici.

Adugai urmtoarele:
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Human owl:unionOf (:Man :Woman).
:AustrianWriter owl:intersectionOf (:Writer :Austrian).
:Johann a :AustrianWriter, :Man.

Interpretarea axiomelor este urmtoarea:


Pentru owl:unionOf: "dac x este reuniunea mulimilor y i z, atunci y i z sunt subclase ale lui x"
Pentru owl:intersectionOf: "dac x este intersecia mulimilor y i z, atunci x este subclas a
acestora"

Cu alte cuvinte, ierarhia de clase se mbogete cu ajutorul acestor operaii ntre mulimi, generndu-se
urmtoarele relaii subClass:
:Man rdfs:subClassOf :Human.
:Woman rdfs:subClassOf :Human.
:AustrianWriter rdfs:subClassOf :Writer, :Austrian.

Putem verifica prin afiarea tuturor claselor ntre care exist incluziune (folosim un filtru pentru a pstra
doar clasele create de noi i pentru a elimina axiomele care spun c orice clas e propria subclas):
prefix : <http://expl.at#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?x ?y
where
{
?x rdfs:subClassOf ?y
filter (contains(str(?x),"expl.at")&&contains(str(?y),"expl.at")&&(?x!=?y))
}

n acest caz avem un exemplu de deducii n lan, cci practic tocmai am generat o serie de axiome
RDFS! Acestea la rndul lor vor declana deducii de tip RDFS, i n consecin se vor genera i
urmtoarele:
:Johann a :Writer, :Austrian, :Human.

Putem verifica ntrebnd ce este Johann (pentru a obine toate tipurile pe care le primete din ierarhia
de clase, att cele introduse manual ct i cele generate):
prefix : <http://expl.at#>
select *
where
{
:Johann a ?x
filter contains(str(?x),"expl.at")
}

Un alt beneficiu important al motoarelor infereniale OWL fa de cele RDFS este detectarea de
contradicii. Terminologia RDFS nu ofer noiuni precum negaia sau restricia, care sunt necesare
definirii de contradicii (la baz, orice contradicie ia forma unei propoziii care e fals i adevrat n
acelai timp).

Reamintim c detectarea de contradicii s-a activat deja la crearea bazei de cunotine. Dac nu o
activm, putem detecta contradicii i pe alte ci (de exemplu prin reguli ncorporate n interogri). n
schimb dac o activm avem avantajul c motorul inferenial nu va permite deloc introducerea de
afirmaii contradictorii.

Urmtoarele exemple vor demonstra cum anumii termeni OWL faciliteaz detectarea de contradicii:

ncercai s ncrcai urmtoarele (fiecare exemplu va eua cu un mesaj de eroare artnd afirmaiile
contradictorii):

@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Man owl:disjointWith :Woman.
:Anna a :Man, :Woman.
ncrcarea va eua deoarece :Man i :Woman sunt definite ca i clase disjuncte, deci nu pot avea o
instan comun.

@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:Anna owl:sameAs :Ann.
:Anna owl:differentFrom :Ann.
Doi indivizi nu pot fi echivaleni i distinci n acelai timp. Desigur, n practic e puin probabil c vom
gsi alturate astfel de afirmaii cu contradicii evidente, ns tehnica e util atunci cnd echivalena e la
rndul su dedus din alte axiome, ca n urmtorul exemplu:

@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:J :hasEmail <mailto:j@yahoo.com>.
:John :hasEmail <mailto:j@yahoo.com>.
:hasEmail a owl:InverseFunctionalProperty.
:J owl:differentFrom :John.

n urmtorul caz ncrcarea va eua cci cardinalitatea maxim zero aplicat instanelor Orphan
contrazice faptul c John dei e orfan, are un printe declarat.
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
:Orphan owl:onProperty :hasParent;
owl:maxCardinality "0"^^xsd:nonNegativeInteger.
:John a :Orphan; :hasParent :Ann.

O variant mai sofisticat a restriciei de cardinalitate este cea n care se impune i clasa obiectelor cu
care are loc relaia. n urmtorul exemplu, o instan OrphanOfMother este cea care are maxim zero
relaii :hasParent cu o instan a clasei :Woman (deci un orfan de mam este cel care nu are mam):
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
:OrphanOfMother owl:onProperty :hasParent;
owl:maxQualifiedCardinality "0"^^xsd:nonNegativeInteger;
owl:onClass :Woman.
:Andrew a :OrphanOfMother; :hasParent :Mimi.
:Mimi a :Woman.
Spre deosebire de cazul precedent, aici contradicia de dat de faptul c Mimi aparine clasei :Woman.
Dac declarm un printe care nu e femeie, restricia de cardinalitate zero nu se mai aplic i nu avem
contradicie! Urmtorul exemplu se va putea ncrca fr eroare:
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
:OrphanOfMother owl:onProperty :hasParent;
owl:maxQualifiedCardinality "0"^^xsd:nonNegativeInteger;
owl:onClass :Woman.
:Andrew a :OrphanOfMother; :hasParent :John.

n urmtorul exemplu, o relaie asimetric a fost folosit n mod contradictoriu, n ambele sensuri (dac
Anna e mama lui Mary, Mary nu mai poate fi mama lui Anna):
@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:isMotherOf a owl:AsymmetricProperty .
:Anna :isMotherOf :Mary .
:Mary :isMotherOf :Anna .

n continuare vom modifica setul de reguli OWL2-RL pentru a include urmtoarele beneficii:
Folosirea de reguli cu cardinalitate minim (owl:minCardinality), care nu sunt permise de OWL2-
RL datorit riscului de performan inacceptabil (nepolinomial) n baze de cunotine nu
foarte mari
Un mod diferit de a trata contradiciile: n loc s instruim motorul inferenial s resping
afirmaiile contradictorii, vom permite includerea lor dar vom defini o regul care s le
marcheze cumva n baza de cunotine, astfel nct s le putem interoga ulterior.
n ambele cazuri e vorba de necesitatea de a defini propriile noastre reguli, altele dect cele prevzute
de oricare din seturile de reguli oferite de GraphDB. Acest lucru este posibil cu urmtoarele condiii:
1. S instalm Java JDK (Java Development Toolkit) i s ne asigurm c GraphDB folosete
versiunea de Java inclus n JDK (tot ce am fcut pn acum funcioneaz i pe Java JRE, care n
general e instalat pe orice calculator dar nu are compilatorul necesar motorului inferenial
pentru a ncrca reguli noi);
2. S adugm propriile noastre reguli n baza de reguli pe care o va folosi motorul inferenial i s
precizm la crearea bazei de cunotine c dorim s se foloseasc baza de reguli modificat.

Pentru primul pas trebuie s ne asigurm c avem Java JDK instalat:


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Apoi s ne asigurm c orice aplicaie Java (inclusiv Tomcat/GraphDB) folosete aceast versiune de
Java. Pentru aceasta, n variabilele de mediu Windows trebuie s avem:
Variabila JAVA_HOME indicnd spre folderul unde s-a instalat JDK (de exemplu, C:\Program
Files\Java\jdk1.8.0_77 dac s-a instalat Java 64bit pe un Windows 64bit)
Variabila PATH conine (pe lng ce are deja, separat cu punct-virgul) calea folderului bin al
aceluiai JDK (de exemplu, C:\Program Files\Java\jdk1.8.0_77\bin)
Restartm GraphDB care, dac instalarea Java a fost corect configurat, ar trebui s foloseasc de acum
versiunea Java din JDK.

Pentru pasul al doilea trebuie s modificm baza de reguli pe care o folosete motorul inferenial.
GraphDB vine cu mai multe baze de reguli, corespunztoare opiunilor selectate n opiunea Rule-set
(unde selectasem OWL2-RL). Aceste baze de reguli sunt fiiere de tip .pie ce pot fi gsite n folderul rules
din GraphDB:
C:\....\graphdb-free-6.6.3\rules

n continuare vom modifica baza de reguli OWL2-RL pentru a include i regulile noastre customizate.
Pentru aceasta, editai fiierul builtin_owl2-rl.pie. n acesta vei gsi sintaxa intern folosit de GraphDB
pentru definirea regulilor, nsoit de o serie de comentarii ce v ghideaz n scrierea de reguli3.

Putei observa c orice fiier PIE are o serie de seciuni: Prefices (pentru prefixe), Axioms (pentru
definirea axiomelor implicite care vor apare la crearea unei baze de cunotine goale), Rules (pentru
regulile propriu-zise).

Mai nti adugai regulile customizate la sfritul fiierului chiar naintea nchiderii acoladelor (deci n
seciunea Rules):

............................
Id: mymincard
x <owl:minCardinality> "1"^^xsd:nonNegativeInteger
x <owl:onProperty> p
spo
-------------------------------
s <rdf:type> x

Id: mycontradictionrule
p <rdf:type> <owl:AsymmetricProperty>
xpy
ypx
-------------------------------
prop <rdf:type> <x:AfirmatieContradictorie>
prop <x:relatieFolositaGresit> p
prop <x:participantFolositGresit> x
prop <x:participantFolositGresit> y
}

Observaii:
Fiecare regul e declarat cu Id: urmat de numele regulii.
Fiecare regul are un set de premise scrise una sub alta, apoi un ir delimitator de cratime, apoi
setul de concluzii (afirmaiile care se vor genera din premise)

3
Pentru mai multe detalii recomandm i documentaia oficial a regulilor GraphDB:
http://graphdb.ontotext.com/documentation/6.6/free/reasoning.html?highlight=reasoner#the-rule-set-file
Am creat dou reguli:
1. Prima (mymincard) va atribui tipul X oricrui individ s are are minim o apariie a proprietii p
(practic e echivalent cu regula lui rdfs:domain! oricine are o anumit proprietate p primete un
tip x)
2. A doua (mycontradictionrule) va cuta utilizri incorecte ale proprietilor asimetrice. Dac se
gsete vreuna, se va genera un nod anonim (prop) de tip x:AfirmatieContradictorie, iar la
acesta se leag relaia folosit greit (prin x:relatieFolositaGresit) precum i indivizii implicai
(prin x:participantFolositGresit). Evident acesta e doar un mod improvizat de a marca afirmaiile
ce folosesc incorect proprieti asimetrice, se pot concepe i altele. Important e s le marcm
ntr-un mod pe care apoi s l putem interoga n vederea analizrii sau tergerii lor.
Dac rsfoii fiierul de reguli vei gsi i unele a cror declarare ncepe cu Consistency n loc de Id, iar
sub irul de cratime nu conin nicio concluzie, de exemplu:

Consistency: chk1
x owl:sameAs y
x owl:differentFrom y
-------------------------------

Acestea sunt regulile de detectare a contradiciilor ele nu genereaz afirmaii, ci resping introducerea
de afirmaii contradictorii dup cum s-a vzut deja. Putem crea i noi astfel de reguli, ns n cazul de
fa detectm contradicia prin regula discutat deja, care permite introducerea de afirmaii
contradictorii ns le marcheaz ntr-un mod pe care s l putem interoga.

Deoarece n a doua regul am folosit unele concepte proprii precum i un prefix propriu, trebuie s le
declarm:

Spre nceputul fiierului, n seciunea Prefices declarai prefixul x:

Prefices
{
rdf : http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs : http://www.w3.org/2000/01/rdf-schema#
owl : http://www.w3.org/2002/07/owl#
xsd : http://www.w3.org/2001/XMLSchema#
onto : http://www.ontotext.com/
x : http://expl.at#
}
Apoi ceva mai jos, n seciunea Axioms, includei nite declaraii simple pentru conceptele folosite n
regulile noastre:

Axioms
{
// ========================================================================
// RDF axiomatic triples
// ========================================================================
// The following RDF axiomatic triples were taken from here:
// http://www.w3.org/TR/rdf-mt/#RDFINTERP
// ========================================================================

<x:AfirmatieContradictorie> <rdf:type> <rdfs:Class>


<x:relatieFolositaGresit> <rdf:type> <rdf:Property>
<x:participantFolositGresit> <rdf:type> <rdf:Property>
<rdf:type> <rdf:type> <rdf:Property>
<rdf:subject> <rdf:type> <rdf:Property>
.......................

Salvai acest fiier cu numele myruleset.pie, n acelai folder n care se afl toate bazele de reguli.

Revenii n browser i creai o nou baz de cunotine. Spre deosebire de cazul precedent, realizai
urmtoarele:
Nu mai bifai caseta Check for consistencies, pentru a permite introducerea de afirmaii
contradictorii
La caseta Rule-set nu selectai nimic
Sub caseta Rule-set folosii opiunea Upload custom rule set pentru a selecta fiierul cu noile
reguli. Calea acestuia ar trebui s devin vizibil n caseta Rule-set ca n imaginea de mai jos
(dac apare o eroare poate fi din cauza instalrii incorecte a Java JDK sau a tastrii incorecte n
fiierul de reguli)

Dup ce s-a creat baza de cunotine v putei conecta la ea i folosii Data-Import pentru a ncrca
exemplul urmtor:

@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
:Parent owl:onProperty :hasChild;
owl:minCardinality "1"^^xsd:nonNegativeInteger.
:John :hasChild :Peter.

Interpretarea axiomei e cea pe care am stabilit-o prin regula creat de noi: "dac x are minim o relaie
hasChild (indiferent cu cine), atunci x este un printe".

O interogare simpl poate obine lista prinilor, demonstrnd c regula a funcionat:


prefix : <http://expl.at#>
select * where {?x a :Parent}
Dup cum am sugerat deja, axioma de mai sus are acelai efect cu o axiom RDFS studiat deja:
:hasChild rdfs:domain :Parent.
Totui, axiomele cu owl:minCardinality sunt mai puternice, cci putem stabili un prag diferit de 1 (de
exemplu, "dac x are minim 2 soii, x este poligam")

Pentru a verifica regula de detectare a contradiciei, ncrcai exemplul folosit deja de utilizare incorect
a unei proprieti asimetrice:

@prefix : <http://expl.at#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.
:isMotherOf a owl:AsymmetricProperty .
:Anna :isMotherOf :Mary .
:Mary :isMotherOf :Anna .
De data aceasta afirmaiile nu sunt respinse la upload. n schimb ele sunt marcate i pot fi detectate
printr-o interogare ce caut nodul anonim generat de regula noastr, de exemplu:

prefix : <http://expl.at#>
select * where
{
?prop a :AfirmatieContradictorie;
:relatieFolositaGresit ?p;
:participantFolositGresit ?x.
}

Vor apare dou noduri anonime, unul pentru fiecare din cele dou afirmaii.