Este
documento foi traduzido para português sendo uma versão não
oficial do documento original em inglês Primer:
Getting into RDF & Semantic Web using N3
por Tim Berners-Lee.
São possíveis erros devidos à tradução
de Carlos Afonso da sua exclusiva responsabilidade de Carlos
Afonso e os mesmo não são passíveis de
imputação, em qualquer caso, ao W3C.
O mundo da rede semântica, como baseado em RDF, é
realmente simples na base. Este artigo mostra como poderá
começar a dar os primeiros passos. Usa uma linguagem
simplificada -- Notation 3 ou N3 – a qual é basicamente
equivalente ao RDF na sua sintaxes XML mas mais fácil de
escrever quando se está a começar.
Sujeito, verbo e objecto
Em RDF, a informação é uma simples coleção
de afirmações cada uma com um sugeito, verbo e objecto
– e nada mais. Em N3 pode escrever-se um triplo RDF dessa
forma, com um ponto final:
<#carlos> <#conhece> <#luisa> .
Tudo, seja um sugeito, um verbo ou um objecto é identificado
usando-se um URI Identificador Universal de Recurso. Isto é
algo como <http://www.w3.org/> ou
<http://www.w3.org/2000/10/swap/test/s1.n3#includes>, mas
quando falta tudo antes do sinal de cardinal "#" isso
identifica o <#carlos> no documento actual seja ele qual for.
Há uma excepção: o objecto (só) pode
ser um literal, como uma cadeia de caracteres ou um número
inteiro:
<#carlos> <#conhece> <#luisa> .
<#carlos> <#idade> 24 .
O verbo “conhece” é aquilo que em RDF se designa
por “propriedade” e pensa-se nela como um nome que
exprime a relação entre os outros dois. De facto
podemos escrever
<#carlos> <#filho> <#zeca> .
Alternativamente, para o tornar mais legível, podemos
reescrever o mesmo como
<#carlos> tem <#filho> <#zeca> .
ou
<#zeca> é <#filho> de <#carlos> .
Há dois atalhos quando se tens várias afirmações
sobre um mesmo sujeito: o ponto e vírgula ";"
introduz uma outra propriedade do mesmo sujeito, uma vírgula
introduz outro objecto com o mesmo predicado e sugeito.
<#carlos> <#filho> <#zeca>, <#pedro>, <#ana> ;
<#idade> 45 ;
<#cordosolhos> "castanho" .
Assim, por exemplo os dados na tabela
|
idade
|
cordosolhos
|
|
carlos
|
45
|
castanho
|
|
zeca
|
13
|
verde
|
|
pedro
|
15
|
verde
|
Pode ser escrita como
<#carlos> <#idade> 45; <#cordosolhos> "castanho" .
<#zeca> <#idade> 13; <#cordosolhos> "verde" .
<#pedro> <#idade> 15; <#cordosolhos> "verde" .
Por vezes, há coisas envolvidas nas afirmações
que não têm qualquer identificador a quem as queira
atribuir – sabe que existe um mas só deseja dar as
propriedades. Isso representa-se usando parêntesis rectos com
as propriedades dentro deles.
<#carlos> <#filho> [ <#idade> 14 ] , [ <#idade> 13 ].
Isto pode ser lido como querendo dizer que o #carlos tem um #filho
com a #idade de "14" e um #filho com a #idade de"13".
Há 2 coisas importantes a lembrar
Os identificadores são
meros identificadores o facto de as letras c a r l o s serem usadas
não querem dizer a ninguém nem a nenhuma máquina
que estejamos a falar de alguém cujo nome seja "Carlos"
– excepto se dissermos <#carlos> <#nome> "Carlos".
O mesmo se aplica aos verbos – nunca tome as letras f i l h o
como querendo dizer o que significam – iremos descobrir como
mais tarde.
Os parentesís rectos indicam que algo existe com a
propriedade dada, mas não nos dão nenhuma maneira de
nos referirmos às mesmas noutro local neste ou noutro
documento.
Se de facto desejarmos usar um nome poderiamos ter escrito a
tabela acima como
[ <#nome> "Carlos"; <#idade> 45; <#cordosolhos> "castanho" ].
[ <#nome> "Zeca" ; <#idade> 13; <#cordosolhos> "verde" ].
[ <#nome> "Pedro" ; <#idade> 15; <#cordosolhos> "verde" ].
Há várias maneiras de combinar parêntesis rectos
– mas pode perceber isso, sem a minha ajuda, dos exemplos que
aí vêem. Não há muito mais a aprender
sobre como exprimir dados em N3, e assim passemos à frente.
Partilha de conceitos
A rede semântica não pode definir num documento o que
qualquer coisa quer dizer. Isso é algo que pode fazer em
português (ou ocasionalmente em matemática) mas quando
realmente comunicamos usando o conceito "título",
(tal como numa ficha da Biblioteca Nacional ou numa página da
Rede), dependemos de um conceito partilhado de “Título”.
Na rede semântica, partilhamos de forma precisa usando
exactamente a mesma URI para o conceito de título.
Podia exemplificar a tentativa de dar um título a um
documento N3 por
<> <#título> "Um exemplo simples de N3".
(O par <> inicial é uma referência URI vazia que
se refer sempre ao documento em que é escrito.) O <#título>
refer-se ao conceito de #título como definido no proprio
documento. Isto não quererá dizer muito ao leitor.
Contudo, um grupo de pessoas criou uma lista de propriedades
designada por Dublin Core,
entre as quais figura a sua ideia de título (title) que deram
ao identificador
<http://purl.org/dc/elements/1.1/title>. Assim podemos
definir muito melhor a afirmação se dissermos
<> <http://purl.org/dc/elements/1.1/title>
"Primer: Guia Inicial sobre RDF e a Rede Semântica usando a notação N3".
Claro que isto poderá ser um pouco verboso em excesso –
imagine identificadores tão longos para tudo como #idade e
#cordosolhos. Assim a N3 permite estabelecer abreviações
para a parte mais comprida que designamos como espaço de
nomeção. Estabelece-se esse espaço de nomeação
usando a expressão "@prefix":
@prefix dc: <http://purl.org/dc/elements/1.1/> .
<> dc:title
"Primer: Guia Inicial sobre RDF e a Rede Semântica usando a notação N3".
Note-se que no caso de se usar prefixo, usamos dois pontos (:) em vez
de um sinal de cardinal entre dc e title, e não se usa os
<sinais de menor e maior que> à volta da coisa toda. É
muito mais rápido. Será assim que irá ver e
escrever a maior parte dos seus predicados em N3. Uma vez
estabelecido um prefixo pode ser usado no resto do documento.
Há um cada vez maior número de vocabulários
RDF aos quais nos podemos referir - Ver RDF
home page e coisas enlaçadas a partir dela – e pode
construir os seus próprios vocabulários para as suas
aplicações de forma muito simples.
Por agora iremos usar um espaços de nomeção
bem conhecidos, de modo a pouparmos espaço, irei simplesmente
presumir os seguintes prefixos
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
Estes são, respectivamente, os espaços de nomeação
RDF, RDF schema e OWL. Dão-nos os termos centrais sobre os
quais nos podemos atirar para a rede semântica. Irei também
presumir que o prefixo vazio figura no lugar do próprio
documento que se esteja a escrever que podemos exprimir em N3 como
@prefix : <#> .
Tal significa que a afirmação lá mais atrás
poderia ser escrita como
:carlos :filho [ :idade 14 ] , [ :idade 13 ].
Que irá pois incluir muito menos caracteres a escrever. Agora
compreende como escrever dados em N3 pode começar a construir
os seus próprios vocabulários pois são eles
próprios só dados.
Criar vocabulários
Coisas como dc:title acima são propriedades RDF. Quando se
quer definir um novo vocabulários defini-se novas classes de
coisas e novas propriedades. Quando se dizer que tipo de coisa algo
é, diz-se a que Classe pertence.
A propriedade que nos diz de que tipo uma coisa é é
rdf:type que pode ser abrevida em N3 para a (do
inglês um ou uma ). Assim podemos definir Pessoa como
Classe
:Pessoa a rdfs:Class.
No mesmo documento, podemos apresentar uma pessoa real
:Carlos a :Pessoa.
Classes só nos dizem sobre a coisa que está nelas. Um
objecto pode pertencer a muitas classes. Não é
necessário que haja qualquer relação hierárquica
–pense em Pessoa, ObjectoAnimado, Animal, PessoaAlta, Amigo,
etc. Se houver uma relação entre duas classes pode
tratar de o exprimir – veja as propriedades (de classes) nos
vocabulários RDF
Schema e OWL .
:Mulher a rdfs:Class; rdfs:subClassOf :Pessoa .
Uma propriedade é algo que é usado para declarar uma
relação entre duas coisas.
:irmã a rdf:Property.
Por vezes quando existe uma relação entre duas coisas,
imediatamente sabe-se algo sobre elas, que pode ser expresso como uma
classe. Quando o sugeito de qualquer propriedade tem que estar numa
classe, então essa classe é o domínio da
propriedade. Quando o objecto tem que estar numa classe, então
a classe é designada o domínio de uma propriedade. Uma
propriedade pode ter vários domínios e limites, mas
normalmente uma especifica uma.
:irmã rdfs:domain :Pessoa;
rdfs:range :Mulher.
Note-se que os identificadores de classe começar por letras
maísculas e as propriedades com minúsculas. Não
é uma regra mas sim uma boa convenção a manter.
Note-se ainda que devido ao domínio de rdfs:range e
rdfs:domain ser ele mesmo uma rdf:Property, segue-se que :irmã
é uma rdf:Property sem que seja explicitamente expressa essa
qualidade.
Equivalência
Frequentemente, define-se um vocabulário onde um ou mais
termos, quer se tenha apercebido ou não quando se começa,
é de facto exactamente o mesmo que o definido noutro
vocabulário. Isto é uma porção de
informação realmente útil para qualquer pessoa
ou máquina que trate da informação. A
propriedade de equivalência entre dois termos é tão
útil e fundamental que a N3 tem uma abreviatura especial para
a mesma: "=".
:Mulher = foo:PessoadosexofemeninoAdulta .
:Title a rdf:Property; = dc:title .
Pista: Usar vocabulários de outras pessoas quando se possa –
ajuda à intertroca de dados. Quando se define o nosso próprio
vocabulário que inclui sinónimos, devemos registar a
sua equivalência porque, se irá ajudar processadores
actuais e futuros a processar os nossos dados e os dados dos outros
de modos apropriados.
Escolher um espaço de nomeação e publicar o
seu vocabolário
Documentação em linha de termos de vocabulário
ajuda as pessoas a ler e escrever dados RDF. Os escritores necessitam
de ver como um termo é suposto ser usado, os leitores
necessitam ver o que é suposto significarem. As pessoas que
desenvolvam software que use os termos necessitam de saber em detalhe
exactamente o que é que cada URI significa.
Se documentar o seu vocabulário usando os vocabulários
RDF Schema e OWL,
então os seus documentos serão legíveis por
máquinas de uma variadade de modos interessantes e úteis,
como mencionado acima e explorado em mais detalhe em Vocabulary
Documentation. Este género de documentação-RDF-em-RDF
é por vezes designada por “esquema” ou
“ontologia”.
A forma mais fácil de ajudar as pessoas a encontrar a sua
documentação é fazer as URIs que cria de termos
de vocabulário também funcionarem num navegador web.
Isto funciona automaticamente se seguir as convenções
de nomeação que usamos aqui, onde o documento de
definição de vocabulário tem uma URI semelhante
a http://exemplo.com/termos e se refer aos seus termos
como <#Mulher>. Com a declaração de
@prefix anterior, isto dá a URI
http://exemplo.com/termos#Mulher que deverá
funcionar em qualquer navegador que mostre o documento de definição.
Idealmente deverá publicar a sua documentação
na web usando um servidor e porção do espaço
URI que seja possuído por uma organização que
possa manter os mesmos bem no futuro. Assim, dentro de muitos anos
no futuro, os dados em RDF que usem os seus termos ainda serão
documentados e potencialmente poderão ser compreendidos. QA
convenção de colocar o ano corrente na URI pode ajudar
na estabilidade; poderá haver alguém, que algum dia,
seja tentado a reutiliza algo como
http://exemplo.com/vocabulario-comida, mas
provavelmente não mexerá em
http://exemplo.com/2003/vocabulario-comida, quando
desejarem actualizar a documentação. Em certas
circunstâncias pode também aumentar a estabilidade
usando um nome de domínio especializado que possa ser isolado
de renomeação da organização ou de
problemas relativos a marcas.
Claro que se só estiver a divertir-se poderá usar um
ficheiro (digamos minhadb.n3) na mesma pasta do resto do
seu trabalho. Qaundo o fizer pode simplesmente usar <minhadb.n3#>
como identificador do espaço de nomeação,
porqueem N3 (assim como em HTML), as URIs podem ser especificadas de
modo relativo à localização actual.
Mais
Agora já sabe tudo o que necessita para começar a
criar os seus próprios vocabulários, ou ontologias e
tem alguns apontadores para onde pesquisar sobre meios mais ricos de
os definir. Não necessita de ir mais longe, pois o que tem
agora lhe permite criar novas aplicações, criar
esquemas, ficheiros de dados e programas que intertroquem e manipulem
dados para a rede semântica.
Neste ponto deverá estar a adquirir experiência e a
escrever algo. Para lhe dar mais ideias há uma longa
lista de exemplos variados e mais complexos. Estes vêm com
explicações menos detalhadas.
Ou pode continuar num tutorial que lhe dê mais
características da linguagem, explicando-lhe como processar os
seus dados e como envolver outros dados na Web. Neste caso o próximo
passo é sobre: Shortcuts
and long cuts
Referências
Tim BL,
sem o seu chapéu de director
$Id:
Primer.html,v 1.61 2005/08/16 13:49:21 timbl Exp $