2010-05-28 3 views
41

всякий раз, когда я начинаю использовать sql, я склонен бросить пару поисковых заявлений в базе данных, чтобы понять, что доступно, и какую форму данные принимают.поисковые запросы SPARQL?

например.

show tables 

describe table 

select * from table 

может кто-нибудь помочь мне понять способ закончить подобное исследование с РДФ датастора с использованием конечной точки SPARQL?

спасибо :)

ответ

69

Ну, очевидно, первый запуск должен смотреть на классы и свойства, присутствующие в данных.

Вот как увидеть, какие классы используются:.

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

(LIMIT и OFFSET есть для пейджинга Стоит привыкнуть к ним, особенно если вы отправляете запрос через Интернет я. будет опускать их в других примерах)

a это специальный SPARQL (и Notation3/Turtle) синтаксис для представления rdf:type предиката -. это связывает отдельные экземпляры с owl:Class/rdfs:Class типа s (примерно эквивалентно таблицам в SQL RDBMS).

Во-вторых, вы хотите посмотреть на свойства. Вы можете сделать это, используя классы, которые вы искали, или просто искали свойства. Давайте просто получить все свойства из магазина:

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

Это позволит получить все свойства, которые вы, вероятно, не заинтересованы в Это эквивалентно список всех столбцов строки в SQL, но без него. любая группировка по таблице.

Более полезно, чтобы увидеть, какие свойства используются экземплярами, декларирует конкретный класс:

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

Это вернет вас свойство, используемое в любых случаях, которые удовлетворяют первую тройку - а именно, что есть rdf:type от http://xmlns.com/foaf/0.1/Person.

Помните, что ресурс rdf: Resource может иметь несколько свойств типа rdf: type, если вы захотите - и поскольку модель данных RDF является аддитивной, у вас нет проблемы с алмазом. Тип - это еще одно свойство - это просто полезное социальное соглашение, чтобы сказать, что некоторые вещи - это люди или собаки или гены или футбольные команды. Это не означает, что хранилище данных будет содержать свойства, обычно связанные с этим типом. Тип не гарантирует ничего с точки зрения свойств, которые может иметь ресурс.

Вам необходимо ознакомиться с моделью данных и использованием синтаксиса SPARQL UNION и OPTIONAL. Грубое отображение rdf: type в таблицы SQL - это просто - грубо.

Возможно, вам захочется узнать, на какой объект указывает объект. Во-первых, вы, вероятно, хотите узнать о свойствах типа данных, эквивалентных литералам или примитивам. Вы знаете, строки, целые числа и т. Д. RDF определяет эти литералы как все наследующие от строки.Мы можем отфильтровать только те свойства, которые литералов с использованием метода фильтра SPARQL isLiteral:

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

Мы здесь только собирается получить свойства, которые имеют в качестве объекта Литерал - строка, дата-время, логическое значение, или один из других типов данных XSD.

А как же нелиберальные объекты? Рассмотрим очень простое определение класса псевдо-Java в качестве аналогии:

public class Person { 
    int age; 
    Person marriedTo; 
} 

Используя приведенный выше запрос, мы получим обратно буквальный, которая будет представлять возраст, если свойство возраст связан. Но marriedTo не является примитивным (т. Е. Буквальным в терминах RDF) - это ссылка на другой объект - в терминологии RDF/OWL, это свойство объекта. Но мы не знаем, на какие объекты ссылаются эти свойства (предикаты). Этот запрос вернет вам свойства с сопроводительными типами.

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

Этого должно быть достаточно, чтобы ориентироваться в конкретном наборе данных. Конечно, я также рекомендую вам просто вытащить отдельные ресурсы и проверить их. Вы можете сделать это с помощью описательного запроса:

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

Есть некоторые SPARQL инструментов - SNORQL, например, - которые позволяют вам сделать это в браузере. У экземпляра SNORQL, с которым я связан, есть пример запроса для изучения возможных названных графиков, которые я здесь не рассматривал.

Если вы незнакомы с SPARQL, честно говоря, лучший ресурс, если вы застряли, - это спецификация. Это спецификация W3C, но довольно хорошая (они построили достойный набор тестов, чтобы вы могли увидеть, правильно ли реализованы его реализация или нет), и если вы можете преодолеть сложный язык, это очень полезно.

+0

утончаются удивительный ответ - спасибо очень Том! – significance

+0

Я знаю, что я не должен публиковать простой «Спасибо!msgstr "сообщения на SO, но вы просто серьезно помогли SPARQL noob, так что:« Спасибо! ». –

1

Я часто упоминаю об этом list of queries from the voiD project. Они в основном носят статистический характер, но не только. Нетрудно удалить COUNT из некоторых операторов, чтобы получить фактические значения.

6

Я нашел следующий набор поисковых запросов полезный:

Проводов классов:

select distinct ?type ?label 
where { 
    ?s a ?type . 
    OPTIONAL { ?type rdfs:label ?label } 
} 

Проводов свойств:

select distinct ?objprop ?label 
where { 
    ?objprop a owl:ObjectProperty . 
    OPTIONAL { ?objprop rdfs:label ?label } 
} 

Проводов свойств данных:

select distinct ?dataprop ?label 
where { 
    ?dataprop a owl:DatatypeProperty . 
    OPTIONAL { ?dataprop rdfs:label ?label } 
} 

Зрение, которые фактически используются свойства:

select distinct ?p ?label 
where { 
    ?s ?p ?o . 
    OPTIONAL { ?p rdfs:label ?label } 
} 

Видя, что отстаиваются лица:

select distinct ?entity ?elabel ?type ?tlabel 
where { 
    ?entity a ?type . 
    OPTIONAL { ?entity rdfs:label ?elabel } . 
    OPTIONAL { ?type rdfs:label ?tlabel } 
} 

Видя различные графики в использовании:

select distinct ?g where { 
    graph ?g { 
     ?s ?p ?o 
    } 
} 
Смежные вопросы