Pplware

Vamos Ligar e Partilhar? – Introdução ao RDFS (Parte I)

Agora que já estamos familiarizados com o modelo (de dados) RDF – Resource Description Framework e a sua forma de representação de informação podemos focar-nos em conhecer um vocabulário que nos permite descrever dados representados em RDF. Assim, hoje vamos conhecer o RDF Schema. rdf_1

O que é o RDF Schema (RDFS)?

O RDF Schema é um vocabulário para modelação de dados representados em RDF. Assim, o RDFS pode ser visto como uma linguagem de esquema (schema language) e, portanto, é comparável com outras linguagens de esquema tais como:

(i) o XSD – XML Schema Definition para informação representada em documentos XML;

(ii) a linguagem de definição (ou descrição) de dados (DDL – Data Definition/Description Language) usada por um sistema de gestão de base de dados (SGBD) para especificar e organizar os seus dados; ou até

(iii) a estrutura de classes de um sistema de programação baseado no paradigma orientado a objetos (OO).

Em geral, estas linguagens de esquema (incluindo o RDFS) têm em comum o facto de permitirem a especificação de um esquema (schema) cujo objetivo é dizer algo sobre (i.e. descrever) os dados representados. Neste sentido, um esquema é informação sobre os dados. Nos sistemas de modelação de dados mais tradicionais existe uma clara separação entre os dados e o esquema subjacente aos dados, sendo os mesmos expressos de forma distinta. Contudo, a exemplo do que acontece com o RDFS, nas versões mais modernas desses sistemas os dados e o esquema subjacente já são expressos da mesma forma.

No caso do RDFS, tanto o vocabulário que pode ser usado para especificação de um esquema, bem como todas as informações relativas a um esquema RDFS e os próprios dados descritos por esse esquema são expressos através de triplos RDF. Desta forma, em RDF(S) as relações entre (i) os recursos “de dados”, (ii) os recursos de “esquema”, (iii) os recursos da “linguagem” RDFS, bem como (iv) com quaisquer outros recursos são feitas através de triplos.

 

Paradigma de Modelação

