Probabilmente stai lavorando in RDF (S), e non in OWL, ma se hai la possibilità di utilizzare strumenti basati su OWL, e per il gusto di chiunque trovi questa domanda e possa usare strumenti basati su OWL, ecco una risposta basata su OWL.
Se si desidera che ogni istanza di una classe (incluse le istanze delle sue sottoclassi) abbia un valore di proprietà in comune, è possibile utilizzare uno Individual Value Restriction. Nella sintassi di Manchester, si può dire che le istanze di SomeClass
tutti hanno il valore sharedIndividual
per la propery hasValue
dall'assioma:
SomeClass SubClassOf hasValue value sharedIndividual
Poi ogni istanza SomeClass
ha il tipo hasValue value sharedIndividual
, il che significa che l'istanza ha sharedIndividual
come un valore per la proprietà hasValue
.
Ecco la serializzazione N3 di un'ontologia con una classe SomeClass
e due sottoclassi SomeSubClass
e AnotherSubClass
. Ciascuna delle tre classi ha un individuo dichiarato. Il tipo hasValue value sharedIndividual
è una superclasse di SomeClass
.
@prefix : <http://www.example.com/valueClassExample#> .
@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#> .
<http://www.example.com/valueClassExample>
a owl:Ontology .
:hasValue
a owl:ObjectProperty .
:sharedValue
a owl:Thing , owl:NamedIndividual .
:SomeClass
a owl:Class ;
rdfs:subClassOf
[ a owl:Restriction ;
owl:hasValue :sharedValue ;
owl:onProperty :hasValue
] .
:SomeSubClass
a owl:Class ;
rdfs:subClassOf :SomeClass .
:AnotherSubClass
a owl:Class ;
rdfs:subClassOf :SomeClass .
:SomeClassInstance
a :SomeClass , owl:NamedIndividual .
:SomeSubClassInstance
a owl:NamedIndividual , :SomeSubClass .
:AnotherSubClassInstance
a owl:NamedIndividual , :AnotherSubClass .
Con questa ontologia caricata in Protégé e con pellet fissati per il ragionamento, chiedendo che individui hanno sharedValue
come valore della proprietà hasValue
mostra tutti gli individui.
fonte
2013-06-27 11:41:25
Se OWL è nella foto (che probabilmente non lo è, in quanto vengono utilizzati gli elenchi RDF), una volta che c'è un modo per fare riferimento alla lista, però, si potrebbe specificare che 'SomeClass subClassOf semapi: hasChainTo value ', il che significa che ogni istanza di' SomeClass' fa infatti 'semapi: hasChainTo ' (e "ogni istanza" include istanze di sottoclassi). –
Sì, è vero che potevi farlo. Scambieresti con la complessità di un ragionatore OWL rispetto alla necessità di asserire un triplo in più ogni volta che viene creata un'istanza. Dal momento che il parlamento ha già segnalato le prestazioni di aggiornamento come una preoccupazione, non sono sicuro che farei il compromesso a favore del ragionatore. Ma questa decisione dipende interamente dai dettagli completi del contesto del progetto. –