Как использовать 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

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам