Орден предикатов не сохраняется с Apache Jena RDF

Когда я пытаюсь восстановить более 9 объектов свойств с помощью API Apache Jena, порядок добавления не сохраняется. Может кто-нибудь объяснить причину и как я могу это исправить?

1 ответ

Хотя вопрос очень старый, это повторяющаяся проблема: единственный способ поддерживать порядок в наборе троек - это переопределить тройки и ввести явное свойство для кодирования последовательности. Итак, вместо того, чтобы делать

      :my :first :triple.
:my :other :triple.

ты можешь сделать

      :s1 rdfs:subject :my; rdfs:predicate :first; rdfs:object :triple.
:s2 rdfs:subject :my; rdfs:predicate :other; rdfs:object :triple.
:s1 my:next :s2.

Или более компактный (но и менее читаемый):

      [ rdfs:subject :my; rdfs:predicate :first; rdfs:object :triple;
  my:next
  [ rdfs:subject :my; rdfs:predicate :other; rdfs:object :triple ] ]

Реальная беда начинается , если вы успешно закодировать последовательность , но затем, вы не в состоянии поддерживать его в совокупности. Нет надежного обходного пути.

Следующее может работать, а может и не работать. Никаких гарантий, и в зависимости от вашего оптимизатора запросов он может завершиться неудачно ... и это будет в соответствии с семантикой SPARQL.

      SELECT ?preds
WHERE {
  ?first my:next [].
  MINUS { [] my:next ?first }
  # we establish that ?first is the first in a series of statements
  { SELECT ?first (GROUP_CONCAT(?pred; separator="/") as ?preds)
    WHERE { 
      ?first my:next*/rdfs:predicate ?p.
      BIND(str(?p) as ?pred)
    } GROUP BY ?first
  }
}

Наивное ожидание состоит в том, что порядок появления в? Preds сохраняется. Это не гарантируется.

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