Ну, очевидно, первый запуск должен смотреть на классы и свойства, присутствующие в данных.
Вот как увидеть, какие классы используются:.
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, но довольно хорошая (они построили достойный набор тестов, чтобы вы могли увидеть, правильно ли реализованы его реализация или нет), и если вы можете преодолеть сложный язык, это очень полезно.
утончаются удивительный ответ - спасибо очень Том! – significance
Я знаю, что я не должен публиковать простой «Спасибо!msgstr "сообщения на SO, но вы просто серьезно помогли SPARQL noob, так что:« Спасибо! ». –