52 votes

requêtes SPARQL exploratoires?

chaque fois que je commence à utiliser sql, j'ai tendance à lancer quelques déclarations exploratoires dans la base de données afin de comprendre ce qui est disponible et la forme que prennent les données.

par exemple.

 show tables

describe table

select * from table
 

Quelqu'un pourrait-il m'aider à comprendre la façon de terminer une exploration similaire d'une banque de données rdf à l'aide d'un point de terminaison SPARQL?

Merci :)

97voto

Tom Morris Points 2182

Eh bien, le plus évident est de regarder des classes et des propriétés.

Donc, vous devriez probablement commencer par la recherche pour les classes utilisées:

SELECT DISTINCT ?class
WHERE {
  ?s a ?class .
}
LIMIT 25
OFFSET 0

(LIMIT et OFFSET sont là pour la pagination. Il vaut la peine de s'y habituer, surtout si vous envoyez votre requête sur Internet. Je vais omettre dans les autres exemples.)

a est un spécial SPARQL (et Notation3/Tortue) syntaxe pour représenter l' rdf:type prédicat - ce les liens les différentes instances d' owl:Class/rdfs:Class types (à peu près équivalent à des tables dans SQL RDBMSes).

Deuxièmement, vous voulez afficher les propriétés. Vous pouvez le faire soit en utilisant les classes que vous avez cherchés ou tout simplement à la recherche pour les propriétés. Laissez tomber toutes les propriétés de la boutique:

SELECT DISTINCT ?property
WHERE {
  ?s ?property ?o .
}

Cela permettra d'obtenir toutes les propriétés qui ne sont probablement pas intéressé. C'est l'équivalent d'une liste de toutes les colonnes de ligne en SQL, mais sans aucun regroupement par la table.

Plus utile est de voir quelles sont les propriétés sont utilisées par les instances de déclarer une classe particulière:

SELECT DISTINCT ?property
WHERE {
  ?s a <http://xmlns.com/foaf/0.1/Person>;
     ?property ?o .
}

Cela vous aidera à reprendre les propriétés utilisées sur toutes les instances qui satisfont à la première triple - à savoir, qui ont l' rdf:type de http://xmlns.com/foaf/0.1/Person.

Rappelez-vous, parce que rdf:Ressource peut avoir plusieurs rdf:type de propriétés - classes, si vous voulez - et parce que RDF des données du modèle est additif, vous n'avez pas un diamant problème. Le type est juste un autre bien - c'est juste une utilité sociale accord pour dire que certaines choses sont des personnes ou des chiens ou des équipes de football. Cela ne signifie pas que la banque de données va contenir les propriétés habituellement associés à ce type. Le type ne garantit pas rien en termes de ce que les propriétés d'une ressource peut avoir.

Vous avez besoin de se familiariser avec le modèle de données et l'utilisation de SPARQL de l'UNION et de la syntaxe des options. La rudesse de la cartographie de rdf:type de tables SQL n'est qu'approximative.

Vous voulez savoir quel type d'entité de la propriété est en pointe. Tout d'abord, vous voulez probablement savoir sur le type de données des propriétés équivalentes à des littéraux ou des primitives. Vous savez, des chaînes de caractères, entiers, etc. RDF définit ces littéraux de tous fondamentalement, héritant de la chaîne. Nous pouvons filtrer seulement les propriétés qui sont des littéraux à l'aide de la SPARQL méthode de filtrage isLiteral:

SELECT DISTINCT ?property
WHERE {
  ?s a <http://xmlns.com/foaf/0.1/Person>;
     ?property ?o .
  FILTER isLiteral(?o)
}

Nous sommes ici seulement pour obtenir des propriétés qui ont pour objet un littéral de chaîne, date-heure, booléenne, ou l'un des autres types de données XSD.

Mais que dire de la non-littérale des objets. Considère qu'il est très simple classe Java définition comme une analogie:

public class Person {
    int age;
    Person marriedTo;
}

À l'aide de la requête ci-dessus, nous voudrions revenir le littéral qui représenterait l'âge si l'âge de propriété est lié. Mais marriedTo n'est pas une primitive (c'est à dire un littéral en termes RDF) - c'est une référence à un autre objet en RDF/OWL la terminologie, qui est une propriété de l'objet. Mais nous ne savons pas quel genre d'objets sont visés par ces propriétés (prédicats). Cette requête va vous remettre les propriétés et les types.

SELECT DISTINCT ?property, ?class
WHERE {
  ?s a <http://xmlns.com/foaf/0.1/Person>;
     ?property ?o .
  ? a ?class .
  FILTER(!isLiteral(?o))
}

Cela devrait être suffisant pour vous orienter dans un jeu particulier de données. Bien sûr, je voudrais également recommander que vous venez de retirer des ressources individuelles et de les contrôler. Vous pouvez le faire en utilisant les DÉCRIRE de la requête:

DESCRIBE <http://example.org/resource>

Il y a quelques SPARQL outils - SNORQL, par exemple - qui permettent de le faire dans un navigateur. Le SNORQL exemple, j'ai lié a un exemple de requête pour explorer la possible nommé graphiques, que je n'ai pas couverts ici.

Si vous n'êtes pas familier avec SPARQL, honnêtement, la meilleure ressource si vous êtes coincé est la spécification. C'est un spec W3C, mais une assez bonne (ils ont construit un décent suite de test de sorte que vous pouvez réellement voir si les implémentations de l'avoir fait correctement ou pas) et si vous pouvez obtenir sur la complexité de la langue, il est assez utile.

3voto

significance Points 1085

SELECT DISTINCT * WHERE { ?s ?p ?o } LIMIT 10

2voto

Thomas Kappler Points 1699

Je me réfère souvent à cette liste de requêtes du projet voiD . Ils sont principalement de nature statistique, mais pas seulement. Il ne devrait pas être difficile de supprimer les COUNT de certaines instructions pour obtenir les valeurs réelles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X