me gustaría a los detalles más en la respuesta de Bill Karwin sobre web semántica y triplestores, ya que es lo que estoy trabajando en este momento, y tengo algo de dígalo.
La idea detrás de un triplestore es almacenar una base de datos basada en el gráfico, cuyo modelo de datos raíces en RDF. Con RDF, describe nodos y asociaciones entre nodos (en otras palabras, bordes). Los datos se organizan en triples:
start node ----relation----> end node
(en el lenguaje RDF: según el --predicate -> objeto). Con este modelo de datos muy simple, cualquier red de datos puede representarse agregando más y más tripletas, siempre que le dé sentido a los nodos y las relaciones.
RDF es muy general, y es un modelo de datos basado en gráficos muy adecuado para los criterios de búsqueda que buscan todos los triples con una combinación particular de sujeto, predicado u objeto, en cualquier combinación. Eventualmente, a través de un lenguaje de consulta llamado SPARQL, también puede realizar consultas más complejas, una operación que se reduce a una búsqueda de isomorfismo gráfico en el gráfico, tanto en términos de topología como en términos de significado de nodo-borde (veremos esto en un momento). SPARQL le permite solo consultas SELECT (y similares). No DELETE, no INSERT, no UPDATE. La información que consulta (por ejemplo, los nodos específicos en los que está interesado) se asigna a una tabla, que es lo que obtiene como resultado de su consulta.
Ahora, la topología en sí misma no significa mucho. Para esto, se ha inventado un lenguaje de esquema. De hecho, más de uno, y denominarlos lenguajes de esquema es, en algunos casos, muy limitativo. Los más famosos y usados en la actualidad son RDF-Schema, OWL (Lite y Full), y son anteriores al obsoleto DAML + OIL. El objetivo de estos lenguajes es, hirviendo cosas, dar un significado a los nodos (otorgándoles un tipo, también descrito como un triple) y a las relaciones (bordes). Además, puede definir el "rango" y el "dominio" de estas relaciones, o decir de manera diferente qué tipo es el nodo de inicio y qué tipo es el nodo final: puede decir, por ejemplo, que la propiedad "numberOfWheels" solo se puede aplicar para conectar un nodo de tipo Vehículo a un valor entero distinto de cero.
ns:MyFiat --rdf:type--> ns:Vehicle
ns:MyFiat --ns:numberOfWheels-> 4
Ahora, puede usar estas ontologías en dos direcciones: validación e inferencia. Hoy la validación no es tan elegante, pero he visto instancias de uso. La inferencia es lo que es genial hoy, porque permite el razonamiento. La inferencia básicamente toma un gráfico RDF que contiene un conjunto de tripletas, toma una ontología, las mezcla en una base de datos triplestore que contiene un "motor de inferencia" y, como la magia, el motor de inferencia inverte triplica según su descripción ontológica. Ejemplo: supongamos que solo almacena esta información en la base de datos
ns:MyFiat --ns:numberOfWheels--> 4
y nada más. Ningún tipo se especifica sobre este nodo, pero el motor de inferencia añadirá automáticamente un triple dicho que
ns:MyFiat --rdf:type--> ns:Vehicle
porque usted dijo en su ontología que sólo los objetos de tipo de vehículos pueden ser descritos por un numberOfWheels propiedad.
Por el contrario, puede utilizar el motor de inferencia para validar sus datos contra la ontología para rechazar datos no compatibles (algo así como XML-Schema para XML). En este caso, necesitarás ambas tripletas para que tus datos sean aceptados con éxito por el almacén múltiple.
Las características adicionales de los triplestores son las Fórmulas y el almacenamiento sensible al contexto. Las fórmulas son enunciados (como de costumbre, objeto sujeto predicado triples) que describen algo hipotético. Nunca utilicé Fórmulas, así que no entraré en más detalles de algo que no sé. La conciencia del contexto son básicamente subgrafos: el problema con el almacenamiento de triples es que no tienes nada que decir de dónde vienen estos triples. Supongamos que tiene dos distribuidores que describen el mismo precio de un componente. Uno dice que el precio es 5.99 y el otro 4.99. Si solo almacena ambas tripletas en una base de datos, ahora no sabe nada sobre quién indicó cada información. Hay dos formas de resolver este problema.
Una es una reificación. Reificación significa que almacena triples adicionales para describir otro triple. Es un desperdicio y hace que la vida sea un infierno porque tienes que reificar todas y cada una de las triples que almacenas. La alternativa es conciencia de contexto. Tener un almacenamiento sensible al contexto Es como poder encapsular un grupo de tripletas en un contenedor con una etiqueta (el identificador de contexto). Ahora puede usar este identificador como sujeto para declaraciones adicionales, por lo tanto, describiendo un grupo de tripletas en una sola acción.
BigTable es una tienda orientada a columnas. – Till