Логика описания и онтологии: как обозначить ролевые доменные ограничения для пустых узлов

Запрос о помощи, обозначающий ограничение домена пустым узлом. Моделирование таблицы Рис. 1. Моделирование отношение "многие ко многим" с пустым узлом.

Бизнес-правило: зачисление привязывает одного учащегося к одной секции один раз.

Моя попытка:

∃hasStudent.⊤ ≡ ∃hasSection.⊤ ≡ ∃grade_code.⊤ 

i.e. "the set of individuals that have some value for the role 'hasStudent' is the same set of individuals that have some value for the role 'hasSection' ...e.t.c."

Я предполагаю здесь эквивалентность вместо включения, поскольку включения будут в обоих направлениях.

Дополнительные ограничения:

∃hasStudent.⊤ ≡ ∃hasSection.⊤ ≡ ∃grade_code.⊤ ≡ =1hasStudent.⊤ ≡ =1hasSection.⊤ ≡ =1grade_code.⊤

i.e. "the set of individuals that have values for the roles 'hasStudent', 'hasSection' and 'grade_code', have one and only one value for them."

Будем признательны за помощь или комментарии по правильному обозначению доменных ограничений свойств объекта на рисунке 1.

Спасибо!!


person JohnG79    schedule 10.02.2016    source источник


Ответы (2)


Предположение OWL об открытом мире не позволит вам найти «набор лиц, которые имеют значения для ролей «hasStudent», «hasSection» и «grade_code», имеют для них одно и только одно значение».

Однако, используя SPARQL, вы можете создать запрос ASK, который делает именно то, о чем вы просите:

ASK {
   SELECT (count(?student) AS ?stcount) (count(?section) AS ?secount) (count(?course) AS ?ccount)
   WHERE {
      ?indiv :hasStudent ?student .
      ?indiv :hasSection ?section .
      ?indiv :grade_course ?course .
   } GROUP BY ?student ?section ?course
   HAVING (stcount = 1 && ?secount = 1 && ?ccount = 1)
}

Немного неуклюж синтаксически, так как агрегаты должны быть вычислены оператором SELECT. ASK вернет true, если все «ограничения» (см. предложение HAVING) истинны, и ложны в противном случае.

Для справки в будущем работа SHACL (язык ограничений форм RDF) в W3C предназначена для укрепления этих виды проблем с нарушением ограничений, на которые невозможно ответить с помощью OWL.

person scotthenninger    schedule 14.02.2016
comment
Мы куда-то движемся. Спасибо. Теперь ссылка на пустые экземпляры узлов здесь не является целью; жесткое определение свойств через ограничения домена (и диапазона). Выше приведена моя попытка в логике описания сделать это... Ваш запрос SPARQL - это то, что я хочу применить в OWL R-Box... Правильно ли указанная выше попытка DL обозначает это ограничение? И будет ли это соответствие OWL действительным? +1 за запрос и предоставление ссылки. - person JohnG79; 16.02.2016

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

Согласно этому предположению, вы можете добиться этого, объявив свойства функциональными и установив для них домен C. В функциональном синтаксисе:

Prefix(owl:=<http://www.w3.org/2002/07/owl#>)
Prefix(rdf:=<http://www.w3.org/1999/02/22-rdf-syntax-ns#>)
Prefix(xml:=<http://www.w3.org/XML/1998/namespace>)
Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)
Prefix(rdfs:=<http://www.w3.org/2000/01/rdf-schema#>)

Ontology(
Declaration(Class(<urn:test:C>))
Declaration(ObjectProperty(<urn:test:hasSection>))
Declaration(ObjectProperty(<urn:test:hasStudent>))
Declaration(DataProperty(<urn:test:grade_code>))

FunctionalObjectProperty(<urn:test:hasSection>)
ObjectPropertyDomain(<urn:test:hasSection> <urn:test:C>)

FunctionalObjectProperty(<urn:test:hasStudent>)
ObjectPropertyDomain(<urn:test:hasStudent> <urn:test:C>)

FunctionalDataProperty(<urn:test:grade_code>)
DataPropertyDomain(<urn:test:grade_code> <urn:test:C>)

SubClassOf(<urn:test:C> ObjectIntersectionOf(ObjectSomeValuesFrom(<urn:test:hasSection> owl:Thing) ObjectSomeValuesFrom(<urn:test:hasStudent> owl:Thing) DataSomeValuesFrom(<urn:test:grade_code> rdfs:Literal)))
)
person Ignazio    schedule 10.02.2016
comment
Спасибо за ваш ответ! Итак, моя цель — описать онтологию на рисунке, не присваивая пустому узлу тип. Я хочу ограничить домены его свойств (что вы и сделали), не присваивая пустому узлу тип и ссылаясь на него, а описывая узел. - person JohnG79; 10.02.2016