Подтвердить что ты не робот

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

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

например.

show tables

describe table

select * from table

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

Спасибо:)

4b9b3361

Ответ 1

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

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

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

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

a - это специальный SPARQL (и Notation3/Turtle) для представления предиката rdf:type - это связывает отдельные экземпляры с типами owl:Class/rdfs:Class (примерно эквивалентно таблицам в 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:

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

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

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

Ответ 2

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

Просмотр классов:

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 
    } 
}

Ответ 3

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

Ответ 4

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