Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)

04 junho, 2007

Introdução à RDF

Isto é uma tradução do trabalho do Joshua

Introdução à RDF

Introdução breve à Resource Description Framework (RDF)

RDF é um método de expressão de conhecimento num mundo descentralizado e é uma das fundações da Web Semântica, na qual aplicações de computador utilizam informação distribuida e estruturada espalhada na Web. Só para informação prévia RDF não é estritamente um formato XML, e não é só metadados, tem pouco a haver com RSS e é menos complicado do que imagina.

Panorâmica

RDF é um método geral de decompor qualquer tipo de conhecimento em partes, com algumas regras sobre semântica ou significado dessas partes. O importante é ter um método tão simples que pode exprimir qualquer facto e contudo tão estruturado que uma aplicação de computador pode fazer coisas úteis com ele. Eis um pouco de RDF:

@prefix : <http://www.exemplo.org/> .
:joao    uma           :Pessoa .
:joao    :temMae     :susana .
:joao    :temPai       :ricardo .
:ricardo :temIrmao   :luis .

Se sabe XML, eis uma breve comparação. Tal como a RDF, XML também foi desenhada para ser simples e com utilização universal. A XML pode ser abstraída para além da notação de sinais de menor e maior que em algo mais abstracto, uma estrutura em árvore designada por DOM. De modo análogo RDF não é só o como se escreve. Trata-se de representação de informação em rede e em grafos. Pode escrever RDF em XML e muitas pessoas fazem-no. Nesse caso é similar a isto:

&tl;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:ns="http://www.exemplo.org/#">
  &tl;ns:Pessoa rdf:about="http://www.exemplo.org/#joao">
    &tl;ns:temMae rdf:resource="http://www.exemplo.org/#susana" />
    &tl;ns:temPai>
      &tl;rdf:Description rdf:about="http://www.exemplo.org/#ricardo">
        &tl;ns:temIrmao rdf:resource="http://www.exemplo.org/#luis" />
      &tl;/rdf:Description>
    &tl;/ns:temPai>
  &tl;/ns:Pessoa>
&tl;/rdf:RDF>

Mas no caso de não usar XML, eu não o uso, o primeiro formato designado por N3 é tão bom como a representação em XML.

O que distingue a RDF da XML é que a RDF foi concebida para representar conhecimento num mundo distribuido. Isto significa que a RDF está particularmente preocupada com significado. Tudo o que é mencionado em RDF significa algo, seja uma referência para algo de concreto no mundo, seja um conceito abstracto ou seja um facto. Normas concebidas sobre a RDF descrevem inferências lógicas entre factos e como pesquisar por factos em grandes bases de dados de conhecimentos em RDF.

O que torna a RDF adequada ao conhecimento distribuido é que as aplicações RDF podem unir ficheiros colocados por pessoas diferentes na Internet e aprenderem facilmente a partir deles coisas novas que nenhum documento por si só afirme. Fá-lo de duas maneiras, primeiro associando os documentos através do vocabulário comum usado e em segundo lugar permitindo a qualquer documento usar qualquer vocabulário. Esta flexibilidade é única para a RDF.

Tenha em conta este segundo documento de RDF:

@prefix : <http://www.exemplo.org/> .
:ricardo :temIrma :rebeca
{ ?a :temPai ?b . ?b :temIrma ?c . } => { ?a :temTia ?c } .

Este documento RDF define o que significa ser tia, em termos de duas outras relações. Pode imaginar uma aplicação que coloque este documento em conjunto com o primeiro documento RDF para determinar que :rebeca é tia de :joao. O que faz isto funcionar é os nomes das entidades serem globais. Assim quando :joao e :temPai são usados num documento, as aplicações podem presumir que têm o mesmo significado noutro documento RDF com o mesmo @prefix.

