RDF em cinquenta palavras ou menos
Tudo bem, talvez tenha um pouco mais do que cinquenta palavras, mas os pontos-chave são bem simples (e colocados em negrito para as pessoas que querem ir direto ao ponto). O Resource Description Framework, ou “RDF”, é na verdade duas coisas.
Em primeiro lugar, RDF é um modelo baseado em gráficos para descrever recursos da Internet (como páginas web e mensagens de e-mail), e como esses recursos se relacionam entre si.
Mas o que isso realmente significa? Para um desenvolvedor, isso significa que um modelo de dados RDF (o “gráfico”) pode ser usado como um mecanismo para integrar e organizar recursos da Internet.
Vejamos um exemplo: favoritos. Atualmente, a maioria dos navegadores permite organizar seus favoritos hierarquicamente em pastas. Cada favorito é um indicador para uma página web chamada URI (Uniform Resource Identifier).
Mas uma página web é apenas um tipo de recurso da Internet. Existem muitos outros, incluindo mensagens de e-mail, artigos do Reddit, feeds RSS e resultados de pesquisa do seu rastreador da web favorito, só para citar alguns. E, fundamentalmente, não há razão para que você não possa tratá-los como “marcadores” também, agrupando-os em pastas como desejar, ou talvez até criando pastas “smart” pastas que, ao abri-las, geram dinamicamente seu conteúdo executando uma pesquisa comum definida por você.
E um “favorito” realmente poderia ter propriedades arbitrárias associadas a ele: você pode querer criar seu próprio esquema de “classificação” para um favorito, como a codificação de cores do Macintosh “quente”, “morno” e “frio”. Ou você pode querer relacionar um favorito a outro, ou mantê-lo em várias “pastas” de uma vez só.
O gráfico RDF proporciona um modelo de dados perfeito para construir um serviço de favoritos “universal” como descrito anteriormente: o gráfico pode conter indicadores para recursos arbitrários e pode agrupá-los de qualquer maneira que puder imaginar.
Mas espera que tem mais...
Em segundo lugar, RDF é uma sintaxe de serialização. Essa sintaxe permite que o modelo tipo gráfico se comunique entre “agentes”.
Certo, mas o que isso significa? Fundamentalmente, significa que partes do modelo de dados RDF podem comunicar-se através dos limites da rede e que o conteêdo do grfáico pode mudar dinamicamente a medida que as informações chegam de um serviço remoto.
Vamos voltar para o exemplo dos favoritos. Digamos que uma das minhas “pastas” de favoritos é na realidade um apontador para minha caixa de e-mail: quando abro essa pasta, voilá! Aparecem todas as mensagens que recebi durante a noite.
Mas como isso acontece? A “pasta” da caixa de e-mail era na verdade apenas um apontador para um recurso da Internet que contém mais RDF que estende o gráfico. Esse “recurso da Internet” era um URI que apontava para um script CGI (por exemplo, <code> http://www.mozilla.org/smart-mail/get-mail.cgi?user=waterson&folder=inbox</code>). O script CGI realmente gera RDF serializado, que é basicamente apenas uma maneira de formatar um gráfico em XML:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:sm="http://www.mozilla.org/smart-mail/schema#"
xmlns:schema="https://schema.org/">
<rdf:Description rdf:nodeID="n-101"
about="http://www.mozilla.org/smart-mail/get-mail.cgi?user=waterson&folder=inbox">
<sm:message id="4025293">
<sm:recipient>Chris Waterson "waterson@google.com"</sm:recipient>
<sm:sender>Aunt Helga "helga@ancestry.net"</sm:sender>
<sm:received-by>x-wing.mcom.com</sm:received-by>
<sm:subject>Great recipe for Banana Bread</sm:subject>
<sm:body>
<rdf:Description rdf:nodeID="n-201">
<schema:name>Aunt Helga's World Famous Banana Bread</schema:name>
<schema:recipeInstructions>
Preheat the oven to 350 degrees. Mix in the ingredients in a bowl.
Add the flour last.
Pour the mixture into a loaf pan and bake for one hour.
</schema:recipeInstructions>
<schema:recipeIngredient>3 or 4 ripe bananas, smashed.</schema:recipeIngredient>
<schema:recipeIngredient>1 egg</schema:recipeIngredient>
<schema:recipeIngredient>3/4 cup of sugar</schema:recipeIngredient>
<schema:suitableForDiet>http://schema.org/LowFatDiet</schema:suitableForDiet>
<schema:cookTime>PT1H</schema:cookTime>
<schema:recipeYield>1 loaf</schema:recipeYield>
<schema:prepTime>PT1H</schema:prepTime>
<rdf:type rdf:resource="http://schema.org/Recipe"/>
<schema:nutrition rdf:nodeID="n-202"/>
</rdf:Description>
<rdf:Description rdf:nodeID="n-301">
<rdf:type rdf:resource="http://schema.org/NutritionInformation"/>
<schema:fatContent>9 grams fat</schema:fatContent>
<schema:calories>240 calories</schema:calories>
</rdf:Description>
</sm:body>
</sm:message>
</rdf:Description>
</rdf:RDF>
Ao receber a monstruosidade acima, o mecanismo RDF vincula o RDF ao gráfico no local apropriado, e o controle de árvore que realmente implementa a interfácie de usuário dos favoritos é notificado de que deve começar a desenhar alguns ícones para a última mensagem sobre Pão de Banana da Tia Helga.