2011-09-02 14 views
5

Sé que esto suena extremadamente nuevo, pero incluso después de leer algunos de los tutoriales en las escuelas W3 en RDF y leer el manual, no puedo entender cómo se expresa una simple relación objeto-predicado-objeto rdf en XML.Pregunta de novato: ¿cómo expresar las relaciones con rdf?

Digamos que tengo un concepto como este:

tengo un coche. Mi coche tiene un receptor gps. Las coordenadas gps actuales del automóvil son X Latitud, Y longitud.

hacer yo represento esto como

<RDF> 
<Owner Name="me"> 
    <has>car</has> 
<car> 
    <has>gpsreceiver</has> 
    <has><cordinates X="somevalue", Y="somevalue"></has> 
</car> 
</Owner> 
</RDF> 

¿Es así como está escrito? Lo que me cuesta entender es cómo los sujetos, los objetos y los predicados se mapean en elementos y atributos.

una vez que he resuelto esto, en última instancia, me gustaría que el "auto" sea su propio esquema, así que solo puedo referirme a su espacio de nombres y decir cosas como "Tengo un auto con matrícula ABC DEF que es ahora a las 12.34 coordenadas ".

Por favor, ¿por favor, arrojar algo de luz? Al final de mis ingenios y nadie a mi alrededor parece saber RDF o ontologías que me ilumine :-(

Respuesta

5

Estoy de acuerdo con los otros respondedores en que no debe preocuparse por la sintaxis XML, pero tampoco sugeriría pensar en los triples inmediatamente. Primero empiece por pensar con claridad sobre las cosas que está tratando de modelar, luego las tripletas serán más obvias.

Entonces, usted tiene una cosa, su automóvil, que es una especie de automóvil. Ser cualquier tipo de automóvil en general, y ser tu automóvil en particular, son dos conceptos diferentes. Por lo tanto, necesitará dos nombres distintos, RDF los llama recursos, para representar la clase de todos los automóviles y la instancia de su automóvil. Del mismo modo, hay cosas que son GPS en general, y el GPS en su automóvil en particular. Suponiendo un espacio de nombres adecuado, entonces:

:car127 rdf:type :Car . 
:gps99 rdf:type :GPS. 

Eso es un triple que expresa que un coche dado (sujeto car127) es un miembro de (predicado rdf:type) la clase de todos los coches (objeto Car), y de manera similar una para el GPS .

Su vehículo es propiedad de Nina, quien es una persona.Así que por dos relaciones más, uno diciendo que Nina es una persona, y uno que Nina es dueño de ese coche específico (reutilizando el mismo recurso que identifica el coche):

:nina rdf:type foaf:Person. 
:nina foaf:name "Nina". 
:car127 :ownedBy :nina. 

(OK, he añadido un triple adicional relacionar el URI del recurso :nina con el nombre Nina).

El GPS es un componente específico del coche específico:

:car127 :containsComponent :gps99. 

Ahora, podemos decir que el GPS de manera informal "tiene" una posición lat y largo dado. Claramente estos cambian con el tiempo (si no, consigue un auto nuevo :). Puede modelar esto teniendo los predicados x e y directamente conectados al recurso de GPS, y actualizando repetidamente los valores en el modelo. Pero si piensas en tu GPS dando una serie de lecturas en momentos particulares, parece un poco más claro y más descriptivo. Entonces tenemos:

:gps99 :reading [ 
    rdf:type :Reading; 
    :lat 51.14276; 
    :long -2.71619; 
    :at "2011-09-02T123400"^^xsd:dateTime 
]. 

Los corchetes [...] es una manera corta a mano de la introducción de un nuevo recurso cuyas propiedades - relaciones - podemos describir, pero cuya identidad no se sabe o no se preocupan. Técnicamente se llama nodo anónimo o bNode, pero ese no es un detalle del que preocuparse ahora. Es suficiente notar que existe una relación (': lectura') desde el dispositivo GPS a un recurso de tipo :Reading (tenga en cuenta la R mayúscula: esta es una convención para distinguir recursos que identifican clases de otros tipos de recursos). Este recurso de lectura tiene cuatro propiedades: un tipo, latitud y longitud observadas, y el tiempo de la lectura. Si quisiéramos, podríamos agregar más lecturas para otros puntos en el tiempo, lo que serviría para modelar una pista ... ¡pero esa es otra discusión!

+0

Gracias por la explicación. Inicialmente comencé dibujando un gráfico dirigido de rdf triples y luego tratando de seguir los ejemplos en algunos tutoriales en línea de rdf de w3schools.com. La sintaxis que acaba de publicar es nueva para mí, y ahora tengo más preguntas: ¿cómo puedo obtener más información sobre esta sintaxis de escribir triples y qué espacios de nombres debo usar? Veo que utilizó foaf, y xsd ... ¿hay algún lugar o URL donde pueda encontrar fácilmente los espacios de nombres relevantes que necesito? –

+0

La sintaxis se llama Tortuga. Consulte, por ejemplo, http://en.wikipedia.org/wiki/Turtle_%28syntax%29 –

+0

En cuanto a los espacios de nombres, generalmente los verá nombrados en la documentación que describe el vocabulario que desea usar: FOAF, DC, etc. Sin embargo, un buen punto de referencia que recopila prefijos juntos es http: // prefix.cc –

0

que iba a escribir (ignorando la decl espacios de nombres)

<rdf:RDF > 
<!-- about 'me' --> 
<my:Owner rd:about="http://example.com/me"> 
    <my:has rdf:resource="http://example.com/thecar"/> 
</my:Owner> 

<!-- about the car --> 
<my:Car rdf:about="http://example.com/thecar"> 
    <my:hasPosition> 
    <my:Gpsreceiver> 
     <my:X>somevalue</my:X> 
     <my:Y>somevalue</my:Y> 
     </my:Gpsreceiver> 
    </my:hasPosition> 
</my:Car> 
</rdf:RDF> 

Usted puede validar su RDF en: http://www.w3.org/RDF/Validator/

+0

RDF/XML es la sintaxis más horrible para mostrar/enseñar RDF –

2

me gustaría tratar de no pensar siempre en lo que necesita el XML para que parezca, la especificación permite múltiples maneras para serializar la misma información por lo que me gustaría probar y pensar en ello en triples.

así que para su ejemplo:

:Me :owns :MyCar . 
:MyCar :hasPart :GpsReceiver . 
:MyCar :hasXPosition "x" . 
:MyCar :hasYPosition "y" . 

Esta es una forma bastante básica de expresarlo y hay alternativas como lo que Pierre ha sugerido.

Todo en RDF se representa como triples, por lo que trate de pensar cómo representaría sus datos en triples, luego use las bibliotecas/herramientas disponibles para generar las serializaciones como RDF/XML para usted.

+0

+1 por no mostrar feo RDF/XML;) –

+0

Muchas gracias por la explicación. Acabo de responder a la respuesta anterior y estaba pensando que Todavía es necesario profundizar en "escribir" RDF triplica sin pensar en XML. ¿Hay algún artículo en línea sobre cómo puedo aprender sobre eso? –

+0

Además, menciona las bibliotecas y herramientas disponibles para generar la serialización XML ... ¿podría proporcionar ejemplos de algunas que pueda usar? Trabajo básicamente en ubuntu y, a veces, mac os x. Gracias –

Cuestiones relacionadas