Documente Academic
Documente Profesional
Documente Cultură
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
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).
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.
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"))
}
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).
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).
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.
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)
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.
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.
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.
Un singur
ecran pentru
Query i
Update
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
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.
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.
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)
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")
}
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)
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")
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).
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.
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 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:
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
// ========================================================================
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".
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.