ko444evnik (ko444evnik) wrote,
ko444evnik
ko444evnik

Categories:

k4SparqlTrainer

Программка k4SparqlTrainer - написана в целях самообучения себя языку SPARQL и тестирования возможностей библиотеки DotNetRdf.

Представляет собой среду для исполнения примеров, приведенных в нормативном документе "SPARQL Query Language for RDF" ( и его русском переводе ).

Скачать архив с программой (1 Мб).

Инструкция по установке:
1. скачать
2. разархивировать
3. запустить setup.exe
4. ежели инсталлятор не обнаружит в системе необходимых компонентов - он попытается выкачать их микрософтовского сайта. следует позволить ему это сделать ( обычно это все происходит быстро, но если не повезет - может провозится и минут 25-30...)
5. на запрос "следует ли доверять безымянному производителю" - то есть мне - ответить утвердительно.
6. программка установится в каталог, который будет назначен системой и добавится в виндовское application menu.
7. удалить ее можно через стандартное add/remove program.

написана на C# под .NET 4.0.
текущая версия использует NET Client profile 4.0.
технология установщика 'Click Once'.

версия 1.0.0.0. выложена 2012-08-19.
версия 1.0.0.2. выложена 2012-09-11.

Краткий ликбез по концепциям.

Что такое RDF
Resource Description Framework - цитируя википедию, это "разработанная консорциумом Всемирной паутины модель для представления данных". "Множество RDF-утверждений образует ориентированный граф, в котором вершинами являются субъекты и объекты, а рёбра помечены предикатами."

Конструкционно - пара вершин и ребро - составляют 'трипл'. Список триплов составляет 'граф'. Граф может лежать в отдельном файлике, может быть вшит в xhtml-старничку, может лежать совместно с другими в высшей единице - 'хранилище' ('store') различного типа.


На "бытовом уровне" это означает, что текстовые данные вида :
"Мама мыла раму. Папа мыл машину. Рама цвета белого. Машина цвета красного..."

...можно зафиксировать примерно в такой форме ( использована turtle-нотация, как наиболее гуманная ):
@prefix x: <http://www.ko4evnik.su/entity#>.
@prefix y: <http://www.ko4evnik.su/action#>.
@prefix z: <http://www.ko4evnik.su/property#>.

x:мама y:мыла x:рама.
x:папа y:мыл x:машина.

x:рама z:цвет z:белый.
x:машина z:цвет z:красный.


Что такое SPARQL:
"Язык запросов к данным, представленным по модели RDF, а также протокол для передачи этих запросов и ответов на них".

Так как графы и хранилища собственно и являются 'графами c математической точки зрения'.
то запросы к ним в общем случае является поиском вложения другого, более мелкого графа.

Имеются четыре формы запроса - в порядке усложнения получаемой информации:
1) ASK : получает ответ типа да/нет о факте наличии вложения;
2) SELECT : получает список отдельных комбинаций вершин удовлетворяющих запросу;
3) CONSTRUCT : создает из найденных вершин по заданному шаблону выходной граф;
4) DESCRIBE : создает граф='описатель ресурса' - т.е. собирает в одном месте всю релевентную информацию по какой-то вершине.

Плюс к ним, на уровне хранилища доступен UPDATE - для сохранения вновь созданных графов и модификации существующих.

Инструкция по применению.

При запуске появится окошко подобного вида (для версии программы 1.0.0.0):



Справа - во вкладке 'RDF Data' - следует помещать исходные rdf-данные (в самой программе для простоты используется лишь формат Turtle. Сохранять их можно еще в нескольких разных вариантах посредством нажатия '[Save Graph]'. И из этих же форматов - загружать через '[Load Graph]' - но они в любом случае будут приводиться и показываться в нотации Turtle).

Слева - во вкладке 'Sparql Query' - следует писать запрос. Запускать его на исполнение можно кнопкой 'run query'. (вкладок с заросами можно сделать несколько, с помощью кнопки '[New SparqlQuery]')

Результат исполнения (или ошибки) будут появляться во вкладке 'Result'.

Для того чтоб сразу было над чем начать эксперименты - можно нажатием на кнопку '[Basic Sample]' поместить в зоны данных и запроса - пример 'Мама мыла раму'.

Если нажать на кнопку '[Load all samples]' (картинка для версии программы 1.0.0.0) ...



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

Примеры из главы 8 (в которой требовалось иметь хранилище из нескольких отдельных графов) пришлось несколько адаптирвать. Данные из примеров расщепляются программой по строкам вида "#<--- [k4]Split --->", а имя соответствущего графа извлекается из строки вида "#[k4]NamedGraph: http://example.org/foaf/bobFoaf"

Если нажать на кнопку '[Endpoint]'...
(картинка для версии программы 1.0.0.2)


...можно попытаться сделать запрос к "удаленной точке, содержащей RDF-данные". По умолчанию используется сайт проекта DBPedia ( http://dbpedia.org ), который предоставляет данные, извлеченные из Википедии. Запрос по умолчанию - извлекает данные по первой попавшейся персоне ( 70 кб взаимосвязей, описывающих Аристотеля ... ).

Кнопочка '[FolderStore]' ( аналогичного рода обращение к хранилищу вида "папочка-на-диске" ) в текущей версии нефункциональна. При использовании версии библиотеки DotNetRdf 0.5.1, подобная функциональность, исполненная по лекалам из ее документации, оказалась неработоспособной. А в версии 0.7.1 оказалась и вовсе помечена "устаревшей" и выпилена...


P.S. Несколько расширенный пример "Мама мыла раму..."
# строка после символа решетки является комментарием...

# стандартные пространства имен
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

# наши и не только наши пространства имен
@prefix x: <http://www.ko4evnik.su/entity#>.
@prefix y: <http://www.ko4evnik.su/action#>.
@prefix z: <http://www.ko4evnik.su/property#>.

@prefix l: <http://www.ko4evnik.su/lingva#>.

# rdf-триплеты = "субъект - предикат - объект";
# cубъект и объект - вершины(узлы,node) в графе,
# предикат - ребро между ними.

x:папа y:мыл x:машина.
x:машина z:цвет z:красный.

# способ комбинирования нескольких триплетов в единое компактное описание:
x:мама y:мыла x:рама;
y:варила x:борщ,
x:каша,
x:компот.

x:рама z:цвет z:белый.

#безымянный субъект - способ описания частично известных данных
_: y:мыл x:чашка.
_: y:мыл x:стакан.

x:чашка z:цвет z:синий.
x:стакан z:свойство_материала z:прозрачный.

# предикат сам по себе может ссылаться на сущность,
# в свою очередь являющуюся узлом:
y:мыть l:имеет_грамматическую_форму y:мыла.
y:мыть l:имеет_грамматическую_форму y:мыл.

y:варить l:имеет_грамматическую_форму y:варила.

# литералы в качестве объекта:
x:машина y:имеет_номерной_знак "xy 15926 eu".
x:машина y:количество_колес 4.


и некоторые SPARQL-запросы, которые можно к нему обращать:

Запрос "кто и над чем производит действие, которое описывается формой глагола 'мыть' "?
prefix x: <http://www.ko4evnik.su/entity#>
prefix y: <http://www.ko4evnik.su/action#>
prefix z: <http://www.ko4evnik.su/property#>

prefix l: <http://www.ko4evnik.su/lingva#>

select ?кто ?что
where{
?кто ?действие ?что.
y:мыть l:имеет_грамматическую_форму ?действие.
}


ответ:

последние две пары результатов - результат назначения условного имени для идентификации "неименованных узлов".

запрос "какие в тексте упомянуты цвета"?
@prefix x: <http://www.ko4evnik.su/entity#>.
@prefix y: <http://www.ko4evnik.su/action#>.
@prefix z: <http://www.ko4evnik.su/property#>.

select ?имя_цвета
where{
?кто z:цвет ?имя_цвета.
}


ответ:



запрос : "что на обед варила мама"?
@prefix x: <http://www.ko4evnik.su/entity#>.
@prefix y: <http://www.ko4evnik.su/action#>.
@prefix z: <http://www.ko4evnik.su/property#>.

select ?еда
where{
x:мама y:варила ?еда.
}

ответ:

Tags: .net, .wpf, c#, rdf, sparql, пример-кода, программизм
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments