Пользовательская конструкция SPARQL с перечислением

Можно ли выполнить конструкцию SPARQL при добавлении информации, выходящей за рамки запроса? например, я хочу выполнить конструкцию SPARQL при определении перечисляемой информации следующим образом:

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
construct {
   ?s a skos:Concept
   ?s ex:index <enumeration starting from 1 -- this is just a sample>
}
where {
   ?s a skos:Concept
}

можно ли сделать что-то подобное с чистым SPARQL? какие есть альтернативы?

* Дополнительная информация *

Вероятно, мне не ясно объяснили мою проблему, поэтому в основном я хочу добиться следующего (при условии, что ex: index является допустимым datatypeProperty):

== Исходные тройки RDF ==

@prefix skos:<http://www.w3.org/2004/02/skos/core#>
@prefix ex: <http://example.org/> .

ex:abc rdf:type skos:Concept .
ex:def rdf:type skos:Concept .
...
ex:endOfSample rdf:type skos:Concept .

== RDF утраивается после выполнения обновления SPARQL ==

@prefix skos:<http://www.w3.org/2004/02/skos/core#>
@prefix ex: <http://example.org/> .

ex:abc rdf:type skos:Concept ;
    ex:index 1 .
ex:def rdf:type skos:Concept ;
    ex:index 2 .
...
ex:endOfSample rdf:type skos:Concept ;
    ex:index <endOfSampleNumber> .

person FJE    schedule 23.03.2016    source источник
comment
Что вы используете для обработки SPARQL? Так как SPARQL является декларативным, такое перечисление невозможно только с помощью языка запросов. Вы можете перебрать данные и отправить запрос на обновление, чтобы добавить упорядоченные номера (по каким критериям?). OTOH, поскольку SPARQL является декларативным, перечисление данных обычно не требуется. Возможно, сделать шаг назад и описать, каковы требования более высокого уровня?   -  person scotthenninger    schedule 28.03.2016
comment
@scottheninger Как вы сказали, кажется, что чистый SPARQL не может иметь этот порядок. Я решаю проблему по вашему предложению, обрабатываю результат запроса с помощью Jena и добавляю ex: index при повторении результата запроса.   -  person FJE    schedule 29.03.2016


Ответы (1)


Вы можете построить любое допустимое значение RDF в CONSTRUCT. Однако запрос завершится ошибкой, если какая-либо переменная в шаблоне графа CONSTRUCT будет несвязана после выполнения графа WHERE. т.е. в вашем запросе не может быть привязки для ?p, и CONSTRUCT никогда не будет выполняться.

Это пример, с которого вы должны начать:

PREFIX skos:<http://www.w3.org/2004/02/skos/core#>
PREFIX ex:<http://example.org/construct#>
construct {
  ex:someProp a owl:ObjectProperty .
  ?s ex:someProp (1 2 3)
}
where {
  ?s a skos:Concept
}

Это приведет к построению семи троек для значения свойства и структуры списка.

Ex:someProp добавлен, потому что в SKOS нет подходящего свойства объекта для специальных списков. Было бы лучше определить свойство с некоторым семантическим значением. Также обратите внимание, что хотя тройка {ex:someProp a owl:ObjectProperty} будет утверждаться для каждого совпадения {?s a skos:Concept}, это одна и та же тройка, поэтому в конце будет только одна. Цена — это эффективность, поэтому утверждение свойства за пределами этого запроса было бы лучшим выбором — оно включено в приведенный выше запрос для полноты примера.

person scotthenninger    schedule 23.03.2016
comment
Привет, кажется, я не ясно объясняю свой вопрос. Я надеюсь, что добавленная информация внесет некоторый контекст в мой вопрос. Спасибо! - person FJE; 24.03.2016