Acorda pra Web!

Tecnologia que vai mudar nossas vidas, depois do café.

Validando XHTML com RDFa embutido

Thursday, December 13th, 2007

Agora já é possível criar documentos XHTML+RDFa e validá-los com sucesso. Existe até um selinho especial:

Valid XHTML + RDFa

Coloquei uma página no ar com um teste, inclusive útil para vocês entenderem um pouco da sintaxe do RDFa. Aqui existe um serviço que consegue extrair as informações de um RDFa e transformar em RDF, o sonho de qualquer geek semweb.

Um exemplo das informações que ele pode extrair de uma página:

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
  xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'
  xmlns:dc='http://purl.org/dc/elements/1.1/'>
    <rdf:Description rdf:about="http://gaigalas.net/rdfa.html">
        <dc:title xml:lang="en">XHTML com RDF agora Possvel</dc:title>
        <dc:abstract xml:lang="en">Simples exemplo de XHTML+RDFa</dc:abstract>
        <dc:date xml:lang="en">2007-12-15</dc:date>
        <dc:subject xml:lang="en">XHTML</dc:subject>
        <dc:subject xml:lang="en">RDFa</dc:subject>
    </rdf:Description>
</rdf:RDF>

Nesse exemplo, título, descrição, data e dois assuntos foram extraídos. Usei o vocabulário Dublin Core para representar essas informações. Ele é bastante genérico e implementa algumas coisas legais, como a propriedade subject (assunto), que é uma forma padronizada de tags.

Ah, eu já tinha falado do RDFa uma vez, de outros prós do dialeto e alguns contras :)

Um projeto bacana sobre Web Semântica

Monday, December 3rd, 2007

Recentemente foi lançado o novo site do ARC, um projeto do Benjamin Nowack que tem como objetivo criar um sistema que interpreta, cria e trabalha com RDF e SPARQL em geral.

Os planos da sua pequena startup, a SemSol, são de criar um pequeno CMS, o Trice, tendo como base o ARC e com banco de dados todinho em RDF, com consultas todinhas em SPARQL.

O SPARQL (ainda estou devendo um post sobre isso) é a linguagem similar ao SQL desenvolvida pelo W3C especificamente para fazer consultas em fontes de dados RDF, ou seja, para “consultar” nós de Web Semântica.

A idéia é bacana e a plataforma excelente. PHP e MySQL é tão comum que até minha calculadora deve suportá-los. Já tive oportunidade de conversar com o Benjamin sobre o sistema enquanto eu desenvolvia algo similar à primeira versão do ARC Store e suas idéias são realmente legais.

Pode parecer papo de geek, mas o grande objetivo do Trice é mostrar que a Web Semântica pode ser indolor! O aplicativo será aos moldes do Wordpress, fácil de usar e instalar. A diferença é o conteúdo, totalmente focado pra essa nova tecnologia.

Provavelmente em alguma versão futura do Base Cube, meu próprio framework, haverá um sistema similar ao ARC desenvolvido totalmente em PHP5 e SQLite, um banco de dados que é um chuchu

Ainda falta aquela coisa que encaixa perfeito na rede social, sabe?

Wednesday, October 3rd, 2007

Antes das redes sociais como o orkut, o mais próximo de uma web social eram os fóruns. Ainda muito populares, os fóruns tinham um problema: muito fragmentados. Um fórum pra animes, um fórum pra geeks, um fórum de RPG. Era um saco, muita coisa repetida (no fórum de animes sempre tinha uma seção de RPG, no fórum de geeks algo de animes e por aí vai) e tudo inconsistente.

O orkut e seus similares popularizaram os fóruns pra massa. Todo mundo discute qualquer coisa, em qualquer lugar. Mas foi perdida uma grande parte da personalização. No orkut é impossível anexar documentos, fotos, usar HTML, instalar um script PHP personalizado… enfim, é restrito demais.

Eu tive um fórum que era bacana, infantil porém bacana. Posts valiam pontos, e você podia trocá-los por vantagens em um mini-shop. Quem postasse mais, tinha mais vantagens. Era até possível criar sua própria seção dentro do fórum, mudar determinadas cores, comprar níveis de personalização específicos. Pra quem não desse a mínima pra isso, era apenas um fórum normal, simples e direto.

