поисковые запросы SPARQL?

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

например.

show tables describe table select * from table 

может ли кто-нибудь помочь мне понять, как завершить аналогичное исследование хранилища данных rdf с использованием конечной точки SPARQL?

Благодаря 🙂

Ну, очевидным первым начинанием является просмотр classов и свойств, присутствующих в данных.

Вот как узнать, какие classы используются:

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

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

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

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

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

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

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

 SELECT DISTINCT ?property WHERE { ?sa ; ?property ?o . } 

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

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

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

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

 SELECT DISTINCT ?property WHERE { ?sa ; ?property ?o . FILTER isLiteral(?o) } 

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

Но как насчет нелитеральных объектов? Рассмотрите это очень простое определение classа псевдо-Java как аналогию:

 public class Person { int age; Person marriedTo; } 

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

 SELECT DISTINCT ?property, ?class WHERE { ?sa ; ?property ?o . ? a ?class . FILTER(!isLiteral(?o)) } 

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

 DESCRIBE  

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

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

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

Просмотр classов:

 select distinct ?type ?label where { ?sa ?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 } } 
 SELECT DISTINCT * WHERE { ?s ?p ?o } LIMIT 10 

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

Давайте будем гением компьютера.