Разделы презентаций


Современные методы проектирования информационных систем

Содержание

Состав курса (1-ый сем): Лекции - ___ ч.

Слайды и текст этой презентации

Слайд 1Современные методы проектирования информационных систем
Преподаватель: ГУБИН Александр Николаевич
к.т.н., доц.
каф.

ИУС (ауд. 209/2) Тел. 3051278



Современные методы проектирования информационных системПреподаватель: ГУБИН Александр Николаевич		к.т.н., доц.		 каф. ИУС 			     (ауд.

Слайд 2
Состав курса (1-ый сем):

Лекции - ___ ч.
Лаб.р. - ___ ч.
Практика- ____ ч.

Зачет




Лекция №7

Современные методы проектирования информационных систем

Состав курса (1-ый сем):

Слайд 3SPARQL
Язык запросов SPARQL для RDF
Рекомендация W3C, 15 января 2008
Текущая версия:
http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/
Последняя

версия:
http://www.w3.org/TR/rdf-sparql11-query/

SPARQLЯзык запросов SPARQL для RDFРекомендация W3C, 15 января 2008Текущая версия:http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/Последняя версия:http://www.w3.org/TR/rdf-sparql11-query/

Слайд 4SPARQL

SPARQL

Слайд 5Пространства имен

Предполагаются следующие привязки префикса пространства имен, если не оговорено

иного:

SPARQL

Пространства именПредполагаются следующие привязки префикса пространства имен, если не оговорено иного:SPARQL

Слайд 6Описания результатов
Результирующие наборы представляются в табличном виде.
В показанном ниже

результирующем наборе имеется три переменных: x, y и z (показаны

заголовками столбцов).
Каждое решение - это строка таблицы.
В данном случае решение будет единственным, где переменная x связана с "Alice", переменная y - с , и переменная z не связана с RDF-термином. Переменные не обязательно связаны в решении.

SPARQL

Описания результатовРезультирующие наборы представляются в табличном виде. В показанном ниже результирующем наборе имеется три переменных: x, y

Слайд 7Синтаксис IRI
SPARQL
Префиксные имена
Ключевое слово PREFIX связывает метку префикса с IRI.

Префиксное имя представляет собой метку префикса с локальным элементом (local

part), разделенными двоеточием ":". Префиксное имя преобразовывается в IRI путем конкатенации IRI, связанного с префиксом, и локального элемента.
Метка префикса либо локальный элемент могут быть пустыми. Обратите внимание, что локальные имена SPARQL могут начинаться с цифры, в то время как локальные имена XML нет.
Синтаксис IRISPARQLПрефиксные именаКлючевое слово PREFIX связывает метку префикса с IRI. Префиксное имя представляет собой метку префикса с

Слайд 8
SPARQL
Синтаксис IRI
Относительные IRI

Относительные IRI составляются из базовых IRI
Ключевое слово

BASE определяет базовый IRI, используемый для разрешения относительных IRI

SPARQLСинтаксис IRIОтносительные IRIОтносительные IRI составляются из базовых IRIКлючевое слово BASE определяет базовый IRI, используемый для разрешения

Слайд 9SPARQL
Синтаксис IRI
Ниже указано несколько способов написания одного и того же

IRI:

http://example.org/book/book1

BASE

PREFIX book: book:book1

SPARQLСинтаксис IRIНиже указано несколько способов написания одного и того же IRI:http://example.org/book/book1 BASE  PREFIX book: book:book1

Слайд 10 
SPARQL
Общий синтаксис литералов представляет собой строку (заключенную либо в двойные,

либо в одинарные кавычки - "...", или, '...'), либо с

необязательным тегом языка (который начинается с @), либо с необязательным типом данных (datatype) IRI или префиксным именем (которое начинается с ^^).

Синтаксис литералов

Для удобства целые числа можно записывать непосредственно (без кавычек и явных типов данных IRI). Они интерпретируются как типизированные литералы со значением datatype, равным xsd:integer.
Десятичные числа — в которых присутствует дробная часть, отделенная '.', но не представленные в экспоненциальной форме — интерпретируются как xsd:decimal.
А числа, представленные в экспоненциальной форме — как xsd:double.
Значения типа xsd:boolean можно записать как true или false.

 SPARQLОбщий синтаксис литералов представляет собой строку (заключенную либо в двойные, либо в одинарные кавычки -

Слайд 11SPARQL
Примеры синтаксиса литералов в SPARQL:

"chat"
'chat'@fr с тегом языка "fr"
"xyz"^^
"abc"^^appNS:appDataType
'''The librarian

said, "Perhaps you would enjoy 'War and Peace'."''‘

1, что то

же самое, что и"1"^^xsd:integer
1.3, что то же самое, что и "1.3"^^xsd:decimal
1.300, что то же самое, что и "1.300"^^xsd:decimal
1.0e6, что то же самое, что и "1.0e6"^^xsd:double
true, что то же самое, что и "true"^^xsd:boolean
false, что то же самое, что и "false"^^xsd:boolean

Синтаксис литералов

SPARQLПримеры синтаксиса литералов в SPARQL:

Слайд 12.
SPARQL
Переменные запроса в SPARQL-запросах имеют глобальную область действия.
Использование заданного

имени переменной где-либо в запросе указывает на одну и туже

переменную.
Переменные имеют префиксы "?" или "$";
"?" или "$" не являются составными частями имени переменной. $abc и ?abc обозначают в запросе одинаковые переменные.

Синтаксис переменных запроса

.SPARQLПеременные запроса в SPARQL-запросах имеют глобальную область действия. Использование заданного имени переменной где-либо в запросе указывает на

Слайд 13SPARQL
Безымянные вершины в шаблонах графа воспринимаются как неизвестные переменные, а

не как ссылки на отдельные безымянные вершин в данных, к

которым выполняется запрос.
Безымянные вершины обозначаются либо с помощью меток, например,"_:abc", либо посредством сокращенной формы "[]". Безымянная вершина, которая используется в синтаксисе запроса только один раз, может обозначаться с помощью [].
Одинаковые метки безымянных вершин не могут быть использованы в двух различных основных графовых шаблонах в одном и том же запросе.
Конструкция[:p :v] может быть использована в шаблонах триплетов. Она создает метку безымянной вершины, которая в свою очередь применяется в качестве субъекта для всех заключенных внутри пар предикат-объект.
Созданная безымянная вершина может также использоваться в последующих шаблонах триплетов на месте субъекта и объекта

Синтаксис безымянных вершин

SPARQLБезымянные вершины в шаблонах графа воспринимаются как неизвестные переменные, а не как ссылки на отдельные безымянные вершин

Слайд 14Синтаксис безымянных вершин
SPARQL
Следующие две формы
[ :p "v" ] . []

:p "v" .
задают уникальную метку безымянной вершины, что эквивалентно

записи:
_:b57 :p "v" .
Заданная метка вершины может быть использована в качестве субъекта или объекта для последующих шаблонов триплетов. Например, в качестве субъекта:
[ :p "v" ] :q "w" .
эквивалентного двум триплетам:
_:b57 :p "v" . _:b57 :q "w" .
и объекта:
:x :q [ :p "v" ] .
эквивалентного двум триплетам:
:x :q _:b57 . _:b57 :p "v" .
Синтаксис безымянных вершинSPARQLСледующие две формы[ :p

Слайд 15SPARQL
Шаблоны триплетов записываются в виде разделенного пробелами списка:
субъект, предикат

и объект.
Существуют варианты сокращенной записи некоторых простых конструкций шаблонов

триплетов.

Синтаксис шаблонов триплетов

SPARQLШаблоны триплетов записываются в виде разделенного пробелами списка: субъект, предикат и объект. Существуют варианты сокращенной записи некоторых

Слайд 16SPARQL
Синтаксис шаблонов триплетов
Следующие примеры демонстрируют один и тот же запрос:

PREFIX

dc: http://purl.org/dc/elements/1.1/
SELECT ?title
WHERE { dc:title ?title }



PREFIX dc:
PREFIX :
SELECT $title
WHERE { :book1 dc:title $title }

BASE
PREFIX dc:
SELECT $title WHERE
{ dc:title ?title }
SPARQLСинтаксис шаблонов триплетовСледующие примеры демонстрируют один и тот же запрос:PREFIX dc: http://purl.org/dc/elements/1.1/ SELECT ?title WHERE { dc:title

Слайд 17SPARQL
Шаблоны триплетов с простым субъектом могут быть записаны таким образом,

что субъект упоминается в записи лишь единожды и используется для

более чем одного шаблона триплета.
Для этих целей применяется нотация ";".

?x foaf:name ?name ;
foaf:mbox ?mbox .

Это эквивалентно записи шаблонов триплетов:

?x foaf:name ?name .
?x foaf:mbox ?mbox .

Списки предикат-объект

SPARQLШаблоны триплетов с простым субъектом могут быть записаны таким образом, что субъект упоминается в записи лишь единожды

Слайд 18SPARQL
Если шаблоны триплетов используют общий и субъект, и предикат, объекты

могут быть отделены посредством ",".

?x foaf:nick "Alice" , "Alice_" .



Это эквивалентно записи шаблонов триплетов:

?x foaf:nick "Alice" .
?x foaf:nick "Alice_" .

Списки объектов могут быть объединены со списками предикат-объект:
?x foaf:name ?name ;
foaf:nick "Alice" , "Alice_" .

что эквивалентно следующей записи:

?x foaf:name ?name .
?x foaf:nick "Alice" .
?x foaf:nick "Alice_" .

Списки объектов

SPARQLЕсли шаблоны триплетов используют общий и субъект, и предикат, объекты могут быть отделены посредством

Слайд 19SPARQL
Ключевое слово "a"может быть использовано в качестве предиката в шаблоне

триплета и является альтернативой для IRI  http://www.w3.org/1999/02/22-rdf-syntax-ns#type. Данное ключевое слово

чувствительно к регистру

?x a :Class1 .
[ a :appClass ] :p "v" .

является синтаксическим сахаром для:

?x rdf:type :Class1 .
_:b0 rdf:type :appClass .
_:b0 :p "v" .

rdf:type

SPARQLКлючевое слово

Слайд 20SPARQL
Групповой графовый шаблон в строке запроса SPARQL ограничен фигурными скобками:

{}.
Например, запросный шаблон этого запроса представлен групповым шаблоном запроса,

состоящим из одного основного графового шаблона.

PREFIX foaf:   
SELECT ?name ?mbox
WHERE 
{          
?x foaf:name ?name .  
?x foaf:mbox ?mbox .     
  }

Групповые графовые шаблоны

SPARQLГрупповой графовый шаблон в строке запроса SPARQL ограничен фигурными скобками: {}. Например, запросный шаблон этого запроса представлен

Слайд 21SPARQL
Групповые графовые шаблоны
Те же решения могут быть получены из запроса,

который группирует шаблоны триплетов в два основных графовых шаблона.
К

примеру, структура следующего запроса отличается от предыдущего, однако результаты получатся теми же самыми:

PREFIX foaf:    http://xmlns.com/foaf/0.1/
SELECT ?name ?mbox
WHERE 
{
{ ?x foaf:name ?name . }
{ ?x foaf:mbox ?mbox . }
  }
SPARQLГрупповые графовые шаблоныТе же решения могут быть получены из запроса, который группирует шаблоны триплетов в два основных

Слайд 22SPARQL
Ограничение, выраженное с помощью использования ключевого слова FILTER, накладывает определенные

рамки на решения.
Действие ограничения распространяется на всю группу, в

которой присутствует фильтр.
Все следующие шаблоны имеют одинаковые решения:

 {
?x foaf:name ?name .
?x foaf:mbox ?mbox .
  FILTER regex(?name, "Smith")
}

 { 
FILTER regex(?name, "Smith")
?x foaf:name ?name .
?x foaf:mbox ?mbox .  
}

Область действия фильтров

SPARQLОграничение, выраженное с помощью использования ключевого слова FILTER, накладывает определенные рамки на решения. Действие ограничения распространяется на

Слайд 23SPARQL
Область действия фильтров
 {
  ?x foaf:name ?name .
  FILTER regex(?name, "Smith")

?x foaf:mbox ?mbox .
}

SPARQLОбласть действия фильтров {  ?x foaf:name ?name .  FILTER regex(?name,

Слайд 24SPARQL
Включение необязательных значений
Необязательные составляющие графового шаблона могут быть определены синтаксически

при помощи ключевого слова OPTIONAL, применимого к графовому шаблону:
Синтаксическая форма:
{

OPTIONAL { pattern } }

PREFIX foaf:
SELECT ?name ?mbox
WHERE
{
?x foaf:name ?name .
OPTIONAL
{
?x foaf:mbox ?mbox
}
}

SPARQLВключение необязательных значенийНеобязательные составляющие графового шаблона могут быть определены синтаксически при помощи ключевого слова OPTIONAL, применимого к

Слайд 25SPARQL
Включение необязательных значений
@prefix foaf:

.
@prefix rdf:

.
_:a rdf:type foaf:Person .
_:a foaf:name "Alice" .
_:a foaf:mbox .
_:a foaf:mbox .
_:b rdf:type foaf:Person .
_:b foaf:name "Bob" .


Данные

SPARQLВключение необязательных значений@prefix foaf:       	 . @prefix rdf:

Слайд 26SPARQL
Включение необязательных значений
Результат
name | mbox
________________________________________


"Alice" |
________________________________________
"Alice" |


________________________________________
"Bob" |

В решении отсутствует значение mbox там, где name равно "Bob".

SPARQLВключение необязательных значенийРезультатname   |    mbox________________________________________

Слайд 27SPARQL
Ограничения в необязательном шаблоне
PREFIX dc:
PREFIX ns:
SELECT

?title ?price
WHERE
{ ?
x dc:title ?title .
OPTIONAL
{ ?x

ns:price ?price . FILTER (?price < 30) }
}
SPARQLОграничения в необязательном шаблонеPREFIX dc: PREFIX ns: SELECT ?title ?price WHERE { ?x dc:title ?title . OPTIONAL{

Слайд 28Данные
SPARQL
@prefix dc: .
@prefix : .
@prefix ns:

.
:book1 dc:title "SPARQL Tutorial" .
:book1 ns:price 42

.
:book2 dc:title "The Semantic Web" .
:book2 ns:price 23 .

Результат

Значение price для книги с title, соответствующим "SPARQL Tutorial", не отображается, потому как необязательный графовый шаблон не приводит к решению, которое бы содержало переменную "price".

ДанныеSPARQL@prefix dc: 	 . @prefix :	 . @prefix ns:	 . :book1 	dc:title

Слайд 29SPARQL
Множественные необязательные графовые шаблоны
PREFIX foaf:
SELECT ?name ?mbox ?hpage

WHERE
{
?x foaf:name ?name .
OPTIONAL { ?x foaf:mbox

?mbox } .
OPTIONAL { ?x foaf:homepage ?hpage }
}

Запрос

SPARQLМножественные необязательные графовые шаблоныPREFIX foaf: SELECT ?name ?mbox ?hpage WHERE { ?x foaf:name ?name . OPTIONAL {

Слайд 30SPARQL
@prefix foaf: .
_:a foaf:name "Alice" .
_:a foaf:homepage

.
_:b foaf:name "Bob" .
_:b foaf:mbox .


Данные

Результат

SPARQL@prefix foaf:	 . _:a 	foaf:name

Слайд 31SPARQL
Соответствие альтернативам
SPARQL предлагает средства компоновки графовых шаблонов так, чтобы поиск

соответствия мог вестись для нескольких альтернативных графовых шаблонов.
Альтернативы шаблонов

синтаксически определяются при помощи ключевого слова UNION.

PREFIX dc10:
PREFIX dc11:
SELECT ?title
WHERE
{
{ ?book dc10:title ?title }
UNION
{ ?book dc11:title ?title }
}

SPARQLСоответствие альтернативамSPARQL предлагает средства компоновки графовых шаблонов так, чтобы поиск соответствия мог вестись для нескольких альтернативных графовых

Слайд 32SPARQL
Данные
@prefix dc10: .
@prefix dc11: .
_:a dc10:title "SPARQL

Query Language Tutorial" .
_:a dc10:creator "Alice" .
_:b dc11:title

"SPARQL Protocol Tutorial" .
_:b dc11:creator "Bob" .
_:c dc10:title "SPARQL" .
_:c dc11:title "SPARQL (updated)" .

Результат

Данный запрос находит все названия (title) книг из исходных данных, где эти названия записаны с помощью свойств Dublin Core версии 1.0 или 1.1. Для того, чтобы определить, как именно была записана информация, запрос должен использовать различные переменные для двух альтернатив:

SPARQLДанные@prefix dc10:	 . @prefix dc11:	 . _:a 	dc10:title

Слайд 33PREFIX dc10: PREFIX dc11: SELECT ?x ?y
WHERE


{
{ ?book dc10:title ?x }
UNION
{ ?book dc11:title

?y }
}

SPARQL

Этот запрос вернет результаты с переменной x, связанной с решениями из левой части от UNION, и y, связанной с решениями из правой части.

PREFIX dc10: 	 PREFIX dc11: 	 SELECT ?x ?y WHERE { { ?book dc10:title ?x } UNION

Слайд 34SPARQL
Шаблон UNION объединяет графовые шаблоны, причем каждая альтернатива может содержать

более одного шаблона триплета:
PREFIX dc10:
PREFIX dc11:
SELECT

?title ?author
WHERE
{
{ ?book dc10:title ?title .
?book dc10:creator ?author}
UNION
{ ?book dc11:title ?title .
?book dc11:creator ?author }
}
SPARQLШаблон UNION объединяет графовые шаблоны, причем каждая альтернатива может содержать более одного шаблона триплета:PREFIX dc10: PREFIX dc11:

Слайд 35SPARQL
Результат
Этот запрос будет соответствовать книге лишь в том случае, если

ее предикаты, обозначающие как автора, так и название, будут взяты

из одной версии Дублинского ядра.
SPARQLРезультатЭтот запрос будет соответствовать книге лишь в том случае, если ее предикаты, обозначающие как автора, так и

Слайд 36SPARQL
Модификаторы последовательности решений
Шаблоны запроса генерируют неупорядоченную коллекцию решений.
Каждое

решение является частичной функцией переменных от RDF-терминов.
Любые модификаторы последовательности

используются для создания другой последовательности.
И эта последняя последовательность применяется для генерации результатов работы формы запроса SPARQL.
SPARQLМодификаторы последовательности решений Шаблоны запроса генерируют неупорядоченную коллекцию решений. Каждое решение является частичной функцией переменных от RDF-терминов.

Слайд 37SPARQL

Модификатор последовательности (Order by): упорядочивает решения
Модификатор проекции (Projection): выбирает определенные

переменные
Модификатор уникальности (Distinct): гарантирует уникальность решений в последовательности
Модификатор сокращения (Reduced):

разрешает элиминацию некоторых неуникальных решений
Модификатор сдвига (Offset): контролирует, где начинаются решения во всей последовательности решений
Модификатором предела (Limit): ограничивает число решений

Модификаторы последовательности

SPARQLМодификатор последовательности (Order by): упорядочивает решенияМодификатор проекции (Projection): выбирает определенные переменныеМодификатор уникальности (Distinct): гарантирует уникальность решений в

Слайд 38ORDER BY
SPARQL
Условие ORDER BY устанавливает порядок последовательности решений
За условием ORDER

BY расположены компараторы последовательности, состоящие из выражения и необязательного модификатора

последовательности (ASC() либо DESC()).
Каждый компаратор последовательности является либо восходящим (ascending), — обозначается модификатором ASC() или отсутствием модификатора — либо нисходящим (descending) — обозначается модификатором DESC().
ORDER BYSPARQLУсловие ORDER BY устанавливает порядок последовательности решенийЗа условием ORDER BY расположены компараторы последовательности, состоящие из выражения

Слайд 39SPARQL
PREFIX foaf:
SELECT ?name
WHERE
{
?x foaf:name ?name.
}


ORDER BY ?name
ORDER BY
PREFIX :
PREFIX foaf:


PREFIX xsd:

SELECT ?name
WHERE { ?x foaf:name ?name ;
:empId ?emp }
ORDER BY DESC(?emp)
SPARQLPREFIX foaf: SELECT ?name WHERE { ?x foaf:name ?name.} ORDER BY ?name ORDER BYPREFIX : PREFIX foaf:

Слайд 40ORDER BY
SPARQL
PREFIX foaf:
SELECT ?name
WHERE
{
?x foaf:name

?name ;
:empId ?emp
}
ORDER BY

?name DESC(?emp)
ORDER BYSPARQLPREFIX foaf: SELECT ?name WHERE { ?x foaf:name ?name ;   :empId ?emp } ORDER

Слайд 41SPARQL
Повторные решения
PREFIX foaf: SELECT ?name
WHERE
{ ?x foaf:name

?name }
@prefix foaf: .
_:x foaf:name "Alice" .

_:x foaf:mbox mailto:alice@example.com.

_:y foaf:name "Alice" .
_:y foaf:mbox .

_:z foaf:name "Alice" .
_:z foaf:mbox .
SPARQLПовторные решенияPREFIX foaf: SELECT ?name WHERE { ?x foaf:name ?name } @prefix foaf: 	 . _:x 	foaf:name

Слайд 42SPARQL
Повторные решения
Модификатор решений DISTINCT позволяет ликвидировать повторные решения.
В частности,

каждое решение, которое связывает одинаковые переменные и одинаковые RDF-термины в

качестве еще одного решения, из набора решений удаляются.
SPARQLПовторные решенияМодификатор решений DISTINCT позволяет ликвидировать повторные решения. В частности, каждое решение, которое связывает одинаковые переменные и

Слайд 43SPARQL
PREFIX foaf:
SELECT DISTINCT ?name
WHERE
{
?x foaf:name ?name


}
DISTINCT

SPARQLPREFIX foaf: SELECT DISTINCT ?nameWHERE { ?x foaf:name ?name } DISTINCT

Слайд 44SPARQL
LIMIT
Условие LIMIT задает верхнюю границу числа возвращаемых решений.
Если фактическое

число решений превышает лимит, то число возвращаемых решений не превысит

заданный лимит.

PREFIX foaf: SELECT ?name
WHERE
{
?x foaf:name ?name
}
LIMIT 20

Равенство LIMIT 0 не возвратит никаких результатов. Значение LIMIT не может быть отрицательным.

SPARQLLIMITУсловие LIMIT задает верхнюю границу числа возвращаемых решений. Если фактическое число решений превышает лимит, то число возвращаемых

Слайд 45SPARQL
OFFSET
OFFSETпозволяет сгенерированным решениям начинаться после определенного числа решений. Равенство OFFSET

нулю не возымеет никакого эффекта.
Использование LIMIT и OFFSET для выбора

разных подмножеств решений запроса не имеет никакого смысла, если последовательность решений не предсказуема и не применен модификатор ORDER BY.

PREFIX foaf:
SELECT ?name
WHERE
{
?x foaf:name ?name
}
ORDER BY ?name
LIMIT 5
OFFSET 10

SPARQLOFFSETOFFSETпозволяет сгенерированным решениям начинаться после определенного числа решений. Равенство OFFSET нулю не возымеет никакого эффекта.Использование LIMIT и

Слайд 46SPARQL
Формы запросов
В SPARQL существует четыре формы запросов.
Эти формы запроса

используют решения исходя из соответствия шаблону для формирования результирующих наборов

или RDF-графов.
SELECT
Возвращает все или подмножество переменных, связанных c соответствующим шаблоном запроса.
CONSTRUCT
Возвращает RDF-граф, созданный путем замены переменных в наборе шаблонов триплетов.
ASK
Возвращает булево значение, которое указывает, соответствует ли шаблон запроса.
DESCRIBE
Возвращает RDF-граф, описывающий найденные ресурсы.

SPARQLФормы запросовВ SPARQL существует четыре формы запросов. Эти формы запроса используют решения исходя из соответствия шаблону для

Слайд 47CONSTRUCT
SPARQL
Форма запроса CONSTRUCT возвращает один RDF-граф, определенный графовым шаблоном.
В

результате получается RDF-граф, сформированный путем взятия каждого решения запроса из

последовательности решений.

PREFIX foaf:
PREFIX vcard:

CONSTRUCT { vcard:FN ?name } WHERE { ?x foaf:name ?name }

создает свойства vcard из информации FOAF:

@prefix vcard: . vcard:FN "Alice" .

CONSTRUCTSPARQLФорма запроса CONSTRUCT возвращает один RDF-граф, определенный графовым шаблоном. В результате получается RDF-граф, сформированный путем взятия каждого

Слайд 48SPARQL
CONSTRUCT
@prefix foaf: .
_:a foaf:name "Alice" .
_:a foaf:mbox

.
Данные для предыдущего запроса:

SPARQLCONSTRUCT@prefix foaf: 	 . _:a	 foaf:name

Слайд 49ASK
SPARQL
Приложения могут использовать форму ASK для тестирования, имеет ли шаблон

запроса решение.
Никакая информация о возможных решениях запроса не возвращается,

просто выполняется проверка наличия решения.

PREFIX foaf:
ASK
{
?x foaf:name "Alice"
}

prefix foaf: .
_:a foaf:name "Alice" .
_:a foaf:homepage .
_:b foaf:name "Bob" .
_:b foaf:mbox .

yes

ASKSPARQLПриложения могут использовать форму ASK для тестирования, имеет ли шаблон запроса решение. Никакая информация о возможных решениях

Слайд 50SPARQL
PREFIX foaf:
ASK
{
?x foaf:name "Alice" ;

foaf:mbox mailto:alice@work.example.
}
С теми же данными этот

запрос возвращает отсутствие соответствия (no) , так как mbox Алисы в данных отсутствует.
SPARQLPREFIX foaf: 	 ASK { ?x 	foaf:name

Слайд 51DESCRIBE
SPARQL
Форма DESCRIBE возвращает единственный результирующий RDF-граф, который содержит RDF-данные о

ресурсах. Описание определяется сервисом запросов.
Синтаксис DESCRIBE * является сокращением

и обозначает использование всех переменных в запросе.

Самый простой запрос DESCRIBE представляет собой просто IRI в условии DESCRIBE:

DESCRIBE

DESCRIBESPARQLФорма DESCRIBE возвращает единственный результирующий RDF-граф, который содержит RDF-данные о ресурсах. Описание определяется сервисом запросов. Синтаксис DESCRIBE

Слайд 52SPARQL
DESCRIBE
Идентификация ресурсов
Ресурсы, которые необходимо описать, могут быть взяты из привязок

к переменной запроса в результирующем наборе.
Это делает возможным описание

ресурсов, каким бы образом они ни были определены (с помощью IRI или безымянных вершин в наборе данных):

PREFIX foaf: DESCRIBE ?x
WHERE { ?x foaf:mbox }

Этот запрос возвратит информацию максимум об одном человеке.

SPARQLDESCRIBEИдентификация ресурсовРесурсы, которые необходимо описать, могут быть взяты из привязок к переменной запроса в результирующем наборе. Это

Слайд 53SPARQL
DESCRIBE
Идентификация ресурсов
Однако, если шаблон запроса имеет множество решений, тогда RDF-данными

для каждого будет объединение всех описаний RDF-графов.
PREFIX foaf: DESCRIBE

?x
WHERE { ?x foaf:name "Alice" }

Может быть задано более одной переменной или IRI:

PREFIX foaf:
DESCRIBE ?x ?y
WHERE {?x foaf:knows ?y}

SPARQLDESCRIBEИдентификация ресурсовОднако, если шаблон запроса имеет множество решений, тогда RDF-данными для каждого будет объединение всех описаний RDF-графов.PREFIX

Слайд 54SPARQL
Описания ресурсов
Возвращаемые RDF-данные определяются тем, кто публикует информацию.
Это та

полезная информация о ресурсе, которой обладает сервис. Она может включать

информацию о других ресурсах

Простой запрос об ID сотрудника

PREFIX ent: DESCRIBE ?x
WHERE { ?x ent:employeeId "1234" }

может возвратить описание работника и некоторые другие потенциально полезные детали:

SPARQLОписания ресурсовВозвращаемые RDF-данные определяются тем, кто публикует информацию. Это та полезная информация о ресурсе, которой обладает сервис.

Слайд 55SPARQL
@prefix foaf: http://xmlns.com/foaf/0.1/ .
@prefix vcard: .
@prefix exOrg:

.
@prefix rdf: . @prefix owl: http://www.w3.org/2002/07/owl#.
_:a

exOrg:employeeId "1234" ;
foaf:mbox_sha1sum "ABCD1234" ;
vcard:N [ vcard:Family "Smith" ;
vcard:Given "John" ] .
foaf:mbox_sha1sum rdf:type owl:InverseFunctionalProperty .

Описания ресурсов

SPARQL@prefix foaf:	 http://xmlns.com/foaf/0.1/ . @prefix vcard: 	 . @prefix exOrg: . @prefix rdf: . @prefix owl: http://www.w3.org/2002/07/owl#.

Слайд 57 Запрос  источника  данных  общего  пользования

 Запрос  источника  данных  общего  пользования

Слайд 58 Запрос  источника  данных  общего  пользования

 Запрос  источника  данных  общего  пользования

Слайд 59 Запрос  источника  данных  общего  пользования
Последний запрос выдает нам все

URL'ы компаний, их названия, URL-ы основателей, их имена, описания портреты

и даты рождения.
Есть поля которые можно не выводить, например URL-ы компаний и URL-адреса основателей.
Можно указать имена переменных, значения которых необходимо вывести на экран. Для этого используется ключевое слово SELECT.
 Запрос  источника  данных  общего  пользования Последний запрос выдает нам все URL'ы компаний, их названия, URL-ы основателей, их

Слайд 60 Запрос  источника  данных  общего  пользования
PREFIX rdf:
PREFIX dbpedia-owl:
PREFIX

dbp:
PREFIX dbpprop:

SELECT ?corporation ?founderName ?founderPicture ?founderBirth ?founderDescription


WHERE
{
?companyURL rdf:type dbpedia-owl:Company ;
dbpprop:companyName ?corporation ;
dbpedia-owl:foundedBy ?founderURL .
?founderURL dbpedia-owl:birthDate ?founderBirth ;
foaf:name ?founderName ;
dbpedia-owl:abstract ?founderDescription ;
foaf:depiction ?founderPicture .

FILTER (?founderBirth > "1940-03-10"^^xsd:date ) .
{ ?founderURL rdf:type dbpedia-owl:Artist. }
UNION
{ ?founderURL rdf:type dbpedia-owl:Actor. }
UNION
{ ?founderURL rdf:type dbpedia-owl:MartialArtist. }
UNION
{ ?founderURL dbpedia-owl:occupation dbp:Martial_arts.}
}
LIMIT 100
 Запрос  источника  данных  общего  пользования PREFIX rdf: PREFIX dbpedia-owl: PREFIX dbp: PREFIX dbpprop: SELECT ?corporation ?founderName ?founderPicture

Слайд 61 Запрос  источника  данных  общего  пользования

 Запрос  источника  данных  общего  пользования

Слайд 62 Запрос  источника  данных  общего  пользования
Фильтрация строковых литералов по языку

Запустив

этот запрос на выполнение, можно увидеть большое количество дубликатов. Дублирование

связано, в первую очередь, с тем, что одна и та же компания может иметь разные языковые тэги (информация дублируется на французском немецком и др. языках).
Для того, чтобы оставить в ответе на запрос только один язык используем оператор фильтрации для переменных ?corporation и ?founderDescription (только английский язык)

 Запрос  источника  данных  общего  пользования Фильтрация строковых литералов по языкуЗапустив этот запрос на выполнение, можно увидеть большое

Слайд 63 Запрос  источника  данных  общего  пользования
PREFIX rdf:
PREFIX dbpedia-owl:
PREFIX

dbp:
PREFIX dbpprop:

SELECT ?corporation ?founderName ?founderPicture ?founderBirth ?founderDescription


WHERE
{
?companyURL rdf:type dbpedia-owl:Company ;
dbpprop:companyName ?corporation ;
dbpedia-owl:foundedBy ?founderURL .
?founderURL dbpedia-owl:birthDate ?founderBirth ;
foaf:name ?founderName ;
dbpedia-owl:abstract ?founderDescription ;
foaf:depiction ?founderPicture .

FILTER (?founderBirth > "1940-03-10"^^xsd:date ) .
FILTER langMatches( lang(?corporation), "EN" ) .
FILTER langMatches( lang(?founderDescription), "EN" ) .

{ ?founderURL rdf:type dbpedia-owl:Artist. }
UNION
{ ?founderURL rdf:type dbpedia-owl:Actor. }
UNION
{ ?founderURL rdf:type dbpedia-owl:MartialArtist. }
UNION
{ ?founderURL dbpedia-owl:occupation dbp:Martial_arts.}
}
LIMIT 100
 Запрос  источника  данных  общего  пользования PREFIX rdf: PREFIX dbpedia-owl: PREFIX dbp: PREFIX dbpprop: SELECT ?corporation ?founderName ?founderPicture

Слайд 64 Запрос  источника  данных  общего  пользования

 Запрос  источника  данных  общего  пользования

Слайд 65 Запрос  источника  данных  общего  пользования
PREFIX bpedia-owl:
SELECT ?Cat
{

dbpedia-owl:abstract ?Cat
FILTER(langMatches(lang(?Cat), "RU"))
}

 Запрос  источника  данных  общего  пользования PREFIX bpedia-owl: SELECT ?Cat{  dbpedia-owl:abstract ?Cat FILTER(langMatches(lang(?Cat),

Слайд 66 Домашнее задание (контрольная работа)
PREFIX rdfs:
SELECT *
WHERE {

?subject rdfs: свойство ?x

}

На базе представленного SPARQL-запроса изучите различные свойства RDFS

Составьте SPARQL-запросы для изучения конструкций языка OWL Lite

http://dbpedia.org/sparql

 Домашнее задание (контрольная работа)PREFIX rdfs: SELECT *WHERE {         ?subject

Слайд 67  Обеспечение читабельности результатов запроса
Как было указано ранее, запрос, который

спрашивает, кто в данных адресной книги имеет телефонный номер (229)

276-5135:

# filename: ex008.rq
PREFIX ab:
SELECT ?person
WHERE
{
?person ab:homeTel "(229)276-5135".
}

При запуске этого запроса к данным:

  Обеспечение читабельности результатов запросаКак было указано ранее, запрос, который спрашивает, кто в данных адресной книги имеет

Слайд 68  Обеспечение читабельности результатов запроса

  Обеспечение читабельности результатов запроса

Слайд 69  Обеспечение читабельности результатов запроса
Обеспечивает получение следующего результата
Очевидно, что это

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

и фамилию человека с этим номером телефона:
  Обеспечение читабельности результатов запросаОбеспечивает получение следующего результатаОчевидно, что это не очень хороший ответ.Откорректируем запрос, для того,

Слайд 70  Обеспечение читабельности результатов запроса

  Обеспечение читабельности результатов запроса

Слайд 71  Обеспечение читабельности результатов запроса
Результат соответствует требованиям читабельности

  Обеспечение читабельности результатов запросаРезультат соответствует требованиям читабельности

Слайд 72Ответ
Точка с запятой в SPARQL запросе означает, следующее:
"Вот еще предикат

и объект для данного субъекта".
Используя точку с запятой, построим

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

  Обеспечение читабельности результатов запроса

ОтветТочка с запятой в SPARQL запросе означает, следующее:

Слайд 73Использование меток, предусмотренных DBpedia
Ранее, мы рассматривали запрос на получение списка

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

URI, которые представляли эти альбомы и исполнителей, т.е. результаты можно считать плохо читаемыми.
Можно улучшить читабельность результатов, отредактировав запрос с использованием значения меток rdfs:label:
Использование меток, предусмотренных DBpediaРанее, мы рассматривали запрос на получение списка альбомов, произведенных Timbaland и исполнителей. Результаты запроса

Слайд 74Использование меток, предусмотренных DBpedia

Использование меток, предусмотренных DBpedia

Слайд 75У каждого исполнителя и названия альбома имеется несколько значений rdfs:label

с разными языковыми тегами, назначенными каждому значению,
например "en" для английского

и "de" (Deutsch) для немецкого языка.
(Название альбома отображается на английском языке, потому что он был выпущен под таким
названием в этих странах).
Когда вводится этот запрос в SNORQL DBpedia интерфейсе, то результат выдает каждую комбинацию из них, начиная с нескольких для Мисси Эллиот "Back in the day".

Использование меток, предусмотренных DBpedia

У каждого исполнителя и названия альбома имеется несколько значений rdfs:label с разными языковыми тегами, назначенными каждому значению,например

Слайд 76
Использование меток, предусмотренных DBpedia

Использование меток, предусмотренных DBpedia

Слайд 77Использование Ключевого слова FILTER позволит получить значения меток и названия

альбомов только на английском языке:
Использование меток, предусмотренных DBpedia

Использование Ключевого слова FILTER позволит получить значения меток и названия альбомов только на английском языке:Использование меток, предусмотренных

Слайд 78Использование меток, предусмотренных DBpedia

Использование меток, предусмотренных DBpedia

Слайд 79SPARQL. Запрос данных
Переменная указывает поисковой машине, что ее устроит триплет

удовлетворяющей шаблону с любым
значением в этой позиции.
Все эти значения

будут запомнены в переменной
?craigEmail, так что можно использовать их в другом месте этого запроса.
SPARQL. Запрос данныхПеременная указывает поисковой машине, что ее устроит триплет удовлетворяющей шаблону с любымзначением в этой позиции.

Слайд 80SPARQL. Запрос данных
Данный запрос запрашивает любой ab:email, связанный с ресурсом

ab:craig.
Это означает поиск любых электронных адресов Крейга.
#  filename:  ex003.rq  
PREFIX

 ab:  http://learningsparql.com/ns/addressbook#
SELECT  ?craigEmail  
WHERE  
{  ab:craig  ab:email  ?craigEmail  .  }

В наборе триплетов данных или триплетов запросов, точка после последнего не является обязательной. Тем не менее
ставить ее – хорошая привычка (потом проще добавлять новые шаблоны).

SPARQL. Запрос данныхДанный запрос запрашивает любой ab:email, связанный с ресурсом ab:craig.Это означает поиск любых электронных адресов Крейга.#

Слайд 81 SPARQL. Запрос данных
#  filename:  ex003.rq  
PREFIX  ab:  http://learningsparql.com/ns/addressbook#
SELECT

 ?craigEmail  
WHERE  
{  ab:craig  ab:email  ?craigEmail  .  }
В запросе

SPARQL, ключевое слово WHERE
указывает «извлечь эти данные из набора данных», а SELECT «выбрать для извлекаемых
данных указанные имена».
SPARQL. Запрос данных#  filename:  ex003.rq  PREFIX  ab:  http://learningsparql.com/ns/addressbook# SELECT  ?craigEmail  WHERE  {  ab:craig  ab:email  ?craigEmail  .

Слайд 82SPARQL. Запрос данных
WHERE специфицирует извлекаемые данные; SELECT выбирает
данные для отображения

SPARQL. Запрос данныхWHERE специфицирует извлекаемые данные; SELECT выбираетданные для отображения

Слайд 83 SPARQL. Запрос данных
Какую информацию запрос приведенный выше извлечет

из троек данных?
Все, что соответствует (удовлетворяет) требованиям его триплета.


Вся информация, что будет получена в
качестве результата выполнения запроса помещается в переменную ?CraigEmail.

#  filename:  ex003.rq  
PREFIX  ab:  http://learningsparql.com/ns/addressbook#
SELECT  ?craigEmail  
WHERE  
{  ab:craig  ab:email  ?craigEmail  .  }

SPARQL. Запрос данныхКакую информацию запрос приведенный выше извлечет из троек данных? Все, что соответствует (удовлетворяет)

Слайд 84 SPARQL. Запрос данных
Как и в любым языке программирования

или языке запросов, имя переменной должно давать подсказку о назначении

переменной. Вместо имени ?CraigEmail, можно было выбрать имя
?Zxzwzyx, что сделало бы запрос более трудным для его понимания человеком.

Как этот запрос будет выполняться?
Существует SPARQL – процессор (или SPARQL – движок), который применяет запрос к информационному файлу и визуализирует результат работы.

SPARQL. Запрос данныхКак и в любым языке программирования или языке запросов, имя переменной должно давать

Слайд 85 SPARQL процессор
Термины SPARQL процессор и SPARQL движок, имеют в

виду одно и то же - программу, которая может
применить SPARQL

запрос к набору данных и выдать результат.
Для запросов к файлу данных на вашем жестком диске, можно использовать свободно распространяемую Java-
программу ARQ. ARQ является частью Apache Jena framework, поэтому ее можно
загрузить с домашней страницы по адресу http://jena.apache.org/documentation/query и
скачать бинарный файл, имя которого Apache-jena- * .zip.
Разархивирование создаст
подкаталог с именем, похожим на имя файла ZIP; это ваш домашний каталог Jena.
SPARQL процессорТермины SPARQL процессор и SPARQL движок, имеют в виду одно и то же - программу,

Слайд 86SPARQL процессор
Пользователи Windows, найдут там arq.bat и sparql.bat скрипты в

bat подкаталоге, а
пользователи с системами Linux - arq и sparql

shell сценарии в подкаталоге bin. (Первый из
каждой пары позволяет использовать расширения ARQ).

Либо на Windows, либо на Linux, можно запустить ex003.rq запрос к данным
ex002.ttl с помощью следующей команды:

arq  -­ data  ex002.ttl  -­ query  ex003.rq

SPARQL процессорПользователи Windows, найдут там arq.bat и sparql.bat скрипты в bat подкаталоге, апользователи с системами Linux -

Слайд 87SPARQL процессор
Формат вывода по умолчанию - ARQ показывает имя каждой

выбранной переменной в верхней строке и линиями вокруг значений каждой

переменной, с
использованием дефиса, знаков равно и вертикальная линия:

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|  craigEmail                                      |  
===========================  
|  "c.ellis@usairwaysgroup.com"   |  
|  "craigellis@yahoo.com"               |  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

SPARQL процессорФормат вывода по умолчанию - ARQ показывает имя каждой выбранной переменной в верхней строке и линиями

Слайд 88SPARQL процессор
Следующий вариант ex003.rq запроса использует полные URI, для записи

субъекта и предиката в триплете запроса, вместо того чтобы использовать

префикс.
По сути, это тот же запрос, и получает такой же ответ от ARQ, что и в предыдущем случае.

#  filename:  ex006.rq
SELECT  ?craigEmail  
WHERE
{  
           
      
    ?craigEmail  .
}

SPARQL процессорСледующий вариант ex003.rq запроса использует полные URI, для записи субъекта и предиката в триплете запроса, вместо

Слайд 89SPARQL процессор
Различия между этим запросом и первым демонстрируют две вещи:

использовать префиксы в запросе необязательно, но они могут сделать запрос

более компактным и легким для чтения, чем тот, который использует полные URI. Когда используется полный URI, необходимо заключить его в скобки, чтобы показать, процессору что это URI.
• Пробелы не влияют на синтаксис SPARQL. Новый запрос использует возврат каретки, для разделения трех частей триплета и все равно работает отлично.
SPARQL процессорРазличия между этим запросом и первым демонстрируют две вещи:• использовать префиксы в запросе необязательно, но они

Слайд 90SPARQL процессор
#  filename:  ex003.rq  
PREFIX  ab:  http://learningsparql.com/ns/addressbook#
SELECT  ?craigEmail  
WHERE

 
{  ab:craig  ab:email  ?craigEmail  .  }
#  filename:  ex006.rq
SELECT

 ?craigEmail  
WHERE
{  
           
      
    ?craigEmail  .
}

Команда ARQ приведенная выше указывает набор данных для запроса в команднойстроке.

SPARQL процессор#  filename:  ex003.rq  PREFIX  ab:  http://learningsparql.com/ns/addressbook# SELECT  ?craigEmail  WHERE  {  ab:craig  ab:email  ?craigEmail  .  } #

Слайд 91SPARQL процессор
SPARQL запрос с ключевым словом FROM позволяет указать набор

данных для запроса как часть самого запроса.
Если опустить параметр

--data ex002.ttl
показанный в командной строки ARQ,
arq  -­ data  ex002.ttl  -­ query  ex003.rq
и использовать следующий запрос, вы получите тот
же результат:

#  filename:  ex007.rq  
PREFIX  ab:  
SELECT  ?craigEmail  FROM    
WHERE  
{  ab:craig  ab:email  ?craigEmail  .  }

SPARQL процессорSPARQL запрос с ключевым словом FROM позволяет указать набор данных для запроса как часть самого запроса.

Слайд 92SPARQL процессор
Угловые скобки вокруг "ex002.ttl" говорят процессору SPARQL использовать его

в качестве URI.

Но, поскольку это просто имя файла, а

не полный URI, ARQ предполагает, что это файл находящийся в той же папке, что и сам запрос.
SPARQL процессорУгловые скобки вокруг

Слайд 93SPARQL процессор
В запросах, которые рассмотрены до сих пор переменная была

в позиции объекта
триплета (третья позиция), но ее можно поместить в

любой из трех позиций.

Например, кто-то позвонил мне по телефону (229) 276-5135, и я ничего не ответил. Я хочу знать, кто пытался позвонить мне, для этого необходимо создать следующий запрос для набора данных адресной книги, поставив переменную в субъектной позиции, вместо позиции объекта:
SPARQL процессорВ запросах, которые рассмотрены до сих пор переменная была в позиции объектатриплета (третья позиция), но ее

Слайд 94SPARQL процессор
#  filename:  ex008.rq  
PREFIX  ab:  
SELECT  ?person  
WHERE

 
{  ?person  ab:homeTel  "(229)  276‐5135"  .  }
При запуске этого

запроса в ARQ к данным ex002.ttl адресной книги, получим следующий результат:

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|  person              |  
==============  
|  ab:richard         |  
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

SPARQL процессор#  filename:  ex008.rq  PREFIX  ab:   SELECT  ?person  WHERE  {  ?person  ab:homeTel  

Слайд 95SPARQL процессор
Шаблоны триплетов в запросах часто имеют более чем одну

переменную.
Например, можно перечислить все, что имеется в адресной книге о

Синди с помощью следующего запроса.
В этом запросе переменная ?PropertyName помещена на позицию предиката, а переменная ?PropertyValue - на позицию объекта:

#  filename:  ex010.rq  
PREFIX  ab:  
SELECT  ?propertyName  ?propertyValue
 WHERE  
{  ab:cindy  ?propertyName  ?propertyValue  .  }

SPARQL процессорШаблоны триплетов в запросах часто имеют более чем одну переменную.Например, можно перечислить все, что имеется в

Слайд 96SPARQL процессор
Пункт SELECT запроса спрашивает значения переменных ?propertyName и ?propertyValue,

и ARQ показывает их в виде таблицы со столбцами для

каждого:

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|  propertyName  |    propertyValue                |  
===================================  
|  ab:email             |    "cindym@gmail.com"   |  
|  ab:homeTel       |    "(245)  646-­‐5488"           |  

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

SPARQL процессорПункт SELECT запроса спрашивает значения переменных ?propertyName и ?propertyValue, и ARQ показывает их в виде таблицы

Слайд 97SPARQL процессор
В большинстве данных RDF, субъектам троек не принято выступать

в роли названий понятных для человеческого глаза, как например в

ex002.ttl ab:richard и ab:cindy (имена ресурсов). Они должны играть роль идентификаторов, аналогично значениям уникального ID поля таблицы реляционной базы данных.

Вместо того чтобы хранить чье-то имя, как часть URI субъекта, как наш первый набор данных, более типично для RDF иметь для субъектов значения, которые составляют не удобочитаемый смысл, а выполняют роль уникальных идентификаторов.
В этом случае firstName и lastName будут храниться с использованием отдельных троек, как значения homeTel и email.
SPARQL процессорВ большинстве данных RDF, субъектам троек не принято выступать в роли названий понятных для человеческого глаза,

Слайд 98SPARQL процессор
Другая нереалистичная деталь ex002.ttl состоит в том, что идентификаторы

ресурсов, такие как ab:richard и имена свойств, такие как ab:homeTel,

берутся из одного и того же пространства имен http://learningsparql.com/ns/addressbook#, которое представляет префикс ab.
Словарь имен свойств, как правило, имеет свое собственное пространство имен, чтобы упростить его использование его с другими наборами данных.

Если пересмотреть данный пример, чтобы использовать реалистичные
идентификаторы ресурсов, чтобы сохранить имена и фамилии в качестве значений свойств и поставить значения данных в собственном пространстве имен отдельно от
http://learningsparql.com/ns/data#, получим следующий набор данных:

SPARQL процессорДругая нереалистичная деталь ex002.ttl состоит в том, что идентификаторы ресурсов, такие как ab:richard и имена свойств,

Слайд 99SPARQL процессор
#  filename:  ex012.ttl
@prefix  ab:    .  
@prefix  d:

   .
d:i0432  ab:firstName   "Richard"  .  
d:i0432  ab:lastName    "Mutt"

 .
d:i0432  ab:homeTel     "(229)  276-­‐5135"  .
d:i0432  ab:email    "richard49@hotmail.com"  .
d:i9771  ab:firstName   "Cindy"  .
d:i9771  ab:lastName    "Marshall"  .
d:i9771  ab:homeTel     "(245)  646-­‐5488"  .
d:i9771  ab:email   "cindym@gmail.com"  .
d:i8301  ab:firstName   "Craig"  .
d:i8301  ab:lastName    "Ellis"  .
d:i8301  ab:email    "craigellis@yahoo.com"  .
d:i8301  ab:email    "c.ellis@usairwaysgroup.com"  .
SPARQL процессор#  filename:  ex012.ttl @prefix  ab:    .  @prefix  d:    . d:i0432  ab:firstName   

Слайд 100SPARQL процессор
Запрос, для нахождения адреса электронной почты Крейга будет выглядеть

так:
#  filename:  ex013.rq  
PREFIX  ab:  
SELECT  ?craigEmail  
WHERE
{


 ?person  ab:firstName  "Craig"  .  
 ?person  ab:email  ?craigEmail  .
}
SPARQL процессорЗапрос, для нахождения адреса электронной почты Крейга будет выглядеть так:#  filename:  ex013.rq  PREFIX  ab:   SELECT

Слайд 101SPARQL процессор
Предположим, что процессор SPARQL посмотрел все строки адресной книги

и нашел совпадение в {ab:i8301 ab:firstName "Craig"}.
Это будет связывать

ab: i8301 c переменной ?person, так как обе находятся в субъектной позиции и остальные части
триплетов совпадают.

Для запросов этого типа (ex013.rq, которые имеют более одного триплета), когда процессор находит одно совпадение он переходит к другим триплетам, чтобы найти другие совпадения, с учетом предыдущего.
Так в нашем случае выясняется, что две тройки в ex012.ttl имеющие в качестве субъекта d:i8301, а в качестве предиката ab:email возвратят два значения для переменной ?craigEmail:

SPARQL процессорПредположим, что процессор SPARQL посмотрел все строки адресной книги и нашел совпадение в {ab:i8301 ab:firstName

Слайд 102SPARQL процессор
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|  craigEmail                                                |  
================================  
|  "c.ellis@usairwaysgroup.com"            |  
|  "craigellis@yahoo.com"

                       |

 
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

SPARQL процессор‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐|  craigEmail                                                |  ================================  |  

Слайд 103SPARQL процессор
Множество триплетов записанных между фигурными скобками в запросе SPARQL
называется

графовым шаблоном. Граф в данном случае является техническим термином для

набора RDF троек.
Существуют утилиты набора RDF троек в «графовую картинку», это не относится
к графике в визуальном смысле. В «графовой картинке» RDF, узлы представляют субъект или объект ресурсов, и предикаты соединения между этими узлами.
SPARQL процессорМножество триплетов записанных между фигурными скобками в запросе SPARQLназывается графовым шаблоном. Граф в данном случае является

Слайд 104SPARQL процессор
В ex013.rq запросе переменная ?person использована в двух разных

триплетах, чтобы найти связанные тройки в данных.
В более сложных

запросах, это техника с
использованием переменной для связывания различных троек данных становится все
более распространенной.
В случаях, когда необходимо составление запросов к данным, которые поступают из нескольких источников, эта способность, находить связи
между тройками из различных источников является одним из лучших особенностей SPARQL.
SPARQL процессорВ ex013.rq запросе переменная ?person использована в двух разных триплетах, чтобы найти связанные тройки в данных.

Слайд 105SPARQL процессор
Если бы адресная книга включала не одного абонента по

имени Крейг, причем необходимо найти адреса электронной почты именно Крейг

Эллис, то к шаблону запросу необходимо добавить еще один триплет :

#  filename:  ex015.rq  
PREFIX  ab:  
SELECT  ?craigEmail  
WHERE
{
 ?person  ab:firstName  "Craig"  .  
 ?person  ab:lastName  "Ellis"  .  
 ?person  ab:email  ?craigEmail  .
}

SPARQL процессорЕсли бы адресная книга включала не одного абонента по имени Крейг, причем необходимо найти адреса электронной

Слайд 106SPARQL процессор
Теперь предположим, что телефон показал, что кто-то звонит с

номера телефона "(229) 276-5135".
Для определения имени звонившего используем запрос

ex008.rq, который использовали прежде, но на этот
раз к данным из ex012.ttl. Результат покажет субъект тройки у которой предикат ab:homeTel и объект "(229) 276-5135":

#  filename:  ex008.rq  
PREFIX  ab:  
SELECT  ?person  
WHERE  
{  ?person  ab:homeTel  "(229)  276‐5135"  .  }

SPARQL процессорТеперь предположим, что телефон показал, что кто-то звонит с номера телефона

Слайд 107SPARQL процессор
#  filename:  ex012.ttl
@prefix  ab:    .  
@prefix  d:

   .
d:i0432  ab:firstName   "Richard"  .  
d:i0432  ab:lastName    "Mutt"

 .
d:i0432  ab:homeTel     "(229)  276-­‐5135"  .
d:i0432  ab:email    "richard49@hotmail.com"  .
d:i9771  ab:firstName   "Cindy"  .
d:i9771  ab:lastName    "Marshall"  .
d:i9771  ab:homeTel     "(245)  646-­‐5488"  .
d:i9771  ab:email   "cindym@gmail.com"  .
d:i8301  ab:firstName   "Craig"  .
d:i8301  ab:lastName    "Ellis"  .
d:i8301  ab:email    "craigellis@yahoo.com"  .
d:i8301  ab:email    "c.ellis@usairwaysgroup.com"  .
SPARQL процессор#  filename:  ex012.ttl @prefix  ab:    .  @prefix  d:    . d:i0432  ab:firstName   

Слайд 108SPARQL процессор
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|    person                                                                                 |  
=============================================  
|                   |  
‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

Чтобы получить

имя и фамилию звонившего с этого номера телефона, необходимо сформировать

следующий запрос :
SPARQL процессор‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐|    person                                                                                 |  =============================================  |                   |  ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐Чтобы получить имя и фамилию звонившего с этого номера

Слайд 109SPARQL процессор
#  filename:  ex017.rq  
PREFIX  ab:  
SELECT  ?first  ?last

 
WHERE
{
 ?person  ab:homeTel  "(229)  276‐5135"  .  
 ?person  ab:firstName  ?first

 .
 ?person  ab:lastName  ?last  .
}

ARQ вернет в этом случае то, что необходимо:
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐- 
|   first            |   last               |  
======================  
|  "Richard"   |   "Mutt"         |  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-

SPARQL процессор#  filename:  ex017.rq  PREFIX  ab:   SELECT  ?first  ?last  WHERE {  ?person  ab:homeTel  

Слайд 110SPARQL процессор
Рассмотрим формирование запроса на получение всех сведений о

Синди в данных ex012.ttl:
запросим все предикаты и объекты (хранимые

в переменных ?propertyName и ?propertyValue), связанных с субъектом, который имеет ab:firstName “Cindy” и ab:lastName
“Marshall”:
SPARQL процессорРассмотрим  формирование запроса на получение всех сведений о Синди в данных ex012.ttl: запросим все предикаты

Слайд 111SPARQL процессор
#  filename:  ex019.rq  
PREFIX  a:  
SELECT  ?propertyName  ?propertyValue

 
WHERE  
{
?person   a:firstName    "Cindy"  .  
?person   a:lastName     "Marshall"

 .  
?person   ?propertyName  ?propertyValue  .
}

Обратите внимание, что значения ab:firstName и ab:lastName из файла ex012.ttl
появляются в колонке PropertyValue. Другими словами, они получили связь с переменной
PropertyValue, также как ab:email и ab:homeTel:

SPARQL процессор#  filename:  ex019.rq  PREFIX  a:   SELECT  ?propertyName  ?propertyValue  WHERE  { ?person   a:firstName    

Слайд 112SPARQL процессор
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  
|  propertyName   |  propertyValue                    |  
=====================================
|  a:email

               |  cindym@gmail.com           |
|  a:homeTel          |  "(245)  646-­‐5488"                |
|

 a:lastName         |  "Marshall"                            |
|  a:firstName        |  "Cindy"                                  |  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-
SPARQL процессор-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  |  propertyName   |  propertyValue                    |  ===================================== |  a:email                |  cindym@gmail.com           | |  a:homeTel          |  

Слайд 113Поиск  подстрок
Что делать, если необходимо, проверить часть данных, но

неизвестно, какой субъект или предикат может ее включать?
Следующий запрос

имеет только один триплет
и все три части переменные, так что он будет соответствовать каждой тройки в наборе данных.
Однако, в результате не будут присутствовать все тройки, потому что сюда добавлен FILTER, который инструктирует процессор запросов пройти только вдоль троек,
которые отвечают определенному условию. В этом фильтре, условие задается с помощью регулярных выражений функцией regex(), которая проверяет соответствие строк, определенному в ней шаблону.
Поиск  подстрок Что делать, если необходимо, проверить часть данных, но неизвестно, какой субъект или предикат может ее

Слайд 114Поиск  подстрок
#  filename:  ex021.rq  
PREFIX  ab:  
SELECT  *

 
WHERE
{  
?s  ?p  ?o  .
FILTER  (regex(?o,  "yahoo","i"))
}


Этот вызов функции regex() проверяет, имеет ли объект подстроку "yahoo" в любом месте.

Это общее соглашение SPARQL использовать имя переменной ?s для субъекта, ?p для
предиката, а ?o для объекта.

В этом запросе использована звездочка вместо перечень конкретных переменных в SELECT. Это сокращенный способ сказать "выбрать все переменные, использованные в этом
запросе."

Поиск  подстрок #  filename:  ex021.rq  PREFIX  ab:   SELECT  *  WHERE {  ?s  ?p  ?o  . FILTER

Слайд 115Поиск  подстрок
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­
|   s                                                                               |  p                |  o                                            |  
======================================================================


|     |   ab:email  |   "craigellis@yahoo.com"  |  
-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­
Процессор запросов найдет

единственный триплет, имеющий "yahoo" в значении объекта:
Поиск  подстрок -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­|   s                                                                               |  p                |  o                                            |  ====================================================================== |     |   ab:email  |   

Слайд 116Возможные ошибки
Давайте изменим запрос ex015.rq, запросив кроме адреса электронной почты

Крейга Эллиса также его домашний телефон. (Если просмотреть данные ex012.ttl,

то можно
увидеть, что именно у Крейг его нет.)

# filename: ex023.rq???
PREFIX ab:
SELECT ?craigEmail ?homeTel
WHERE
{???
?person ab:firstName "Craig" .
?person ab:lastName "Ellis" .
?person ab:email ?craigEmail .
?person ab:homeTel ?homeTel .
}

Возможные ошибкиДавайте изменим запрос ex015.rq, запросив кроме адреса электронной почты Крейга Эллиса также его домашний телефон. (Если

Слайд 117Возможные ошибки
Когда  ARQ  применит  этот  запрос  к  данным  ex012.ttl,  результат

 будет включать  заголовки  для  переменных,  но  данные  будут  
отсутствовать:
----------------------------------
|

craigEmail | homeTel |
====================
----------------------------------

Почему? Запрос спросил процессор SPARQL об адресе электронной почты и номере телефона Крэйга Эллис, т.е. поставил задачу найти ресурс, который удовлетворяет
всем четырем условиям, перечисленным в шаблоне графа.
Но такого ресурса не нашлось, поэтому процессор SPARQL не возвращает никаких данных.

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

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика