Создание предполагаемой связи с несколькими ограничениями в OWL - PullRequest
2 голосов
/ 04 октября 2019

У меня есть следующий файл синтаксиса Turtle (см. Конец вопроса), и я хотел бы иметь возможность вывести :hasSibling, но только полные братья и сестры, а не половину. т.е. Мне нужны только те дети, которые имеют одну и ту же мать и отца.

Я рассмотрел Как вывести свойство isBrotherOf между двумя людьми , которое решает половину проблемы,Следующий запрос SPARQL:

PREFIX : <http://example.com/Test#>
SELECT DISTINCT *
WHERE {
    ?child :isSiblingOf ?sibling .
    FILTER ( ?child = :jennySmith )
}

возвращает:

  • :jimJones - наполовину брат, не хочет
  • :joeSmith
  • :jennySmith - сам, не идеал, но я могу жить с этим

Я пытался использовать owl:intersectionOf и предоставить 2 комплекта, один с использованием :hasFather в owl:propertyChainAxiomа другой использует :hasMother, но это пересечение пусто (возможно - вероятно - у меня неправильный синтаксис, или что две цепочки свойств фактически возвращают разные «вещи» - у меня нетпока еще очень хорошо понимаю OWL):

:x1
    a owl:Restriction ;
    owl:intersectionOf (
        [
            owl:propertyChainAxiom(
                :hasFather
                :isParentOf
            ) ] [
            owl:propertyChainAxiom(
                :hasMother
                :isParentOf
            )
        ]
    )
.

Другая возможность состоит в том, что такая возможность просто невозможна с OWL.

У меня есть репозиторий в GraphDB, настроенный с OWL2-RL. Пожалуйста, не обращайте внимания на то, что существуют существующие онтологии для определения родословных, и что OWL может быть не лучшим способом их представления. Моя цель - не создать семейное древо, а изучить ограничения и выводы OWL. Это был MVCE, который я придумал, чтобы проиллюстрировать мою проблему.

@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix owl2: <http://www.w3.org/2006/12/owl2#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://example.com/Test#> .

<file:test.ttl>
  a owl:Ontology ;
.
:Person
    a owl:Class ;
    rdfs:subClassOf owl:Thing ;
.
:hasGender
    a owl:ObjectProperty ;
    rdfs:domain :Person ;
.
:Man
    a owl:Class ;
    rdfs:subClassOf :Person ;
    owl:equivalentClass [
        a owl:Restriction ;
        owl:onProperty :hasGender ;
        owl:hasValue :male ;
    ]
.
:Woman
    a owl:Class ;
    rdfs:subClassOf :Person ;
    owl:equivalentClass [
        a owl:Restriction ;
        owl:onProperty :hasGender ;
        owl:hasValue :female ;
    ]
.
:Parent
    a owl:Restriction ;
    rdfs:subClassOf :Person ;
    owl:onProperty :isParentOf ;
    owl:someValuesFrom :Person ;
.
:Child
    a owl:Restriction ;
    rdfs:subClassOf :Person ;
    owl:onProperty :hasParent ;
    owl:someValuesFrom :Person ;
.
:Father
    a owl:Class ;
    rdfs:subClassOf :Parent ;
    owl:equivalentClass [
        a owl:Restriction ;
        owl:intersectionOf ( :Parent :Man ) ;
    ] ;
.
:Mother
    a owl:Class ;
    rdfs:subClassOf :Parent ;
    owl:equivalentClass [
        a owl:Restriction ;
        owl:intersectionOf ( :Parent :Woman ) ;
    ] ;
    owl2:disjointObjectProperties :Father ;
.
:hasFather
    owl:inverseOf :isFatherOf ;
.
:hasMother
    owl:inverseOf :isMotherOf ;
.
:hasParent
    a owl:ObjectProperty ;
.
:isMotherOf
    a owl:ObjectProperty ;
    rdfs:domain :Woman ;
    rdfs:range: :Child ;
    rdfs:subPropertyOf :isParentOf ;
.
:isFatherOf
    a owl:ObjectProperty ;
    rdfs:domain :Man ;
    rdfs:range: :Child ;
    rdfs:subPropertyOf :isParentOf ;
.
:isParentOf
    a owl:ObjectProperty ;
    rdfs:domain :Person ;
    rdfs:range :Person ;
    owl:inverseOf :hasParent ;
.
:isSiblingOf
    a owl:ObjectProperty  ;
    owl:propertyChainAxiom(
        :hasParent
        :isParentOf
    )
.

:janeSmith
    a :Person ;
    :hasGender :female ;
    :isMotherOf :jimJones ;
    :isMotherOf :joeSmith ;
    :isMotherOf :jennySmith ;
.
:johnSmith
    a :Person ;
    :hasGender :male ;
    :isFatherOf :joeSmith ;
    :isFatherOf :jennySmith ;
.
:tomJones
    a :Person ;
    :hasGender :male ;
    :isFatherOf :jimJones ;
.
:jimJones
    a :Person ;
    :hasGender :male ;
.
:joeSmith
    a :Person ;
    :hasGender :male ;
.
:jennySmith
    a :Person ;
    :hasGender :female ;
    :isMotherOf :harrySmith ;
.
:harrySmith
    a :Person ;
    :hasGender :male ;
.
...