Bueno, la primera puesta obvia es mirar a las clases y propiedades presentes en los datos.
Aquí es cómo ver lo que las clases se están utilizando:.
SELECT DISTINCT ?class
WHERE {
?s a ?class .
}
LIMIT 25
OFFSET 0
(LIMIT
y OFFSET
están ahí para paginación Vale la pena acostumbrarse a ellos, especialmente si va a enviar su consulta a través de Internet I. 'll omitir ellos en los otros ejemplos)
a
es un SPARQL especial (y Notation3/Turtle) sintaxis para representar el predicado rdf:type
-. Estos links casos individuales a owl:Class
/rdfs:Class
tipo s (aproximadamente equivalente a tablas en SQL RDBMS).
En segundo lugar, desea ver las propiedades. Puede hacer esto utilizando las clases que ha buscado o simplemente buscando propiedades. Vamos a conseguir todas las propiedades de la tienda:
SELECT DISTINCT ?property
WHERE {
?s ?property ?o .
}
Esto hará que todas las propiedades, que es probable que no está interesado en lo que equivale a una lista de todas las columnas de la fila en SQL, pero sin. cualquier agrupación por la tabla.
Más útil es para ver qué propiedades están siendo utilizados por las instancias que declaran una clase particular:
SELECT DISTINCT ?property
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
}
Esto le devolverá las propiedades que se utilizan en todas las instancias que satisfacen el primer triple - es decir, que tienen el rdf:type
de http://xmlns.com/foaf/0.1/Person
.
Recuerde, porque un rdf: Resource puede tener varias propiedades de rdf: type, por ejemplo, clases, y dado que el modelo de datos de RDF es aditivo, no tiene un problema de diamantes. El tipo es solo otra propiedad; es solo un acuerdo social útil decir que algunas cosas son personas o perros o genes o equipos de fútbol. No significa que el almacén de datos va a contener propiedades generalmente asociadas con ese tipo. El tipo no garantiza nada en términos de qué propiedades podría tener un recurso.
Debe familiarizarse con el modelo de datos y el uso de la sintaxis de SPARQL UNION y OPTIONAL. El mapeo aproximado de rdf: type a tablas SQL es solo eso: rudo.
Es posible que desee saber a qué tipo de entidad apunta la propiedad. En primer lugar, es probable que desee conocer las propiedades de tipo de datos, equivalentes a literales o primitivas. Ya sabes, cadenas, enteros, etc. RDF define estos literales como todos los que heredan de la cadena.Podemos filtrar sólo aquellas propiedades que son literales utilizando el método de filtro de SPARQL isLiteral
:
SELECT DISTINCT ?property
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
FILTER isLiteral(?o)
}
Estamos aquí sólo se va a conseguir propiedades que tengan por objeto un literal - una cadena, fecha y hora, booleano, o uno de los otros tipos de datos XSD.
Pero, ¿qué pasa con los objetos no literales? Considere esta definición muy simple pseudo clase Java como una analogía:
public class Person {
int age;
Person marriedTo;
}
Uso de la consulta anterior, queremos recuperar el literal que representaría edad si la propiedad está obligado edad. Pero marriedTo no es una primitiva (es decir, un literal en términos RDF) - es una referencia a otro objeto - en la terminología RDF/OWL, esa es una propiedad del objeto. Pero no sabemos a qué tipo de objetos se refieren esas propiedades (predicados). Esta consulta le devolverá propiedades con los tipos acompañantes.
SELECT DISTINCT ?property, ?class
WHERE {
?s a <http://xmlns.com/foaf/0.1/Person>;
?property ?o .
? a ?class .
FILTER(!isLiteral(?o))
}
Eso debería ser suficiente para orientarse en un conjunto de datos en particular. Por supuesto, también recomendaría que simplemente retire algunos recursos individuales e inspeccionarlos. Puede hacerlo utilizando la consulta DESCRIBIR:
DESCRIBE <http://example.org/resource>
Hay algunas herramientas SPARQL - SNORQL, por ejemplo - que le permiten hacer esto en un navegador. La instancia de SNORQL a la que me he vinculado tiene una consulta de muestra para explorar los posibles gráficos nombrados, que no he tratado aquí.
Si no está familiarizado con SPARQL, honestamente, el mejor recurso si se queda atascado es la especificación. Es una especificación W3C pero bastante buena (construyeron un conjunto de pruebas decente para que realmente pueda ver si las implementaciones lo han hecho correctamente o no) y si puede superar el complicado lenguaje, es bastante útil.
de plano respuesta increíble - gracias mucho Tom! – significance
Sé que se supone que no debo publicar simple "¡Gracias!"mensajes en SO, pero usted acaba de ayudar seriamente a un novato de SPARQL, así que:" ¡Gracias! ". –