Blogs, por outro lado, tem bastante personalização. Você faz o que quiser com seu blog, fala sobre o que quiser, mas é difícil atingir massas, é difícil conseguir colaboração em um blog. Redes de blogs são raras também, você vê troca de links mas não vê conversas reais entre blogs, como vê em tópicos com centenas de páginas nesses fóruns ou mesmo no orkut.

Eu, por exemplo, comprei meu notebook após ler um tópico de mais de 80 páginas no fórum do Clube do Hardware com detalhes minuciosos de pessoas que já haviam comprado, testado, aberto, fuçado, mexido em tudo.  Não foi apenas uma pessoa que fez todos os testes e postou um artigo completo em um blog, foram dezenas de pessoas que deram pequenas contribuições para atingir um objetivo maior: juntar o máximo de informações possível sobre o notebook. Também foi criada uma comunidade no orkut, bastante rica em detalhes sobre modelos similares e demais informações.

Se houvesse uma maneira de trazer essa massa de gente dos fóruns pra blogs, tornar as redes de blogs mais conversantes do que competitivas,  o mundo seria melhor, sem preconceitos, sem poluição e com mais arco-íris nas janelas.

Lógica tradicional às vezes é ruim

Monday, August 20th, 2007

Imagine uma loja virtual que vende praticamente de tudo, desde carros até CDs.

Agora pense em uma situação divertida, você tem 100 mil dólares e precisa comprar um carro. Que beleza não? Você pede pra loja listar todos os carros com valor entre 50 e 100 mil dólares e compara os carros, mas nenhum te agrada totalmente. Pense o quão irônico seria se esse carro hipotético que te agrada tanto custasse 100 mil dólares e 50 reais. Você não pagaria 50 reais a mais pra ter o carro ideal? Pois é, bancos de dados não compreendem isso, eles não listariam esse carro.

O desenvolvedor poderia até colocar uma função na busca do banco de dados que sempre dá uma margem de uns… 100 reais para qualquer produto, mas imagine como o comprador de CDs de 30 reais vai ficar furioso ao ver produtos de 130 reais em sua busca!

Pra piorar, o desenvolvedor não pode usar porcentagens pra calcular as margens. Uma margem ideal para um CD seria de 5 reais, enquanto de um carro seria de 50, são porcentagens muito diferentes uma da outra.

O mais próximo da realidade seria usar uma função de segundo grau. Quanto maior o preço do protudo, menor a porcentagem da margem de busca. Isso funciona pra carros e CDs, mas não funciona pra… capacitores!

Capacitores tem valor em centavos, ou talvez até reais dependendo do componente. Geralmente são valores bastante baixos, com diferenças minúsculas de um fabricante pra outro, no entanto diferenças que fazem toda a diferença. O nosso sistema hipotético com funções de segundo grau atribui porcentagens maiores pra produtos baratos e menores pra produtos caros. Na compra de 200.000 capacitores, um centavo por capacitor dá uma diferença de 2000 reais na conta final!

A solução do problema seria analisar o comportamento dos compradores, a forma com a qual refinam as buscas após não encontrarem o que desejam e armazenar isso em um banco de dados comportamental. As margens de erro pra buscas seriam calculadas com base no comportamento dos clientes em relação ao produto. Dessa forma, ao buscar capacitores o sistema identifica a quantidade média de capacitores encomendados por cliente, a diferença de preço entre capacitores similares, a forma com a qual os compradores de capacitores refinam suas buscas e etecetera.

Dá trabalho? Nem me pergunte, não sou louco de criar uma coisa dessas. E olha que estamos falando de preços, imagine construir um Google com tecnologia similar! Seria algo próximo da utópica inteligência artificial forte (aquela dos robôs conscientes).

Uma forma de facilitar esse trabalho é com a Web Semântica. Imagine que de alguma forma, todas as suas preferências gerais (gostos, preços, mulheres, carros e etc) estão armazenadas no seu site pessoal. A loja não precisaria manter um banco gigante com informações homogêneas de todos os compradores, ela pode simplesmente consultar o seu banco específico.

Sem dúvida, dá trabalho também. Ninguém é idiota de escrever um banco de dados pessoal com preferências na hora de comprar capacitores, e nem seria prático criar algo assim. O sistema teria que encontrar uma variável dentre as suas preferências “normais” (formas de pagamento, descontos que sempre pede, quanto gasta por mês, quais as marcas prediletas de produtos, etc..) e utilizar na busca.

Web Semântica - Ensinar a maior criança do mundo a escrever seu nome

Monday, July 23rd, 2007

A menos que você seja hiperléxico, como William James Sidis, durante os seus primeiros anos de vida você via as palavras que as pessoas escreviam mais ou menos assim: #$%*@$%#$#&*, como belíssimas figuras sem significado algum. Baseado nesse princípio, pesquisadores estão tentando desenvolver sistemas para Web Semântica.

É exatamente isso que os computadores vêem, um monte de figuras (na verdade bits) sem significado algum, ou muito pouco significado. O poder de processar informações é limitadíssimo. Você pode até “perguntar” para um computador com um determinado banco de dados o telefone de algumas pessoas cadastradas, por exemplo, mas isso é tão primitivo quanto uma criança que escreve o R espelhado, o que nem sempre é uma criança, pode ser algum membro do orkut querendo enfeitar seu miguxês.

As tentativas de fazer um computador ler coisas como “Roberto” (@#$%&*) são muitas, entre elas tem uma muito especial no campo da semântica, o XML: <pessoa>@#$%&*</pessoa>. Olha que brilhante! Agora o computador sabe que @#$%&* é uma pessoa? Não exatamente… ele no máximo vai enxergar isso dessa forma: <##$*>@#$%&*</##$*>, e saberá que quando você escrever “pessoa”, é aquela figurinha que ele tem que buscar no baú, a ##$*. Se você pedir um indivíduo, ou um humano, ele voltará a estaca zero.

Basicamente, o esforço atual não é tentar fazer o computador ler a linguagem que nós escrevemos, mas é uma mistura disso com o esforço do XML. Através de vocabulários e ontologias, desenvolvedores estão tentando fazer com que uma máquina veja essas “figuras” (que pra nós são palavras) de uma maneira muito mais completa, podendo diferenciar e relacionar uma coisa de outra coisa.

Parece bem estúpido, mas pra um computador é extremamente difícil dizer a diferença entre uma banana e uma maçã. Ele pode até dizer que a palavra “banana” é diferente da palavra “maçã”, ou no máximo, com muito esforço, dizer que a cor da banana é amarela e a maçã vermelha, ou talvez ele diga #F00. Se o computador ao ver a palavra “banana” puder acessar um rico banco de dados contendo informações como “banana é uma fruta”, “banana é amarela”, “banana vende por dúzia”, será muito mais provável que ele consiga comparar essas informações com o banco de dados “maçã” e estabelecer as diferenças. Esses grandes bancos de dados sobre diversas coisas são as ontologias.

Esse é basicamente o conceito de Web Semântica, e talvez no futuro perguntar coisas para um computador seja tão trivial quanto fazer consultas ao Google. Primeiro o que temos que fazer é ensinar essa internet grandona a escrever, copiando as nossas figuras ;)

Coisóides abstratos para internet

Thursday, July 19th, 2007

Hoje em dia é bem simples encontrar qualquer sistema pra internet. Você tem dezenas de softwares concorrentes pra montar cadastro de clientes, controle de finanças, lojas virtuais, sistemas de notícias, blogs, controle de funcionários, gerenciamento de projetos, fóruns, sistemas de newsletter e por aí vai.

O grande problema de tudo isso é que são ótimos aplicativos separados, péssimos em conjunto. Você não pode simplesmente pegar uma loja virtual com 500 clientes cadastrados, instalar um aplicativo de newsletter e aproveitar os emails dos clientes já cadastrados na loja automaticamente. Você tem que adaptar bancos de dados, scripts de configuração e tudo mais. É um saco. Esse problema gera sotwares gigantescos, com complexidade desnecessária e tão cheios de tantos propósitos que acabam ficando sem propósito específico.

O último software desse estilo que vi foi o Weblawyer, que serviu para pesquisas no desenvolvimento de um sistema de controle processual para um dos meus clientes. Advogados trabalham diretamente com processos, leis, fóruns e por aí vai, no entanto o Weblawyer possui controle de finanças, clientes, empresas, usuários do sistema.

Dois desses módulos, o controle de finanças e o de usuários do sistema, são potencialmente desnecessários, não é qualquer escritório que irá utilizá-los, principalmente o controle de finanças que embora seja bom, possui sotwares específicos muito melhores para esse fim.

Nisso, voltamos ao velho problema. Eu não posso simplesmente pegar o Weblawyer e integrar com esse sistema de despesas feito pelo Nelson Salvador. São dois sistemas completamente incompatíveis à princípio.

