Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МУ ПЗ

.pdf
Скачиваний:
17
Добавлен:
09.02.2015
Размер:
1.02 Mб
Скачать

Если необходимо найти имена, фамилии и возраст всех студентов, можно использовать следующий запрос:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname ?age

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname. ?x tutorial:возраст ?age.

}

Однако свойство «возраст» может быть заполнено не у каждого экземпляра класса «Студент». Поэтому при выполнении приведенного запроса будут выведены данные только по тем студентам, у которых все указанные свойства (в том числе и возраст) заполнены. Данные по экземплярам с незаполненным свойством «возраст» в результат не попадут, так как незаполненность свойства означает отсутствие соответствующий тройки в RDF, и шаблон ?x tutorial:возраст ?age не сработает.

ВSPARQL существует способ задавать ограничения на необязательные свойства и при этом получать в результате данные, в том числе, и по тем объектам, у которых эти свойства не заполнены. Для этого используется секция OPTIONAL:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname ?age

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname. OPTIONAL { ?x tutorial:возраст ?age }

}

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

Всекции OPTIONAL можно использовать фильтры, например:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname ?age

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname. OPTIONAL {

?x tutorial:возраст ?age. FILTER (?age > 20)

}

}

Модификаторы результата

ORDER BY - позволяет упорядочить результаты по определенному полю. Например, для вывода отсортированного по полю «фамилия» списка имен и фамилий всех студентов можно использовать следующий запрос:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

51

?x tutorial:фамилия ?surname.

}

ORDER BY ?surname

Для обратного порядка используется ключевое слово DESC:

ORDER BY DESC(?surname)

Допускается указывать несколько полей в секции ORDER BY. Например, для вывода списка имен и фамилий всех студентов, отсортированного по полю «фамилия» а для студентов с одинаковыми фамилиями – по поля «имя», используется следующий запрос:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname.

}

ORDER BY ?surname ?name

OFFSET/LIMIT - пара модификаторов, ограничивающая количество результатов. Имеет смысл использовать только совместно с ORDER BY. OFFSET задает количество результатов, которые нужно пропустить. LIMIT задает максимальное количество результатов. Например, для вывода из отсортированного по фамилии списка студентов позиций с 10 по 30 включительно используется следующий запрос:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT ?name ?surname

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname.

}

ORDER BY ?surname OFFSET 9

LIMIT 21

DISTINCT - исключает дублирующиеся результаты. Например, для вывода списка различных имен и фамилий студентов (в нем не может быть две записи «Иван Петров») используется следующий запрос:

PREFIX tutorial: <http://www.eltech.ru/semweb/tutorial.owl#> SELECT DISTINCT ?name ?surname

WHERE {

?x a tutorial:Студент. ?x tutorial:имя ?name.

?x tutorial:фамилия ?surname.

}

Типы запросов

В SPARQL поддерживаются несколько форматов результата запроса:

SELECT - возвращает результат в виде набора значений для запрашиваемых переменных.

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

DESCRIBE - как и CONSTRUCT возвращает результат в виде RDF-графа, однако форма графа определяется настройками движка SPARQL-запросов.

52

ASK - возвращает булево значение: ИСТИНА, если в результате выполнения запроса нашлись какие-то данные, ЛОЖЬ, если после выполнения запроса не было найдено ни одного значения.

Пример(ы)

Предметная область: семья.

1. Какие дети есть у Ben?

PREFIX f: <http://www.owl-ontologies.com/family.owl#> SELECT ?children

WHERE { f:Ben f:parent ?children }

Ответ:

Tom

Jane

2. Какие родители есть у Ben?

PREFIX f: <http://www.owl-ontologies.com/family.owl#> SELECT ?parents

WHERE { ?parents f:parent f:Ben }

Ответ:

Mary

3. Какие внуки (и внучки) есть у Mary?

PREFIX f: <http://www.owl-ontologies.com/family.owl#> SELECT ?grandchildren

WHERE { f:Mary

f:parent ?x.

?x

f:parent ?grandchildren. }

Ответ:

 

Tom

 

Jane

 

Примечания:

1)?children, ?parents и ?grandchildren - переменные, заменяемые на конкретные значения при поиске в онтологии. Они же являются названиями соответствующих столбцов в выводимой в конце поиска таблице результатов.

2)?x - промежуточная переменная, используемая в сложных (многострочных) SPARQL-

запросах.

Выводы: В ходе практического занятия были получены практические навыки составления запросов для извлечения явных знаний из онтологии на языке SPARQL.

53

8. Составление SWRL-правил для логического вывода неявных знаний из онтологии

Цель работы: Получение практических навыков составления правил логического вывода на языке SWRL к онтологии.

Исходные положения

Пример SWRL-правила с OWL-ограничениями

