Как использовать CONSTRUCT / WHERE в объявлении правила SPARQL SPIN
Резюме
Заранее благодарим за помощь в написании инструкции CONSTRUCT/WHERE, которую можно объявить как правило SPIN в бесплатной редакции TopBraid Composer и использовать.
Я пытаюсь встроить оператор SPARQL CONSTRUCT/WHERE в spin:rule
декларации, а затем выполнить его. Я возвращаю нулевые выводы к утверждениям 1 или 2 ниже. Я использую Java 7, Eclipse 4.3. И TopBraid Composer Free Edition. Я успешно запустил Оператор 3 в качестве декларации конструктора SPIN в форме классов (Оператор 3). Я успешно выполнил Заявление 4 в редакторе запросов SPARQL (интерпретаторе), который я перекрестно разместил на форуме пользователя.
подробности
Факт 1: я не смог запустить Утверждение 1 как правило SPIN.
---- Заявление 1---
CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
BIND (spif:generateUUID() AS ?x) .
}
Факт 2: я не смог запустить Заявление 2 как правило SPIN.
---- Заявление 2----
CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
?this rdfs:subClassOf node:entity .
BIND (spif:generateUUID() AS ?x) .
}
--No Error Message--
Факт 3: Однако я успешно справился с Утверждением 3 в поле конструктора формы классов.
---- Заявление 3----
CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
BIND (spif:generateUUID() AS ?x) .
}
Success: When a new instance is created a new triple indicating a key is created.
Факт 4: Я успешно выполнил заявление 4 в редакторе запросов SPARQL, которое аналогично.
---- Заявление 4----
CONSTRUCT {
?s owl:hasKey ?x .
}
WHERE {
?s rdf:type node:word_use
BIND (spif:generateUUID() AS ?x) .
}
Success: When statement is run all current instances get keys.
Факт 5: У меня нет библиотек правил SPARQL, проверенных в форме профиля онтологии.
Факт 6: я импортировал следующие две библиотеки.
<http://spinrdf.org/spin> from local file TopBraid/SPIN/spin.ttl.
<http://spinrdf.org/sp> from local file TopBraid/SPIN/sp.ttl
Факт 7: пространства имен в файле:
Base URI (Location) - http://example.org/
Default Namespace - http://example.org/
But the Base URI keeps getting reset to:
http://www.semanticweb.org/owl/owlapi/turtle
ace_lexicon - http://attempto.ifi.uzh.ch/ace_lexicon#
arc - http://example.org/arc#
arg - http://spinrdf.org/arg#
concept - http://example.org/concept#
node - http://www.example.org/node#
owl - http://www.w3.org/2002/07/owl#
rdf - http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs - http://www.w3.org/2001/01/rdf-schema#
skos - http://www.w3.org/2004/02/skos/core#
sp - http://spinrdf.org/sp#
spif - http://spinrdf.org/spif#
spin - http://spinrdf.org/spin#
spl - http://spinrdf.org/spl#
word_sense - http://example.org/word_sense#
word_term - http://example.org/word_term#
word_use - http://example.org/word_use#
Факт 8: класс, который я использую, имеет следующие утверждения.
Name - node:unclassified_concept
SubClassOf - node:entity
Факт 9: экземпляр класса node:unclassified_concept описан ниже.
URI - http://example.org/concept#regardless_of1
rdfs:comment - without attention to
rdfs:isDefinedBy - <http://en.wiktionary.org/wiki/regardless_of>
rdfs:label - regardless of
Факт 10: Я успешно использовал рассуждения Общих Правил Jena, а также OWL_MEM_RULE_INF OntModelSpec, чтение / запись, базовые модели, модели inf и ont модели.
контекст
Контекст моей проблемы заключается в следующем. Я строю и итеративно выполняю онтологию и набор правил, используя Java и Jena, чтобы доказать концепцию OWL/RDF, представляющую, рассматривающую и отвечающую на нетривиальный машинописный английский. Я использую предложение нетривиально (41 слово, три предложения и т. Д.). Текущая онтология имеет 1422 утверждений, если они не работают против каких-либо правил OWL/RDF (транзитивность и т. Д.). Я использую TopBraid Composer, когда это возможно, чтобы дополнить программирование Jena, чтобы убедиться, что я соблюдаю соглашения и стандарты.
1 ответ
Этот пост обрисовывает в общих чертах решение проблемы, которую я отправил. Я смог прийти к этому решению через человека, который отвечает на их пользовательский форум. https://groups.google.com/forum/
Оператор CONSTRUCT/WHERE (после пересмотра), который я хотел выполнить, был:
CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
?this rdf:type node:unclassified_concept .
BIND (spif:generateUUID() AS ?x) .
}
Однако, если бы я поместил это утверждение в поле spin:rule формы классов в TBC и нажал значок для вывода, я бы не получил никаких выводов, а выводщик потратил бы много времени.
Решение состояло в том, чтобы создать дочернее свойство spin:rule, для которого spin:rulePropertyMaxIterationCount установлено в 1 (чтобы избежать бесконечных циклов, генерируемых при запуске встроенной функции - в моем случае spin:generateUUID().)
Затем мне нужно было "вытащить" или поместить это новое свойство, которое я назвал "runOnce", в форму классов, для которой я пытался создать правило CONSTRUCT/WHERE, зависящее от встроенного.
Наконец, в форме классов мне нужно было выбрать добавить пустую строку в новом подпроцессе RunOnce, а затем ввести свой исходный оператор CONSTRUCT/WHERE.
Затем я сделал вывод, и класс использовал правило.
Короче говоря, если вы хотите встроить правило в класс в TBC, и это правило использует встроенную функцию, вам необходимо
-Create a subproperty of spin:rule that has rulePropertyMaxIterationCount
set to 1.
-Include this subproperty in the classes form.
-Embed your CONSTRUCT/WHERE statement that uses the built-in within that
subproperty on the classes form by selecting insert blank line and
copying/pasting it in there.
Обратите внимание, что поддерживаемые TBC встроенные функции SPIN - это меньший набор, чем я полагаю, в документации по SPIN API. Список встроенных модулей, поддерживаемых TBC, находится здесь, в продукте TBC.
Help>
Help Contents>
TopBraid Composer>
Application Development Tools>
SPARQL Motion Scripts>
SPARQL Motion Functions Reference
Надеюсь, это кому-нибудь поможет.