Встраивание пути в параметр sh:lessThan

Связано с этим вопросом (и его предыдущими):

Использование sh:maxExclusive для сравнения (значения) двух свойств типа данных

Я создал небольшую онтологию с тремя классами: DataSubject, MemberState и Minor. Есть два свойства типа данных: has-age и has-minimalage. Первый — от DataSubject(s) к целым числам, второй — от MemberState(s) к целым числам. Затем есть свойство объекта has-member-state от DataSubject(s) до MemberState(s).

Теперь у нас есть следующие лица:

ontology:John
  rdf:type ontology:DataSubject ;
  ontology:has-age "20"^^xsd:positiveInteger ;
  ontology:has-member-state ontology:Spain ;
.
ontology:Spain
  rdf:type ontology:MemberState ;
  ontology:has-minimalage "16"^^xsd:positiveInteger ;
.

И я хочу написать правило SHACL, говорящее, что каждый DataSubject, чей возраст меньше минимального возраста его государства-члена, также является индивидуумом класса Minor.

В свете ответов, которые я получил на другие свои вопросы, я попытался:

  sh:rule [
      rdf:type sh:TripleRule ;
      sh:condition [
        sh:property [
          sh:path ontology:has-age ;
          sh:lessThan (ontology:has-member-state ontology:has-minimalage)
        ] ;
      ] ;
      sh:subject sh:this ;
      sh:predicate rdf:type;
      sh:object ontology:Minor ;
  ] ;

Что не работает: он классифицирует Джона как младшего, но 20 не меньше 16. Конечно, я пробовал много других вариантов, например, sh:lessThan[sh:node[sh:path (онтология: Онтология has-member-state:has-minimalage)];];, многие из которых, вероятно, не имеют никакого смысла, но ни один из них не работает.

Может ли кто-нибудь предложить мне, как встроить путь в параметр sh:lessThan?

Извините, если я начинаю раздражать со всеми этими вопросами :-( Я новичок в SHACL и SPARQL, но я действительно стараюсь изо всех сил выучить их из всего, что я могу найти в Интернете.

Спасибо, Ливио.


person Livio Robaldo    schedule 29.09.2020    source источник
comment
Согласно документу: значения sh:lessThan в форме являются IRI. - поэтому я сомневаюсь, что путь к свойству возможен (могу ошибаться). Но почему вы не пытаетесь использовать ограничение запроса SPARQL, если SHACL слишком сложен или, возможно, ограничен?   -  person UninformedUser    schedule 29.09.2020
comment
Спасибо. Надеюсь есть способ, иначе да, попробую SPARQL. Действительно, я хотел бы использовать только SHACL, если это возможно.   -  person Livio Robaldo    schedule 29.09.2020


Ответы (1)


Официальная спецификация (надеюсь) довольно ясна, что значения должны быть IRI, т.е. разрешены только прямые свойства. Однако вы можете попытаться изменить логику и использовать путь в форме свойства. В противном случае вернитесь к SPARQL.

person Holger Knublauch    schedule 29.09.2020
comment
Благодарю вас! Да, спецификация ясна. Мне было интересно, есть ли способ указать путь в IRI. Но я так понял нет. Возможно, идея для следующих версий SHACL :-) Еще раз большое спасибо за все ваши добрые ответы! Ливио - person Livio Robaldo; 30.09.2020