Vamos Ligar e Partilhar? – Introdução ao RDFS (Parte II)
Conforme determinado no artigo anterior, hoje vamos conhecer a semântica associada aos recursos do RDF Schema. Isto é, vamos conhecer o significado e as consequências de usar (alguns d) esses recursos na definição de um esquema RDF(S).
Contexto
Tanto o RDF como o RDF Schema fazem parte da pilha tecnológica da Web Semântica (e.g. uma versão simples desta pilha está disponível aqui). Neste contexto, interessa-nos perceber em que medida estas tecnologias contribuem para os objetivos da Web Semântica e, em particular, no que diz respeito à questão da “semântica”. Assim, comecemos por clarificar o que se entende por “semântica”.
Num contexto geral e linguístico, a “semântica” relaciona-se com o dar significado ou dar sentido a um determinado símbolo, palavra ou expressão com o intuito de potenciar a sua compreensão e distinção para com outros símbolos. Também, pode ser visto como algo que condiciona ou restringe a interpretação que se pode (ou deve) fazer sobre algo. Por exemplo, dependendo do contexto a palavra “banco” é interpretada de forma diferente e, consequentemente, assume significados também eles diferentes.
No contexto da Web Semântica a “semântica” estabelece as regras para a interpretação de uma sintaxe (i.e. conjunto de símbolos e de regras que determinam as combinações corretas desses símbolos). Contudo, a “semântica” não estabelece diretamente o significado do que foi declarado (usando a sintaxe). Esta apenas restringe (ou reduz) as possibilidade de interpretação sobre o que foi declarado.
Outro fator relevante para a Web Semântica é a capacidade de a partir de um conjunto de informações declaradas, determinar (i.e. inferir) outras informações relacionadas e, seguramente, considerá-las como se tivessem sido declaradas. A inferência é o processo que relaciona dois pedaços de informação (possivelmente declarados por pessoas distintas) de forma a extrair conclusões que vão para além dos factos declarados. Por exemplo, alguém declara que “adultos são aqueles cuja idade é igual ou superior a 18 anos” e outra pessoa declara que “a Joana tem 19 anos”. Através de um processo de inferência é possível juntar as duas declarações e concluir que “a Joana é adulta” e usar essa nova informação como tendo sido declarada explicitamente para, por exemplo, responder à pergunta “Quem é adulto?”.
Na Web Semântica em geral e, em RDF(S) em particular, o significado dos dados advém tipicamente da especificação de regras que representam padrões de inferência sobre os recursos usados para descrever os dados. Esta solução é considerada como sendo bastante elegante e robusta para a compreensão do significado dos novos dados. Para demonstrar isto, vamos recorrer à base de conhecimento (i.e. conjunto de dados e esquema) usada como exemplo no artigo anterior e graficamente representada na Figura 1.
Propagação da Classificação de Instâncias
Em RDFS uma hierarquia de classes é especificada pelo adição de triplos na forma:
c1 rdfs:subClassOf c2
onde c1 e c2 são duas classes (i.e. recursos instâncias de rdfs:Class), sendo c1 subclasse de c2. Contudo, qual é o significado de dizer que uma classe (e.g. ex:Pessoa) é subclasse de outra classe (e.g. ex:SerVivo)? Informalmente, e usando uma linguagem corrente, significa que qualquer instância i da classe c1 é também uma instância da classe c2. Formalmente, este significado pode ser expresso através do seguinte padrão de inferência (especificado em pseudo-código e recorrendo a triplos padrão):
SE (c1 rdfs:subClassOf c2) E (i rdf:type c1) Então (i rdf:type c2)
Ou seja, a classificação (ou tipo) de um recurso propaga-se pelas superclasses. Este significado tem uma correspondência direta na programação orientada a objetos (OO) com o conceito de subclasse.
Aplicando este padrão ao nosso exemplo, e sabendo que
ex:Pessoa rdfs:subClassOf ex:SerVivo ex:Pessoa1 rdf:type ex:Pessoa
então o triplo
ex:Pessoa1 rdf:type ex:SerVivo
é inferido, especificando que o recurso ex:Pessoa1 é uma instância da classe ex:SerVivo.
Propagação dos Relacionamentos
Em RDFS também é possível especificar uma hierarquia de propriedades pela adição de triplos na forma:
p1 rdfs:subPropertyOf p2
onde p1 e p2 são duas propriedade (i.e. recursos instâncias de rdf:Property), sendo p1 subpropriedade de p2. Ao contrário da relação rdfs:subClassOf cujo significado tem uma correspondência direta nas linguagens de programação OO, o significado de dizer que uma propriedade (e.g. ex:nome) é subpropriedade de outra propriedade (e.g. rdfs:label) não tem essa correspondência.
O significado formal da relação rdfs:subPropertyOf pode ser expresso através do seguinte padrão de inferência:
SE (p1 rdfs:subPropertyOf p2) E (rx p1 ry) Então (rx p2 ry)
Este padrão sugere que se dois recursos (rx e ry) estão relacionados através de uma propriedade (p1) e essa propriedade é subpropriedade de uma segunda propriedade (p2) então esses dois recursos também estão relacionados através da segunda propriedade (p2).
Aplicando este padrão ao nosso exemplo, e sabendo que
ex:nome rdfs:subPropertyOf rdfs:label ex:Pessoa1 ex:nome “Maria”
então o triplo
ex:Pessoa1 rdfs:label “Maria”
é inferido, especificando o literal “Maria” como sendo uma etiqueta (label) do recurso ex:Pessoa1. Neste sentido, existe uma propagação dos relacionamentos estabelecidos através de uma propriedade (e.g. ex:nome) para as suas superpropriedades (rdfs:label).
Classificação de Recursos
Aquando da especificação de uma propriedade, podemos também representar como é que essa propriedade pode (ou deve) ser usada. Em particular, podemos querer especificar (i) o seu domínio, ou seja, a que classe(s) pertence(m) as instâncias às quais se aplica a propriedade; e (ii) o seu contradomínio, ou seja, a que classe(s) deve(m) pertencer as instâncias ou literais usados como valores da propriedade. Como descrito no artigo anterior, isto pode ser feito através do uso respetivo das propriedades rdfs:domain e rdfs:range em triplos na forma:
p rdfs:domain d p rdfs:range r
Isto significa que a relação p serve para relacionar instâncias da classe d (o domínio) com instâncias da classe r (o contradomínio). Ambas as classes (d e r) não necessitam de ser distintas nem disjuntas. Assim, o significado formal da relação rdfs:domain pode ser expresso através do seguinte padrão de inferência:
SE (p rdfs:domain d) E (rx p ry) Então (rx rdf:type d)
Este padrão sugere que se um recurso (rx) está relacionado com outro recurso (ry) através de uma propriedade (p) que, por sua vez, tem como domínio uma classe (d) então esse recurso (rx) é uma instância da classe de domínio dessa propriedade.
Similarmente, o significado da relação rdfs:range pode ser expresso através do seguinte padrão de inferência:
SE (p rdfs:range r) E (rx p ry) Então (ry rdf:type r)
Este padrão sugere que se um recurso (rx) está relacionado com um segundo recurso (ry) através de uma propriedade (p) que, por sua vez, tem como contradomínio uma classe (r) então o segundo recurso (ry) é uma instância da classe indicada como contradomínio dessa propriedade.
Aplicando estes dois padrões ao nosso exemplo, e sabendo que
ex:possui rdfs:domain ex:Pessoa ex:possui rdfs:range ex:Objeto ex:Pessoa1 ex:possui ex:Objeto1
então os triplos
ex:Pessoa1 rdf:type ex:Pessoa ex:Objeto1 rdf:type ex:Objeto
são inferidos, especificando que o recurso ex:Pessoa1 é uma instância da classe ex:Pessoa e que o recurso ex:Objeto1 é uma instância da classe ex:Objeto. Note-se que neste caso os triplos inferidos já fazem parte da nossa base de conhecimento e, como tal, não acrescentam novo conhecimento. Contudo, noutros casos poderá acrescentar.
Conclusões
Nesta segunda parte sobre RDFS introduzimos a noção de padrão de inferência para descrever formalmente a semântica diretamente associada aos recursos rdfs:subClassOf, rdfs:subPropertyOf, rdfs:domain e rdfs:range. Para além destes padrões de inferência, existem outros que resultam da interação entre padrões. Assim, para os mais interessados, deixa-se o desafio de descobrir qual o padrão de inferência resultante, por exemplo, da interação entre os padrões associados aos recursos rdfs:subClassOf e rdfs:domain.
Salienta-se ainda que estes e outros padrões de inferência são considerados universais e aceites por todos aqueles que usam o vocabulário RDF(S). Nesse sentido, não se admite qualquer exceção nem alteração aos mesmos. Assim sendo, o uso inadequado do vocabulário RDF(S) pode conduzir a conclusões formalmente válidas mas que sob o ponto de visto do domínio de aplicação dos dados não fazem qualquer sentido. A este respeito, é comum os modeladores confrontarem-se com inferências surpreendentes e (provavelmente) indesejadas, sendo uma parte significativa destas causadas pela especificação de domínio e contradomínio de uma propriedade (serão dados exemplos em futuros artigos).
Por fim, menciona-se que o RDF(S) é uma base sólida para compreender, ligar e partilhar dados entre vários repositórios. Ao nível da modelação de dados, necessidades não cobertas pelo RDF(S) (e.g. especificação de propriedades como sendo transitivas) podem ser adicionadas estendendo o mesmo. Uma das extensões mais conhecidas e usadas é o OWL – Web Ontology Language. Este será abordado em próximos artigos.
Por hoje é tudo! Esperamos que tenha gostado e deixe a sua opinião.
Este artigo tem mais de um ano
Muito bem abordado. fico à espera do próximo artigo.
Cumprimentos.