Como fazer ?
Escrever termos,
Usar termos em frases,
Fazer afirmações usando os termos,
Montar classificações dos termos,
Criar regras de geração de novas afirmações,
provar a veracidade de novas afirmações,
Saber quem afirmou, classificou,fez regras e
provou
ter confiança nas afirmações.
Confiança
Provar
Regras
Classificações
Afirmações
Frases
Escrever
Termos
Quem
Escrever termos,
usar termos em frases,
Fazer afirmações usando os termos,
Montar classificações dos termos,
Criar regras de geração de novas
afirmações,
provar a veracidade de novas
afirmações,
Saber quem afirmou, classificou,fez
regras e provou
ter confiança nas afirmações
OWL baseado em Description Logic;
existem coisas que DL não pode
expresar
Exemplo: Regras de Horn:
(P1 ∧ P2 ∧ …) → C
Muitos sistemas baseados em regras
prescisam intercambiar regras
Existe portanto um novo tipo de dado
na web para ser trocado (regras)
Camada Lógica
Esta camada permite, através de regras
consultar paginas, fazer filtragem de
conteúdos, concluir sobre fatos.
Quais os professores que trabalham no
mesmo departamento do Prof. Gauthier?
Seria necessário acessar páginas de professores onde o
local de trabalho seja igual ao do prof. Gauthier.
Quais os colegas de turma de graduação do
reitor da ufsc?
Seria necessário criar regras que definam “colega de
turma” acessar uma ontologia sobre universidades,
localizar o significado de reitor, localizar a instÂncia.....
Algumas linguagens
RuleML
F-Logic
SWRL
RuleML
''The discount for a customer buying a
product is 5 percent
if
the customer is premium and the
product is regular.''
Implies
body
head
Atom
And
Atom
discount
Rel
customer
Var
product
Var
Atom
5.0
Ind
premium
Rel
customer
Var
regular
product
Rel
Var
<Implies>
<head>
<Atom>
<Rel>discount</Rel>
<Var>customer</Var>
<Var>product</Var>
<Ind>5.0</Ind>
</Atom>
</head>
<body>
<And>
<Atom>
<Rel>premium</Rel>
<Var>customer</Var>
</Atom>
<Atom>
<Rel>regular</Rel>
<Var>product</Var>
</Atom>
</And>
</body>
</Implies>
SWRL: A Semantic Web Rule
Language Combining OWL
and RuleML
http://www.w3.org/Submission/SWRL/
Regras
Uma regra contem:
Antecedente = corpo
Conseqüente = cabeça
Antecedente
Conseqüente
Exemplo de regra
Meteorologia prevê chuva;
o céu esta nublado;
Levo guarda-chuva e
uso galocha
tanto corpo como cabeça
conjunções positivas de átomos (?)
não aceita de negação ou disjunção
informalmente se todos os átomos
no corpo(antecedente) são
verdadeiros então todos os átomos
na cabeça (conseqüente) devem
ser verdadeiros
Regras SWRL são escritas
em termos de átomos
Átomos podem ser:
C(x), P(x,y), sameAs(x,y) ou
differentFrom(x,y), builtIn(r,x,...)
C -classe OWL,
P - propriedades OWL
x e y - instâncias OWL ou valores
de dados em OWL
builtIn(r,x,...)
r - relação entre os argumentos
built-in é uma relação (predicado) r que
toma vários argumentos (variáveis) e
tem o valor verdadeiro se os
argumentos satisfazem a relação r
swrlb:equal (x,y)
é verdadeiro se e somente se o primeiro
argumento e o segundo são os
mesmos.
Exemplo
Uma regra SWRL dizendo que uma
“pessoa” com um “gêmeo” do sexo
“masculino” tem um “irmão” requer
os conceitos em OWL de:
pessoa,
gêmeo
masculino,
irmão
Em OWL (intuitivamente)
Pessoa -> Classe
Masculino -> subclasse Homem de Pessoa,
Gêmeo -> propriedade tem_gêmeo de Pessoa
Irmão -> propriedade tem_irmão Pessoa
Pessoa(?p) ^ tem_gêmeo(?p,?s) ^ Homem(?s) ->
tem_irmão (?p,?s)
Executar a regra tem o efeito de colocar a
propriedade tem_irmão para todas as intancias
de pessoas OWL com um ou mais gêmeos
homens referindo-se a eles
Regra que diz que uma
Pessoa(classe) que tem seu
próprio carro (propriedade) deve
se classificada como
Motorista(classe)
Pessoa(?p) ^ tem_carro(?p, true)
-> Motorista (?p)
Todas as instâncias de Pessoa que
tenham carro serão classificadas
também como instancia de
Motorista
Instancias nomeadas em uma
ontologia podem também ser
referenciadas diretamente em
regras SWRL
Para uma instância de pessoa
chamada Carlos:
Pessoa(Carlos) ^
tem_carro(Carlos, true) ->
Motorista (Carlos)
Regras com vários átomos
conseqüentes
podem ser transformadas em múltiplas
regras cada uma com um único átomo
conseqüente
R1: Meteorologia prevê chuva e o
céu esta nublado -> Levo guardachuva e uso galocha
R1.1: Meteorologia prevê chuva e o
céu esta nublado -> Levo guardachuva
R1.2: Meteorologia prevê chuva e o
céu esta nublado -> uso galocha
Representação informal
As representações anteriores são
informais para permitir uma
representação que possa ser lida pelos
seres humanos
Existe uma sintaxe abstrata (abstract
syntax) especificada por meio de uma
versão de Extended BNF
rule ::= 'Implies(' [ URIreference ] {
annotation } antecedent consequent ')‘
antecedent ::= 'Antecedent(' { atom } ')‘
consequent ::= 'Consequent(' { atom } ')'
atom ::= description '(' i-object ')'
| dataRange '(' d-object ')'
| individualvaluedPropertyID '(' i-object iobject ')'
| datavaluedPropertyID '(' i-object dobject ')'
| sameAs '(' i-object i-object ')'
| differentFrom '(' i-object i-object ')'
| builtIn '(' builtinID { d-object } ')'
builtinID ::= URIreference
i-object ::= i-variable | individualID
d-object ::= d-variable | dataLiteral
i-variable ::= 'I-variable(' URIreference ')'
d-variable ::= 'D-variable(' URIreference ')'
Example 4.1-1 (w3c...)
A simple use of these rules would be to
assert that the combination of the
hasParent and hasBrother properties implies
the hasUncle property.
Informally, this rule could be written as:
hasParent(?x1,?x2) ∧ hasBrother(?x2,?x3)
⇒ hasUncle(?x1,?x3)
abstract syntax :
Implies(
Antecedent(
Consequent(
)
hasParent(I-variable(x1) I-variable(x2))
hasBrother(I-variable(x2) I-variable(x3))
)
hasUncle(I-variable(x1) I- variable(x3))
)
Sintaxe concreta em XML
Combinação de OWL Web Ontology
Language XML Presentation Syntax
[OWL XML] com RuleML XML syntax
[RuleML].
Exemplos
Iniciar projeto novo no Protégé
Selecionar Project->Configure->SWRL
Criar ontologia de Familia
Classes: Pessoa, Homem,Mulher, Pai,
Tio, Irmão, Irmã, Tia, Neto
Criar ObjectProperty de Pessoa:
tem_filhos,
tem_irmão,
tem_irmã,
tem_tio,
tem_tia
tem_Neto
Criar a seguinte Família
Instâncias de Mulher
Instâncias de Homem
Ana
Carlos, Pedro, João, João Raimundo
Colocar valores na propriedade
tem_filhos
Carlos - tem_filhos(Ana, Pedro, João)
João - tem_filhos(João Raimundo)
Especificar allDiferent
Em OWL instâncias com nomes (
propeiedade “name”) diferentes podem
representar o mesmo objeto
homem_14 (tem_nome Carlos)
homem_15 (tem_nome Carlos)
No Protégé: OWL->Edit owl:AllDiferent
Criar regras para Irmã
Pessoa(?x) ∧ tem_filhos(?x, ?y) ∧
tem_filhos(?x, ?z) ∧ Mulher(?z) ∧ →
tem_irma(?y, ?z) (ERRADA!!)
Na unificação variáveis diferentes (?y e
?z) podem pegar o mesmo objeto
tem_irma(?y, ?z) pode ser
tem_irma(Ana, Ana)
Regra Certa
Pessoa(?x) ∧ tem_filhos(?x, ?y) ∧
tem_filhos(?x, ?z) ∧ Mulher(?z) ∧
differentFrom(?y, ?z)
→ tem_irma(?y, ?z)
Usar as regras em SWRL
Baixar o Jess de:
http://herzberg.ca.sandia.gov/jess/
Descompactar e colocar o arquivo
jess.jar no diretorio do Protégé:
.....Protege_3.2.1\plugins\edu.stanford.smi
.protegex.owl
Usando o Reasoner
Reasoner Pellet
Reaoner em Java
Trabalha com OWL DL
Baseado no método do Tableaux
Ura principalmente as restrições
NÃO TRABALHA COM REGRAS
Instalação do Pellet
Fazer download de
http://pellet.owldl.com/
Descompactar
Rodar o pellet-dig junto com Protégé
No protégé OWL->Preferences alterar o
reasoner U|Rl para
http://localhost:8081