É por isso que é necessário que sejam desenvolvidos sistemas abstratos, plugáveis, modulares. Um sistema plugável de cadastro de clientes que possa ser usado para qualquer outro sistema que trabalhe com clientes, um sistema abstrato de despesas que possa ser usado para qualquer sistema que trabalhe com dispesas. No final, você apenas coloca todos na pasta e pronto, tem o que você quer. Quando é que vão surgir coisas assim?!

Freebase, quase lá, quase

Monday, July 16th, 2007

O Freebase pra mim era o projeto que faltava no campo da web semântica. É como um enorme banco de dados em formato de Wikipedia.

O negócio é realmente impressionante. Eles importam conteúdo de diversos outros sistemas e organizam os recursos uniformemente.

Também há como criar e alterar conteúdo manualmente, assim, se o sistema definir que Helloween é uma marca de mostarda ao invés de uma banda, você pode corrigí-lo.

Ao invés do modelo centrado em títulos da Wikipedia, o Freebase é centrado em tipagem. Se você fizer uma busca por “Semantic”, que pode ser uma banda, ou um disco, ou relacionado a uma tecnologia da internet, você pode filtrar os resultados por tipo.

O campo de filtro fornece constantemente sugestões. Se você quer buscar rapidamente pessoas relacionadas ao termo “Ferrari”, basta buscar por Ferrari e adicionar o filtro “Person”. O irônico é que alguns tópicos ainda não estão tipados, se você buscar por “Ferrari” com filtro “Carro”, não encontrará resultados, porque os artigos sobre carros não foram tipados ainda :)

O Freebase tem como alvo também desenvolvedores. A API deles permite que você faça buscas no sistema inteiro como se fosse um banco de dados, com a MQL, uma linguagem própria deles.

O sistema tem grande potencial, mas ainda é imaturo. Não faz buscas fonéticas ou com palavras similares, por exemplo. Além disso, depende bastante de usuários humanos para edição e organização, o que retarda o desenvolvimento, já que os usuários mais ativos em colaboração preferem projetos consolidados como a Wikipedia.

É possível também enviar dados para o Freebase de qualquer aplicação, mas a interface é completamente diferente do que conhecemos. Embora trabalhe com JSON, o formato não é muito familiar com os modelos de outros bancos de dados, o que desestimula novos desenvolvedores.

Bom mesmo seria se existisse uma maneira de simplesmente absorver metainformação da Wikipedia diretamente.

Microformatos, dêem licença para o RDFa passar

Monday, May 28th, 2007

Problemas que deveriam ser resolvidos nos Microformatos

  1. São um padrão pra incluir dados no HTML, mas não fornecem nenhum padrão para extraí-los.
  2. Dificilmente podem ser validados. Você pode até validar um microformato separado, mas se você usar dois microformatos diferentes em conjunto, a coisa complica.
  3. Falta de padrões no desenvolvimento dos microformatos: Cada microformato é criado depois de discussões e discussões acerca do problema específico que deve resolver.
  4. Você não pode criar seu próprio microformato, afinal, não há maneira padrão de extraí-lo e desenvolvê-lo.

Soluções que o RDFa nos traz em relação aos Microformatos:

  1. Há um padrão para incluir dados no XHTML e um padrão para extrair dados do mesmo.
  2. Pode ser facilmente validado através de um DTD.
  3. “Módulos” são desnecessários no RDFa, há uma metodologia padrão pra descrever qualquer dado.
  4. É muito mais simples criar um leitor de RDFa.

Outros problemas que o RDFa nos trás:

  1. É construído em XHTML2, que não é suportado pelos navegadores, embora possa ser possível utilizá-lo em outras linguagens de marcação (com poréns).
  2. Requer que existam vocabulários RDFS para que se tire proveito da técnica.
  3. Sintaxe estranha pra quem está acostumado com HTML normal.

Conclusões

Na dúvida, use os Microformatos. Como eles mesmos (os criadores do padrão) dizem, ele é feito primeiro para humanos e depois para máquinas. Seu uso é bem limitado, mas se você está em dúvida provavelmente não é uma pessoa que vai exigir muito de metainformação entrelaçada. É uma conclusão bem diferente do que o título sugere :)

Metadados, vocabulários, esquemas e ontologias explicados

Thursday, May 24th, 2007

Já falei o que são metadados, o que são ontologias e com esse artigo fecho o kit explicando o que são vocabulários e qual a relação deles com os outros dois termos.