Então porque usar RDF? Eis casos de utilização como descritos por Richard Cyganiak na lista de correio da Web Semântica do W3C:

  • Deseja integrar dados de origens diferentes sem programação à medida;
  • Deseja providenciar dados para reutilização por outras entidades;
  • Deseja descentralizar os dados de modo a que nenhuma parte seja "dona" de todos os dados;
  • Deseja fazer algo interessante com grandes quantidades de dados (navegar, inquirir, fazer corresponder, inserir e extrair...), e assim desenvolve (ou reutiliza) uma ferramenta genérica que permite que se instale sobre um modelo de dados RDF (com a vantagem de não ficar preso a uma tecnologia de armazenamento/representação de dados tal como um dialecto de base de dados).

Definição de RDF

RDF pode ser definido com três regras simples:

  1. Um facto é expresso como um tripleto na forma de (Assunto, Predicado, Objecto). Como numa frase em linguagem natural.
  2. Assunto, predicado e objectos são nomes de entidades quer concretas quer abstractas no mundo real. Nomes são 1) globais e referem-se à mesma entidade em qualquer documento RDF em que apareçam ou 2) locais e a entidade a que se referem não pode ser referida directamente fora do documento RDF.
  3. Os objectos podem ser valores textuais, designados por valores literais.

Já viu factos. Cada linha abaixo era um facto:

:joao    a           :Pessoa .
:joao    :temMae  :susana .
  ...

Os nomes podem ter dois tipos, nomes glonais, os quais têm o mesmo significado em qualquer lado, são sempre Uniform Resource Identifiers (URI). As URI podem ter a mesma sintaxe ou formato dos endereços de um sítio na web, assim irá ver ficheiros RDF que contém URI semelhantes a http://www.w3.org/1999/02/22-rdf-syntax-ns#tipo, onde a URI é um nome global de alguma entidade. O facto de parecer um endereço web é incidental. Pode ou não haver um sítio web nesse endereço e tal não é importante. Há outros tipos de uri para além do tipo http. As URN são um subtipo de URI usadas para coisas como a identificação de livros pelo seu ISBN, isto é urn:isbn:0143934650. As TAG são um tipo de URI de utilização genérica. Elas são semelhantes a tag:govtrack.us,2005:congress/senators/first. As URI são usadas como nomes globais porque dão um modo de repartir o espaço de todos os nomes possíveis em unidades que têm proprietários óbvios. Uma URI começada por http://www.rdfabout.net/ é implicitamente controlada por Joshua Tauberer.

É importante e é necessário repetir: independentemente da forma as URI que vê em documentos RDF são meramente nomes algo verbosos para entidades nada mais. Esqueça que tenham algo a haver com a web.

Visto as URI poderem ser extensas, em várias notações RDF é normalmente possível abreviar as mesmas usando o conceito de espaços de nomeação da XML. É aí que entram os dois pontos em: :joao, :temMae, e outras entidades no exemplo. Os dois ponto indicam o nome na sua forma abreviada. No casos os nomes seriam http://www.exemplo.org/#joao, http://www.exemplo.org/#temMae.

Quando escritas as URI são normalmente envolvidas em sinais de menor e maior que para as distinguir das formas abreviadas usando espaços de nomeação.

Os valores literais permitem que texto possa ser incluido em RDF. Isto é particularmente usado quando a RDF é usada para metadados:

&tl;http://www.rdfabout.net/> a :Website .
&tl;http://www.rdfabout.net/> dc:title "rdf:about" .
&tl;http://www.rdfabout.net/> dc:description "A website about
 Resource Description Framework." .

E isto é basicamente RDF.

RDF como Grafo

Há dois modos complementares de vermos a informação RDF. O primeiro é um conjunto de afirmações como acima. Cada afirmação representa um facto. O segundo modo é como grafo.

Um grafo é basicamente uma rede. Os grafos consistem nos nodos ligados por arestas. Na internet, por exemplo, os nodos são os computadores e as arestas são os fios que os ligam. Em RDF os nós são os nomes (não as entidades de facto) e as arestas as afirmações. Eis um exemplo:

Cada seta ou aresta é uma afirmação RDF. O nome do início da seta é o assunto da afirmação, o nome no final da seta é o objecto da afirmação e o nome nas legendas da seta é o predicado. RDF como grafo exprime exactamente a mesma informação de RDF escrita como tripletos, mas o grafo torna mais fácil a nós humanos para ver a estrutura nos dados.

Exemplo rápido

Assim como é que a RDF é útil? É a tecnologia para a tarefa em mãos quando quer criar uma rede a partir de informação distribuida.

Eis um cenário onde a informação distribuida faz sentido: uma base de dados de produtos de vários fornecedores e críticas a esses produtos a partir de vários críticos. Nenhum fornecedor irá querer a responsabilidade de manutenção de uma base de dados central para este projecto, em especial podendo conter informação sobre produtos concorrentes e críticas muito negativas. Também nenhum crítico terá recursos para manter tal base de dados actualizada.

RDF é particularmente adequada para este projecto. Cada fornecedor e crítico poderá publicar um ficheiro em RDF no seu próprio sítio web. Os fornecedores irão escolher as URI dos seus produtos, e os críticos irão usar essas URI quando façam as suas críticas. Os fornecedores não necessitam de concordar com um esquema comum de nomeação de produtos e os críticos não estão presos a um formato de dados controlado por um fornecedor. A RDF permite que fornecedores e críticos concordem com aquilo que necessitem de concordam ser forçar ninguém a usar determinado vocabulário.

Eis os ficheiros RDF que publicam:

  
Fornecedor 1:
Fornecedor1:produtoX dc:title "Cool-O-Matic" .
Fornecedor1:produtoX prvp:preco "50.75" .
Fornecedor1:produtoX Fornecedor1:refno "TTK583" .
Fornecedor1:produtoY dc:title "Fluffertron" .
Fornecedor1:produtoY prvp:preco "26.50" .
Fornecedor1:produtoY Fornecedor1:refno "AAL132" .

Fornecedor 2:
Fornecedor2:produto1  dc:title "Fechador de Latas" .
Fornecedor2:produto2  dc:title "Espalhador de pó" .

Critico 1:
Fornecedor1:produtoX dc:description "Este produto é bom!" .

Critico 2:
Fornecedor2:produto2  dc:description  "Quem necessita de algo para espalhar o pó? 
                                  Algo que apanhe o pó seria melhor
                                  e gostaria que indicassem o preço." .
Fornecedor2:produto2  critica:classificacao   critica: Excelente .

É uma questão em aberto como é que uma aplicação irá recuperar estes ficheiros, mas foi deixar isso de lado. Uma vez a aplicação tendo estes ficheiros, tem informação suficiente para relacionar produtos às críticas aos preços e mesmo a informação específica do fornecedor como Fornecedor1:refno. O que deve tomar deste exemplo é a ausência de contrangimentos da RDF, continuando esta a permitir às aplicações a capacidade de relacionamento imediato da informação em conjunto.

Os fornecedores e críticos não têm que concordam com muito para fazer isto funcionar. Têm que concordar em usar RDF, mas não têm que concordam com formato específico de dados ou mesmo URI específicas. Crucialmente não têm que enumerar tudo o que cada fornecedor deseja incluir sobre os seus produtos e não podem bloquear os críticos na colocação de informação relacionada.

Outro modo de ver isto é de um ponto de vista de interoperabilidade. O formato do Fornecedor 1 é inteiramente interoperável com qualquer formato dos restantes intervenientes embora o Fornecedor 1 tenha um formato que não seja comum com mais ninguém. Quando alguém aparece e deseja ser interoperável com a informação do Fornecedor 1 não necessita de um novo formato mas sim de escolher o assunto, predicado e objecto correctos.

Conclusão

Se julgava a RDF complicada espero ter-lhe mostrado que tal não é necessáriamente o caso. A RDF é fácil de escrever, flexível e sem constrangimentos. É fácil modelar conhecimento e misturar origens de conhecimento distribuídas.

Sem comentários: