В следующем примере классов введите код здесь: Class3 и: Class4 выводятся по OWL мыслителю (например, окатыши) в качестве типов личности: ind1:Как получить подмножество свойств индивида из выведенного класса
@prefix : <http://www.semanticweb.org/test/2015/1/ontology#> .
@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.semanticweb.org/test/2015/1/ontology> .
<http://www.semanticweb.org/test/2015/1/ontology> rdf:type owl:Ontology .
:Prop1 rdf:type owl:DatatypeProperty .
:Prop2 rdf:type owl:DatatypeProperty .
:Prop3 rdf:type owl:DatatypeProperty .
:Class1 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :Prop1 ;
owl:someValuesFrom xsd:string
] .
:Class2 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :Prop2 ;
owl:someValuesFrom xsd:string
] .
:Class3 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :Prop3 ;
owl:someValuesFrom xsd:string
] .
:Class4 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:intersectionOf (:Class1
:Class2
)
] .
:Class5 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:unionOf (:Class3
:Class4
)
] .
:Ind1 rdf:type owl:NamedIndividual ;
:Prop2 "prop2" ;
:Prop1 "prop1" ;
:Prop3 "prop3" .
: Класс 4, например выведено рассудителем на основе свойств: Prop1 и: Prop2 of: Ind1.
мне нужно построить индивидуальный типа: Class4 от: ind1, что-то вроде этого:
:Ind_Class4 rdf:type :Class4
:Ind_Class4 :Prop1 "Prop1"
:Ind_Class4 :Prop2 "Prop2"
Я ищу, как выбрать свойства: prop1 и: prop2 из: ind1 как свойства класса: Class4.
Я попробовал запрос SPARQL
select * where {
?s rdf:type :Class4 .
?s ?p ?o .
}
но он возвращает все свойства: ind1 -: prop1,: prop2 и: Prop3:
:Ind1 :Prop1 "Prop1"
:Ind1 :Prop2 "Prop2"
:Ind1 :Prop3 "Prop3"
Если изменить онтологию, как предложено в Ответ1:
:Prop1 rdf:type owl:DatatypeProperty ;
rdfs:domain :Class1 .
:Prop2 rdf:type owl:DatatypeProperty ;
rdfs:domain :Class2 .
:Prop3 rdf:type owl:DatatypeProperty ;
rdfs:domain :Class3 .
:Class1 rdf:type owl:Class .
:Class2 rdf:type owl:Class .
:Class3 rdf:type owl:Class .
:Class4 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:intersectionOf (:Class1
:Class2
)
] .
:Class5 rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Class ;
owl:unionOf (:Class3
:Class4
)
] .
:Ind1 rdf:type owl:NamedIndividual ;
:Prop1 "Prop1" ;
:Prop3 "Prop3" ;
:Prop2 "Prop2" .
затем предложил SPARQL запрос
select * where {
?p rdfs:domain :Class4 .
?s ?p ?o .
}
возвращает пустой результирующий набор.
Спасибо.
Класс Class1, например. должен определить класс лиц, которые предоставляют свойство Prop1.Класс Class4 должен определить класс лиц, которые предоставляют свойство Prop1 из класса Class1, а также Prop2 из класса Class2. –
@ igor.br Я не уверен, что вы пытаетесь сказать. Вы можете определить класс вещей, имеющих какое-то значение для свойства, произнеся что-то вроде «PetOwner equalClass (hasPet some Thing)», но я не уверен, что это то, что вы пытаетесь сказать. –
Отображение аргумента в Protege класса 4 как тип индивидуума Ind1, который предоставляет свойства Prop1 и Prop2. Мне нужно выяснить, как я могу получить эту информацию либо из модели/графика (я использую Jena), либо с помощью SPARQL. Изменение определения классов Class1 и Class2 от ограничений свойств до доменов свойств не приносит успеха. Предлагаемый SPARQL не возвращает никаких результатов. –