Обоснование RDFS-Plus для rdfs:domain и range в GraphDB

Рассмотрим два репозитория GraphDB с разными наборами правил рассуждений:

  • Repo A с набором правил RDFS (оптимизированный)
  • Repo B с набором правил RDFS-Plus (оптимизированный)

Я выполнил следующую команду SPARQL INSERT в обоих этих репозиториях:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://www.example.com#>
INSERT DATA { 
    ex:hasPet a owl:ObjectProperty;
        rdfs:domain ex:Human;
        rdfs:range ex:Pet.
    ex:someHuman ex:hasPet ex:somePet. 
}

В обоих репозиториях я ожидаю, что через rdfs:domain и rdfs:range должны быть выведены следующие утверждения класса:

  • ex:someHuman rdf:type ex:Human
  • ex:somePet rdf:type ex:Pet

rdfs:domain и rdfs:range являются свойствами RDFS, поэтому их следует использовать для Repo A. А поскольку RDFS-Plus является расширением RDFS, я подумал, что они также будут включены в Repo B.

Однако эти трипели выводятся только с помощью набора правил RDFS (Repo A). Если я выполню следующий запрос SPARQL, я получу результат только в Repo A и не получу результата в Repo B.

PREFIX ex: <http://www.example.com#>
SELECT ?pet WHERE { 
    ?pet a ex:Pet.
}

Может ли кто-нибудь сказать мне, почему два приведенных выше треугольника выводятся только с набором правил RDFS, но не с набором правил RDFS-Plus?


person Aljosha Koecher    schedule 01.12.2020    source источник
comment
Какая версия? 9,4?   -  person Stanislav Kralin    schedule 01.12.2020
comment
В наборе правил RDFS-Plus нет необходимых правил для получения троек для rdfs:domain. Вы можете посмотреть, какие правила используются в каждом из наборов правил, просмотрев файлы PIE по адресу <gdb-dist>/configs/rules.   -  person Damyan Ognyanov    schedule 01.12.2020
comment
@StanislavKralin Да, v9.4.1.   -  person Aljosha Koecher    schedule 01.12.2020
comment
@DamyanOgnyanov Хорошо, но это намеренно? Я ожидал, что RDFS-Plus будет содержать все правила RDFS и многое другое.   -  person Aljosha Koecher    schedule 01.12.2020
comment
@DamyanOgnyanov это явно нелогично, учитывая, что RDFS Plus в Semantic Web, как известно, имеет все RDFS + некоторые конструкции на основе OWL. Более того, даже в документах GraphDB указано Расширенная версия RDFS с поддержкой также симметричных, инверсных и транзитивных свойств через словарь OWL: — так почему же правило rdfs:domain было опущено? Для меня это либо ошибка, либо вы должны переименовать набор правил.   -  person UninformedUser    schedule 01.12.2020
comment
@UninformedUser согласен, но, если я правильно помню, мотивация для такого изменения возникла после жалоб новых пользователей GraphDB (в основном из мира СУБД) на то, что они ожидают от rdfs:domain и rdfs:range действовать скорее как ограничения, а не получать новые факты, поэтому эти (и некоторые другие правила, относящиеся к спискам rdf) были удалены намеренно...   -  person Damyan Ognyanov    schedule 02.12.2020
comment
хорошо, я понимаю, но, по моему мнению, это должно быть задокументировано. Очевидно, я бы также упомянул, что ни RDFS, ни семантика OWL не касаются ограничений, а логического вывода, известного как следствие. Для ограничения я бы также рекомендовал использовать SHACL или SHeX.   -  person UninformedUser    schedule 02.12.2020
comment
@DamyanOgnyanov Я не могу понять это обоснование. Определение rdfs:domain и rdfs:range, а также влияние на рассуждения стандартизированы W3C. Конечно, это сбивает с толку тех, у кого есть опыт ООП или RDB, но я думаю, что всем нам пришлось пройти через этот процесс обучения. Я думаю, что неправильно изменять или удалять стандартизированные определения только для того, чтобы упростить задачу. И ИМО, это может сделать его еще более запутанным, потому что это изменение в обычном наборе правил RDFS-Plus не задокументировано. ИМО правило должно быть повторно добавлено в набор правил. Если это невозможно, изменение должно быть, по крайней мере, задокументировано.   -  person Aljosha Koecher    schedule 03.12.2020


Ответы (1)


Публикация моего решения в качестве ответа, чтобы тем, у кого возникнет эта проблема в будущем, не пришлось копаться в комментариях выше.

Как указал @DamyanOgnyanov в комментариях к моему вопросу, необходимые правила для вывода типов на основе rdfs:domain и rdfs:range не включены в набор правил GraphDB RDFS-Plus и RDFS-Plus (Optimized). Однако они включены в набор правил RDFS, что противоречит здравому смыслу, поскольку RDFS должна быть основой для RDFS-Plus.

Чтобы сделать набор правил RDFS-Plus правильным расширением набора правил RDFS и получить поддержку rdfs:domain и rdfs:range , я добавил следующие правила RDFS в RDFS-Plus. Файл набора правил можно найти по адресу <your-graphdb-folder>/configs/rules.

    Id: rdfs2

      a b c [Constraint b != <rdf:type>]
      b <rdfs:domain> d
    ------------------------------------
      a <rdf:type> d


    Id: rdfs3

      a b c
      b <rdfs:range> d
    ------------------------------------
      c <rdf:type> d

Кроме того, я также добавил правила с идентификаторами rdfs6, rdfs7, rdfs12, rdfs13 из RDFS в RDFS-Plus.

Я не добавлял правила rdfs5, rdfs9 и rdfs11. Правила rdfs5 и rdfs11 покрываются правилами транзитивных свойств, а rdfs9 покрываются аксиомой и правилами о psys:transitiveOver.

Редактировать: GraphDB не уловил эти изменения, когда я создал новый репозиторий с отредактированным набором правил RDFS-Plus. Мне пришлось выбрать «Загрузить пользовательский набор правил» и загрузить набор правил, который я отредактировал (т. е. набор правил RDFS-Plus, который по-прежнему имеет имя по умолчанию).

person Aljosha Koecher    schedule 07.12.2020