Metadados, ou metainformação, é qualquer informação sobre determinada informação. A frase “A bola tem cor azul” é uma metainformação sobre a bola.

Alguns exemplos de metainformações:

  • A bola tem a cor azul
  • Esse blog tem como autor Alexandre Gomes Gaigalas
  • Alexandre Gomes Gaigalas nasceu em 1987

Interessante seria misturar essas informações, por exemplo:

  • A bola tem como autor 1987
  • Esse blog tem a cor Alexandre Gomes Gaigalas
  • A bola nasceu em azul

Percebe como nem toda propriedade pode ter qualquer valor, e nem todo recurso pode receber qualquer propriedade? Pra solucionar esse problema, foram criados os vocabulários, ou esquemas. Eles definem os recursos e as propriedades que um determinado conjunto de dados possui. Um esquema faz mais ou menos isso:

  • Bolas podem ter a propriedade cor, tamanho e esporte
  • A propriedade cor pode ter como valores azul, vermelho ou amarelo
  • Blogs podem ter como autores somente pessoas

Essas pequenas regras podem parecer óbvias para nós, mas são muito difíceis de serem concluídas por uma máquina, o que torna o processamento dos metadados muito difícil sem elas.

Basicamente, vocabulários e esquemas definem:

  • As propriedades que determinada classe tem
  • A quais recursos uma propriedade pode ser aplicada
  • Quais recursos podem ser usados como valores de uma propriedade

À partir desses esquemas, é que são criadas as ontologias. Com uma ontologia você pode por exemplo estabelecer relações entre dois esquemas diferentes:

  • O grupo de carnívoros é correspondente ao grupo de seres que come carne excluindo o grupo de seres que come vegetais
  • O grupo de herbívoros é correspondente ao grupo de seres que come carne excluindo o grupo de seres que come carne
  • O grupo de onívoros é correspondente ao grupo de seres que come carne, vegetais, peixes e frutos do mar, excluindo o grupo de carnívoros e o grupo de herbívoros

Através do conceito de ontologia acima, eu consegui descrever vários grupos de seres vivos sem usar propriedades novas, apenas intercalando esquemas já existentes. Ontologias descrevem a relação entre classes de recursos, e vocabulários e esquemas definem que propriedades esses recursos possuem.

Se já existissem ontologias prontas sobre tudo, seria muito simples por exemplo saber se um animal é carnívoro, herbívoro ou onívoro. Através de metadados e esquemas, cada ser vivo teria uma lista de outros seres vivos que o servem de alimento, e cada ser vivo estaria classificado como animal ou vegetal. Bastaria o sistema cruzar os dados de alimentação com a classificação de cada ser e concluir se um ser está incluso ou não em determinado grupo.

A vantagem desse sistema é óbvia. Ao invés de simplesmente dizer: o leão é carnívoro, eu preparei a máquina com as mesmas informações que me levaram a essa conclusão. Se no futuro essa classificação mudar e for incluído um novo grupo de alimentação, eu não teria que editar as informações de animal por animal, bastaria alterar a definição das ontologias e as relações entre os demais grupos.

Um pouco mais do que links

Monday, May 21st, 2007

A internet (incluindo a Web 2.0) funciona com links. Um link na internet é uma simples ligação entre um recurso e outro. Por mais ricos que os links sejam no HTML, eles continuam simples demais pra uma Web Semântica.

Basicamente, toda essa coisa de links na internet funciona como no mundo real. Na internet nós dizemos “tal página tem ligação com tal página”, no mundo real podemos dizer “tal pessoa conhece tal pessoa”.

Assim como no mundo real, surgiu uma necessidade de descrever melhor essas ligações entre coisas. Na vida real refinamos os nomes das relações entre pessoas criando novos termos, como pai, sobrinho, namorada, tio, irmão e por aí vai. Na internet existem muitos tipos de ligações, algumas complexas demais pra se resumir com apenas uma palavra.

Pra solucionar esse problema foi incorporado ao RDF, que é uma tecnologia para descrever coisas, a possibilidade de descrever ligações também utilizando o conceito de URI.

Na internet também há diversos tipos de relações. Não há somente relações entre pessoas, na verdade dentro da internet podemos descrever links (relações) entre qualquer coisa: objetos, pessoas, animais, páginas, funcionários de uma empresa, doadores de sangue e muito mais. Pra isso foram criadas as ontologias, que descrevem pedacinhos dessa imensidão de conhecimento que a Web pode representar.