Практическое использование (и повторное использование) положения КОНСТРУКТА

При использовании CONSTRUCT в запросе sparql вывод представляет собой один график RDF, а также набор троек, которые по существу новые данные, Но в целом я считал, что CONSTRUCT является способом ручного создания правила, которое теоретически должно быть повторно использовано.

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

@prefix : <http: some.site.com="" ont#=""> .
:jane :hasParent :gene .
:gene :hasParent :pat ;
 :gender :female .
:joan :hasParent :pat ;
 :gender :female . 
:pat :gender :male .
:mike :hasParent :joan .
</http:>

"Следующий оператор CONSTRUCT создает новые троек, основанные на приведенных выше, чтобы указать, кто является дедом:"

PREFIX : <http: some.site.com="" ont#="">
CONSTRUCT { ?p :hasGrandfather ?g . }
WHERE {?p :hasParent ?parent .
 ?parent :hasParent ?g .
 ?g :gender :male .
}
</http:>

и результат:

@prefix : <http: some.site.com="" ont#=""> .
:jane :hasGrandfather :pat .
:mike :hasGrandfather :pat .
</http:>

Как только я сгенерировал новые тройки в результате запросов CONSTRUCT, означает ли это, что я должен взять эти данные и ввести их обратно в базу данных, чтобы начать использовать/повторно использовать :hasGrandfather? или я могу ссылаться на полученный RDF-график, как если бы я ссылался на динамическую таблицу в SQL?

Существуют ли другие полезные способы взаимодействия с тройками, которые генерируются в результате использования CONSTRUCT?

2 ответа

Если вы используете SPARQL 1.1, и вы запрашиваете трипестор, вы обычно используете INSERT для добавления этих троек в хранилище (на один и тот же график или на другой график). Взгляните на раздел 3.1 из Обновление SPARQL 1.1:

<h3> <a href="http://www.w3.org/TR/2013/REC-sparql11-update-20130321/#graphUpdate" rel="nofollow noreferrer" target="_blank">3.1 Обновление графика</a></h3>

Операции с графическим обновлением изменяют существующие графики в Graph Store, но явно не удалять и не создавать их. Непустые вкладыши в Однако несуществующие графики будут, однако, неявно создавать эти графики, то есть реализация, выполняющая запрос на обновление, должна молча автоматически создавать графики, которые не существуют до того, как троек вставлен в них и должен вернуться с ошибкой, если он не сделает этого по любой причине. (Например, реализация может быть недостаточной ресурсы или реализация могут предоставлять услугу обновления над фиксированным набором графов и неявно созданный граф не в пределах этого фиксированного набора). Реализация может удалить графики, которые оставлены пустыми после удаления троек.

SPARQL 1.1 Update предоставляет эти операции обновления графа:...

<ul> <li> Фундаментальные действия, основанные на шаблонах для обновления графа, - INSERT и DELETE (которые могут происходить в одной операции DELETE/INSERT). Эти действия состоят из групп троек, подлежащих удалению, и групп троек для добавления. Спецификация троек основана на шаблоны запросов. Разница между INSERT/DELETE и INSERT DATA /DELETE DATA: данные INSERT DATA и DELETE DATA не заменяют привязки в шаблон из шаблона. Формы DATA требуют конкретные данные (тройные шаблоны, содержащие переменные в DELETE Операции DATA и INSERT DATA запрещены, а пустые узлы запрещенные в DELETE DATA, см. примечания 8 + 9 в грамматике). имеющий конкретные операции для конкретных данных означают, что запрос может быть потоковое, чтобы можно было выполнить большие чистые обновления.</li> </ul>

Позже в том же документе:

<h3> Пример 8:</h3>

В этом примере копируются трижды из одного названного графика в другой график на основе шаблона:

<pre class="prettyprint linenums">PREFIX dc: <http: purl.org="" dc="" elements="" 1.1=""> PREFIX xsd: <http: 2001="" www.w3.org="" xmlschema#=""> INSERT { GRAPH <http: example="" bookstore2=""> { ?book ?p ?v } } WHERE { GRAPH <http: example="" bookstore=""> { ?book dc:date ?date . FILTER ( ?date > "1970-01-01T00:00:00-02:00"^^xsd:dateTime ) ?book ?p ?v } } </http:></http:></http:></http:></pre>


Чтобы дополнить Joshua answer, поскольку вы, похоже, используете конструктивные запросы для написания правил, вы можете подумать об использовании или, по крайней мере, взглянуть на OWL и использовать базу данных, которая поддерживает рассуждения (их несколько). Некоторые базы данных, поддерживающие OWL, также будут поддерживать правила SWRL, поэтому вы можете использовать оба.

Если вы хотите придерживаться правил, но предпочитаете SPARQL, Stardog имеет синтаксис на основе SPARQL для SWRL; они все еще являются правилами SWRL, но с приятным синтаксисом. Там также SPIN, который, хотя и не является стандартом, основан на SPARQL и подобен правилам, но не является формальным стандартом.

licensed under cc by-sa 3.0 with attribution.