Llevamos un par de años con un ruido ensordecedor alrededor de la famosa "Web 2.0". Que si metemos AJAX por todas partes (¿quién no ha sufrido haciendo peticiones con XMLHttpRequest a pelo lidiando con las diferencias entre nuestro querido Firefox y el dichoso Internet Explorer?), que si los blogs han democratizado la publicación, que si el contenido generado por el usuario es el futuro. Mientras tanto la gente del W3C y Tim Berners-Lee no paran de darnos la turra con lo que viene después: la Web Semántica. Algunos visionarios ya la están llamando directamente la Web 3.0.

Ayer por la madrugada me puse a leer las especificaciones del W3C, para entender de qué va realmente todo este hype. La premisa suena de película de ciencia ficción: hacer que las máquinas no solo parseen HTML para pintarlo de colores en un navegador para que lo lea un humano, sino que entiendan el significado real de los datos y sus relaciones.

Te lo aterrizo: en lugar de tener páginas web aisladas con hipervínculos, la idea es convertir todo internet en una inmensa base de datos distribuida y global.

La base del grafo: RDF y la locura de las URIs

El estándar principal sobre el que pivota todo esto es RDF (Resource Description Framework). Olvídate por un momento de tus tablas, tus filas y tus columnas. En RDF, todo se basa en una estructura de grafo compuesta por tripletas: Sujeto, Predicado y Objeto.

La clave técnica aquí es que tanto el sujeto como el predicado deben ser URIs (Identificadores Uniformes de Recursos) únicos a nivel mundial. Así evitamos ambigüedades. No dices simplemente "nombre", dices "el concepto de nombre según el vocabulario X".

Evidentemente, como estamos en pleno 2006 y la fiebre del XML lo domina todo en la industria, RDF se suele serializar en archivos XML bastante verbosos. Para que te hagas una idea, si queremos usar el conocido vocabulario FOAF (Friend of a Friend) para describir a un desarrollador, el código pinta más o menos así:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/">
  <foaf:Person rdf:about="http://midominio.com/yo">
    <foaf:name>srdata</foaf:name>
    <foaf:mbox rdf:resource="mailto:contacto@midominio.com"/>
  </foaf:Person>
</rdf:RDF>

OWL: Metiendo lógica en la batidora

El problema de RDF es que se queda corto para definir reglas complejas. Si quieres que la máquina entienda que "Un programador es una subclase de Persona", que "Dos emails iguales significan que es la misma persona física", o que la clase "Persona" es disjunta de la clase "Coche", entra en juego OWL (Web Ontology Language).

OWL añade una capa de lógica descriptiva y restricciones (las famosas ontologías) sobre tu RDF. Esto permite que existan motores de inferencia (software especializado) que pueden deducir nuevos datos que no estaban explícitamente escritos en el XML. Es pura teoría de conjuntos y lógica de primer orden aplicada a la arquitectura de internet.

Consultando este caos con SPARQL

Claro, si vamos a tener la web llena de grafos inmensos de RDF interconectados, necesitamos algo para extraer datos con sentido. Si las bases de datos relacionales tienen SQL, la Web Semántica tiene SPARQL. El W3C acaba de publicarlo como Candidate Recommendation y, técnicamente, pinta muy interesante.

A diferencia del SQL tradicional donde hacemos JOINs entre tablas basándonos en claves primarias, SPARQL funciona por pattern matching (coincidencia de patrones). Buscamos subgrafos que encajen con la forma que le pedimos.

Imagina que tenemos un repositorio de datos sociales descentralizados y queremos extraer los nombres y correos de todos los usuarios registrados. La consulta sería tan limpia como esto:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?nombre ?email
WHERE {
  ?persona rdf:type foaf:Person .
  ?persona foaf:name ?nombre .
  ?persona foaf:mbox ?email .
}

Es elegante, para qué engañarnos. Los interrogantes (?) marcan las variables que queremos enlazar. El motor SPARQL buscará cualquier sujeto (?persona) que cumpla esas tres condiciones simultáneamente en el grafo y nos devolverá un conjunto de resultados tabular. Si quieres trastear con esto hoy mismo, puedes montar un servidor de prueba instalando librerías como Jena en Java o ARC para PHP (aprovechando ahora que PHP 5 ya maneja la POO decentemente).

¿De verdad vamos hacia la Web 3.0?

Aquí viene mi ración de realidad cruda. La teoría es espectacular y académicamente impecable. Construir agentes de software autónomos que viajen por la web cruzando datos sin intervención humana suena a la panacea absoluta de la automatización técnica.

Pero siendo prácticos, pragmáticos y conociendo al sector... ¿realmente vamos a convencer a millones de desarrolladores web de que etiqueten cada pieza de información con vocabularios ontológicos súper estrictos en un XML kilométrico? Actualmente, la mitad de los webmasters ni siquiera cierran bien las etiquetas <li> o <p> en su HTML, y mucho menos pasan sus páginas por el validador del W3C. Me cuesta horrores creer que de la noche a la mañana vayamos a abrazar una tecnología tan estricta, semántica y académica a escala global.

De momento, seguiré de cerca SPARQL porque le veo un potencial enorme para proyectos cerrados de integración de datos empresariales, donde sí puedes obligar a cumplir un esquema. Pero para el día a día del desarrollador web de a pie, estoy convencido de que la "Web 2.0", el AJAX y las bases de datos MySQL nos van a dar de comer durante unos cuantos años más antes de que veamos esta famosa Web 3.0 corriendo de forma nativa por nuestros navegadores.