как написать домен RDF и ограничение диапазона на основе значения свойства, а не класса - PullRequest
1 голос
/ 10 апреля 2020

У меня есть следующий случай, для которого я пытаюсь написать правило RDF / OWL. Цель состоит в том, чтобы улучшить проверку согласованности в результирующей базе данных.

У меня есть класс "Expression" и класс "Manifestation", их можно связать с помощью "hasManifestation".

Достаточно просто ограничить домен и диапазон соответственно, так что доменом hasManifestation является «Выражение», а диапазоном - «Проявление».

Но я хочу go сделать еще один шаг.

У выражений и манифестаций есть свойство, называемое структурным уровнем, уровень 1, 2, 3, 4

Так что выражение на уровне 1 всегда должно быть связано через hasManifestation с манифестом. на уровне 1, никогда на уровне 2, 3 и т. д. c.

Аналогично, Выражение на уровне 2 всегда должно быть связано с Проявлением на уровне 2, а не на уровне 1 или 3, et c.

Итак, я хочу написать правило для домена и диапазона «hasManifestation», которое выглядит примерно так:

Диапазон: Y должен быть проявлением, и если значение домена является уровнем Z, тогда Y должен быть уровнем Z

Домен: X должен быть выражением, а если значение Range является уровнем Z, то X является уровнем X.

Я думаю, что могу написать это в логике предикатов c следующим образом: E = выражение, M = проявление, L = уровень, R = диапазон, D = домен

диапазон: y(My and (xz)(Dx and Lxz) -> (Lyz))

домен: x(Ex and (yz)(Ry and Lyz) -> (Lxz))

Возможно, я что-то напутал, но, надеюсь, вы поймете, что я хотел бы сделать. Но как я мог написать это как заявление OWL в TTL.

Любой совет очень ценится.

1 Ответ

0 голосов
/ 10 апреля 2020

Вы можете использовать hasValue ограничения для express этого, но не на уровне домена и диапазона свойства - для ограничения этого свойства требуется свойство для каждого уровня.

Таким образом, вы можете создайте общую аксиому включения концепции, в соответствии с:

(<urn:test:Expression> and (<urn:test:hasLevel> value 1)) subclassOf
    (<urn:test:hasManifestation> some (<urn:test:Manifestation> and (<urn:test:hasLevel> value 1)))

(пример переписан в манчестерском синтаксисе - GCI не могут быть записаны в этом синтаксисе, но его легче читать)

В функциональном Синтаксис, аксиома выглядит следующим образом:

SubClassOf(
    ObjectIntersectionOf(
           Expression
           DataHasValue(hasLevel "1"^^xsd:integer)
    )
    ObjectSomeValuesFrom(hasManifestation
           ObjectIntersectionOf(
                   Manifestation
                   DataHasValue(hasLevel "1"^^xsd:integer)
            )
    )
)

В Turtle:

@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#> .
@base <http://www.w3.org/2002/07/owl#> .
[ rdf:type owl:Ontology] .
<urn:test:hasManifestation> rdf:type owl:ObjectProperty .
<urn:test:hasLevel> rdf:type owl:DatatypeProperty .
<urn:test:Expression> rdf:type owl:Class .
<urn:test:Manifestation> rdf:type owl:Class .
[ owl:intersectionOf ( <urn:test:Expression>
                   [ rdf:type owl:Restriction ;
                     owl:onProperty <urn:test:hasLevel> ;
                     owl:hasValue 1
                   ]
                 ) ;
  rdf:type owl:Class ;
  rdfs:subClassOf [ rdf:type owl:Restriction ;
          owl:onProperty <urn:test:hasManifestation> ;
          owl:someValuesFrom [ owl:intersectionOf ( <urn:test:Manifestation>
                               [ rdf:type owl:Restriction ;
                                 owl:onProperty <urn:test:hasLevel> ;
                                 owl:hasValue 1
                               ]) ;
                      rdf:type owl:Class
                    ]
          ]
] .

Если вы решите использовать несколько свойств, проще объявить домены и диапазоны, но вы должны использовать несколько свойства:

hasManifestation1 domain exist hasLevel (hasValue 1)
hasManifestation1 range exist hasLevel (hasValue 1)

и т. д. (нет необходимости изменять существующие выражения домена и диапазона, поскольку множественные аксиомы уже подразумевают пересечение выражений класса).

...