O RDFS adota um paradigma de modelação similar às linguagens de programação OO (e.g. Java, C#), assente no conceito de “classe” e de “propriedade” ou “relação”. Contudo, nas linguagens de programação OO as propriedades apenas existem no contexto de uma classe (e.g. a classe “Livro” define a propriedade “autor” como um atributo do tipo “Pessoa”) enquanto que em RDFS tanto as classes como as propriedades existem por si só (i.e. são independentes entre si), sendo as propriedades (e.g. “autor”) relacionadas com as classes (e.g. “Pessoa” e “Livro”) através da especificação de um domínio (e.g. “Livro”) e de um contradomínio (e.g. “Pessoa”). Vulgarmente, denomina-se a abordagem RDFS como sendo centrada nas propriedades (property-centric) enquanto a abordagem OO denomina-se centrada nas classes (class-centric ou concept-centric).

Para nos referirmos aos mecanismos (i.e. recursos RDF) disponibilizados pelo RDF(S) para descrever grupos de recursos relacionados (i.e. classes) e as relações (i.e. propriedades) entre esses recursos, usam-se geralmente dois prefixos:

 

Vocabulário

Para introduzir os principais recursos do RDF(S) e demonstrar o seu uso na especificação de um esquema, considere os dados constantes no grafo RDF graficamente representado na Figura 1 (embora com uma disposição gráfica diferente, a informação constante neste grafo é a mesma que foi usada no artigo anterior).

Figura 1: Exemplo de um grafo RDF.

Fazendo uma interpretação léxico-sintática do IRI de cada recurso, facilmente se percebe que os nossos dados referem-se a pessoas, objetos, cores e formas geométricas. Assim, um possível esquema para estes dados pode contemplar a existência das seguintes classes e respetivos recursos (em itálico):

Consequentemente, ao nosso exemplo devemos adicionar os seguintes triplos:

ex:Pessoa rdf:type rdfs:Class
 ex:Objeto rdf:type rdfs:Class
 ex:Cor rdf:type rdfs:Class
 ex:Forma rdf:type rdfs:Class

O recurso pré-definido rdf:type é uma propriedade que permite afirmar que um determinado recurso é uma instância (i.e. membro) de uma determinada classe, enquanto que o recurso pré-definido rdfs:Class representa o conjunto de recursos que são classes. Assim, cada um destes triplos está a afirmar que o recurso usado no triplo como sujeito é uma instância de rdfs:Class e, consequentemente, faz desse recurso uma classe.

Posto isto, também já temos conhecimento para expressar quais são as instâncias das classes por nós criadas. Assim, ao nosso exemplo devemos adicionar cinco novos triplos:

ex:Pessoa1 rdf:type ex:Pessoa
ex:Objeto1 rdf:type ex:Objeto
ex:Objeto2 rdf:type ex:Objeto
ex:Azul rdf:type ex:Cor
ex:Paralelepipédica rdf:type ex:Forma

A Figura 2 representa graficamente o grafo RDF resultante do esquema definido até ao momento para o nosso exemplo. Esta figura encontra-se organizada em três níveis:

Usam-se setas azuis para salientar os triplos entretanto adicionados.

Figura 2: Grafo RDF com um esquema RDFS (apenas classes).

Para finalizarmos a especificação de um possível esquema para os dados do exemplo falta-nos criar propriedades, i.e. predicados. Para tal, precisamos de usar mais um recurso pré-definido: o rdf:Property. Este recurso representa a classe de todas as propriedades (e nesse sentido também é uma instância de rdfs:Class). Assim, ao nosso exemplo devemos adicionar seis novos triplos:

ex:nome rdf:type rdf:Property
 ex:idade rdf:type rdf:Property
 ex:possui rdf:type rdf:Property
 ex:descritivo rdf:type rdf:Property
 ex:temCor rdf:type rdf:Property
 ex:temForma rdf:type rdf:Property

A Figura 3 representa graficamente o grafo RDF resultante do esquema definido até ao momento.

Figura 3: Grafo RDF com um esquema RDFS (classes e propriedades).

Adicionalmente, se o desejarmos, podemos especificar para cada propriedade (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. Para tal, recorre-se às propriedades pré-definidas rdfs:domain e rdfs:range respectivamente. Assim, para os nossos dados podemos definir, por exemplo, que as propriedades ex:nome e ex:possui se aplicam a instâncias da classe ex:Pessoa. Por outro, os valores possíveis para a propriedade ex:temCor são instâncias da classe ex:Cor, enquanto que para a propriedade ex:possui são instâncias da classe ex:Objeto. Neste caso devemos, então, adicionar os seguintes triplos:

ex:nome rdfs:domain ex:Pessoa
 ex:possui rdfs:domain ex:Pessoa
 ex:possui rdfs:range ex:Objeto
 ex:temCor rdfs:range ex:Cor

A Figura 4 representa graficamente o grafo RDF resultante do esquema definido até ao momento.

Figura 4: Grafo RDF com um esquema RDFS (com especificação de domínio e contradomínio em algumas propriedades).

Descrições textuais podem ser adicionadas a qualquer recurso, seja ele parte do esquema ou dos próprios dados. Para tal, faz-se uso das propriedades rdfs:label e rdfs:comment. Ambas têm como domínio rdfs:Resource (i.e. um qualquer recurso) e como contradomínio rdfs:Literal (i.e. um qualquer literal). Enquanto o propósito de rdfs:label é especificar uma etiqueta (curta) para o recurso em causa, o propósito de rdfs:comment é providenciar uma descrição mais extensa (e completa). Por exemplo, à classe ex:Pessoa podemos adicionar uma etiqueta em português e outra em inglês da seguinte forma:

ex:Pessoa rdfs:label “Pessoa”@pt
ex:Pessoa rdfs:label “Person”@en

Descrições mais extensas e completas para o recurso ex:Pessoa podem ser adicionadas de forma similar (substituindo rdfs:label por rdfs:comment e especificando o literal pretendido).

Para concluirmos a introdução aos principais recursos do RDF(S) é essencial apresentarmos mais duas propriedades: rdfs:subClassOf e rdfs:subPropertyOf. A primeira permite expressar que uma classe (e.g. ex:Pessoa) é subclasse de outra classe (e.g. ex:SerVivo) através de um triplo na forma

c1 rdfs:subClassOf c2

onde c1 e c2 representam duas classes, sendo c1 subclasse de c2. O uso desta propriedade permite-nos especificar uma hierarquia de classes.

A segunda permite expressar que uma propriedade (e.g. ex:nome) é subpropriedade de outra propriedade (e.g. rdfs:label) através de um triplo na forma

p1 rdfs:subPropertyOf p2

onde p1 e p2 representam duas propriedades, sendo p1 subpropriedade de p2. O uso desta propriedade permite-nos especificar uma hierarquia de propriedades.

A Figura 5 representa graficamente o grafo RDF resultante do exemplo usado e agora terminado.

Figura 5: Grafo RDF com um esquema RDFS (com especificação de hierarquia de classes e de propriedades e adição de descrições textuais em recursos).

Conclusões

Conclui-se esta primeira parte salientando que para além dos recursos RDF(S) usados, existem muitos outros que apesar da sua relevância não foram mencionados. Quando se revelar oportuno mencionar-se-ão os mesmos dando indicação de que fazem parte do RDF(S). Por outro lado, a semântica associada aos recursos do RDF(S) e, por conseguinte, a qualquer esquema RDF(S) ainda não foi abordada. Contudo, este tópico é fundamental para se ter um conhecimento mais profundo e completo sobre o mesmo e, dessa forma, usá-lo adequadamente. Como tal, este será o foco do próximo artigo (parte II do RDFS).

Por hoje é tudo! Esperamos que tenha gostado e deixe a sua opinião.

Exit mobile version