Имам OWL онтология с три взаимосвързани лица: а, б, и ° Си също така има две изолирани индивиди х, и ш.
взаимосвързани лица:
- имат поне едно твърдение за собственост на изходящи обекти. напр .: a hasRelationС b; или
- имат поне твърдение за собственост на входящи обекти, напр .: като c, като b има връзка с c.
изолирани индивиди:
- имат твърдение за имущество с нулев изходящ обект, напр .: x hasRelationWith [няма физическо лице]; и
- имат твърдение за имущество с нулев входящ обект, напр .: такъв x, като [не е индивидуален] hasRelationWith x.
Възможно ли е да се класифицират (по логически извод, а не чрез изброяване) всички изолирани индивиди, използващи DL Query (в Protégé 4.3, ако има разлика) и ако е възможно, как да го направя?
Интуитивното ми предположение е нещо подобно: (имаRelationWith min 0 Thing) изключвам (hasRelationWith min 1 Thing), но DL-Query изглежда не поддържа синтаксиса на зададено изваждане ...
UPDATE: Следният SPARQL може да го направи, въпреки че не може да се използва в дефиницията на класа.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX my: <http://localhost:8080/ontology/untitled-ontology-26#>
SELECT DISTINCT ?src_obj
WHERE {
?src_obj a owl:NamedIndividual .
minus {?src_obj my:hasRelationWith ?target_obj}
minus {?target_obj my:hasRelationWith ?src_obj}
}
Отговори:
1 за отговор № 1Можете да попитате за това какво е логично доказуемо. Това означава, че ако можете загатвам че някой не е свързан с някой друг с някаква собственост, можете да го попитате за него. Например, ако имате несъвместими класове Cat
и Dog
, така че нищо не може да бъде пример за двете, а вие имате a Person
jim
който също има допълнителен тип hasPet only Cat and Dog
, тогава аргумент може да заключи, че jim hasPet exactly 0
.
В езика за запитване на DL можете също да използвате обратен Имоти. Предишният пример показва това jim
няма домашни любимци (т.е. е пример за hasPet exactly 0
). Можете да попитате за животни, които не са домашни любимци на никого, като питате за случаи inverse hasPet exactly 0
, Например, ако добавите несвързани подкласове на Person
, ThisKind
и ThatKind
и кажи това missy
на Cat
inverse hasPet only ThisKind and ThatKind
, тогава един разумен може да заключи, че никой не е свързан да се missy
по hasPet
Имот. В края на този отговор е дадена онтология за тези два примера.
За вашата конкретна заявка просто комбинирате два израза на клас от формулярите, които току-що описах:
hasRelationС точно 0 и обратно имаRelationWith точно 0
или, с някои скоби:
(имаRelationWith точно 0) и ((обратна hasRelationWith) точно 0)
Много е важно да се отбележи обаче, че това връща само лица, за които може да бъде доказан че няма такива отношения. Не е достатъчно данните да не съдържат такива отношения още. OWL прави отворено световно допускане, което означава, че нещо, което не е изрично посочено или доказуемо, не се приема за вярно или невярно.
Примерна онтология
@prefix : <http://www.example.org/cardinality-example#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:fido a owl:NamedIndividual , :Dog .
:Dog a owl:Class .
:fluffy a owl:NamedIndividual , :Cat ;
a [ a owl:Class ;
owl:intersectionOf ( :ThatKind [ a owl:Restriction ;
owl:allValuesFrom :ThisKind ;
owl:onProperty [ owl:inverseOf :hasPet ]
] )
] .
:ThatKind a owl:Class ;
rdfs:subClassOf :Person ;
owl:disjointWith :ThisKind .
:rover a owl:NamedIndividual , :Dog .
:hasPet a owl:ObjectProperty .
<http://www.example.org/cardinality-example>
a owl:Ontology .
:Person a owl:Class .
:jim a owl:NamedIndividual , :Person ;
a [ a owl:Restriction ;
owl:cardinality "0"^^xsd:nonNegativeInteger ;
owl:onProperty :hasPet
] .
:missy a owl:NamedIndividual , :Cat .
:Cat a owl:Class ;
owl:disjointWith :Dog .
:ThisKind a owl:Class ;
rdfs:subClassOf :Person .