(hasChild >= 1)(?x)

Parent(?x)

Пример SWRL-правила с выведенными OWL-ограничениями

Parent(?x)

(hasChild >= 1)(?x)

SWRL и Семантики Открытых Миров: sameAs, differentFrom

Publication(?p) & hasAuthor(?p, ?y)

& hasAuthor(?p, ?z) & differentFrom(?y, ?z) cooperatedWith(?y, ? z)

SWRL является монотонным: не поддерживает Атомы с отрицанием SWRL не поддерживает отрицаний - следующее правило невозможно:

Person(?p) & not hasCar(?p, ?c) CarlessPerson(?p)

Потенциальное нарушение корректности: что если человек приобретет машину позже?

SWRL является монотонным: удаления (или модификации) не поддерживаются

Person(?p) & hasAge(?p,?age) &

swrlb:add(?newage,?age,1)

hasAge(?p, ?newage)

SWRL является монотонным: удаления (или модификации) не поддерживаются - 2

Person(?p) & hasAge(?p,?age) &

swrlb:add(?newage, ?age,1)

hasAge(?p, ?newage)

Некорректно: будет выполняться все время и пытаться присвоить бесконечное число значений свойству hasAge

Потенциальное нарушение корректности: существенные попытки удаления.

SWRL является монотонным: не поддерживается подсчет

Publication(?p) & hasAuthor(?p, ?a) &

< hasAuthor имеет точно одно значение в текущей онтологии>

SingleAuthorPublication(?p)

Не выразимо: применяется открытый мир Потенциальное нарушение корректности: что если автор добавляется позднее?

SWRL является монотонным: не поддерживается подсчет - 2

Publication(?p) & (hasAuthor = 1)(?p) SingleAuthorPublication(?p)

Замыкание лучше выразимо в OWL.

54

Семантика SWRL

Основана на OWL-DL;

Имеет формальную семантику;

Дополняет OWL и полностью семантически совместима; Более выразительна (ценой разрешимости!);

Если повышенная выразительность не требуется, используется OWL (возможное исключение: запросы).

SWRL и запросы SWRL является языком правил, а не языком запросов;

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

С использованием расширений (built-ins), возможно дополнение языка запросами.

Пример SWRL-запроса

Person(?p) & hasAge(?p,?age) &

swrlb:greaterThan(?age,17) query:select(?p, ?age)

Упорядочение Результатов Запроса

Person(?p) & hasAge(?p,?age) &

swrlb:greaterThan(?age,17)

query:select(?p, ?age) & query:orderBy(?age)

Counting Query Results

Person(?p) & hasCar(?p, ?car)

query:select(?p) & query:count(?car)

Не существует способа установить подсчет в онтологии

Подсчет в онтологии всех автомобилей, имеющих владельцев

Person(?p) & hasCar(?p, ?c) query:count(?c)

Подсчет всех автомобилей в онтологии

Car(?c) query:count(?c)

Агрегирование Запросов: средний возраст людей в онтологии

Person(?p) & hasAge(?p, ?age) query:avg(?age)

Также могут использоваться: query:max, query:min, query:sum.

Запросы и правила могут взаимодействовать

Person(?p) &

hasAge(?p, ?age) &

 

 

swrlb:greaterThan(?age, 17)

Adult(?p)

Adult(?a)

 

query:select(?a)

 

 

 

Пример SWRL-запроса с OWL-ограничением

(hasChild >=

1)(?x)

query:select(?x)

 

55

Все вставки (Built-ins) могут использоваться в запросах tbox:isDirectSubClassOf(?subClass, Person)

query:select(?subClass)

tbox:isSubPropertyOf(?supProperty, hasName) query:select(?subProperty)

Замечание: Использование имен свойств и классов как аргументов вставок вне OWL DL.

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

Пример(ы)

Предметная область: семья.

1. Определение понятия «отец»: если ?x является мужчиной и он же является родителем ?y, то ?x - отец ?y:

type (?x, Man) parent (?x, ?y) → father (?x, ?y)

Результат работы логического вывода (найденные неявные знания): father (Ben, Tom)

father (Ben, Jane)

2. Определение понятия «брат»: если ?x является мужчиной, у него есть родитель ?z, у другого человека ?y также есть родитель ?z, при этом ?x и ?y - разные люди, то ?x - брат ?y:

type (?x, Man) parent (?z, ?x) parent (?z, ?y) swrlb:notEqual(?x, ?y) → brother (?x, ?y)

Результат работы логического вывода (найденные неявные знания): brother (Tom, Jane)

Примечание: ?x, ?y и ?z - переменные, заменяемые на конкретные значения при поиске в базе знаний в ходе логического вывода.

Выводы: В ходе практического занятия были получены практические навыки составления правил логического вывода на языке SWRL к онтологии.

56