-, , , , , . , , , , . , SPARQL. , , .
, . , ABC - A, B C CDE C, D E. ( , ). ( , , ), F DEF. , SPARQL. :
@prefix : <http://stackoverflow.com/q/22396095/1281433/intersections#> .
@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://stackoverflow.com/q/22396095/1281433/intersections>
a owl:Ontology .
:A a owl:Class .
:B a owl:Class .
:C a owl:Class .
:D a owl:Class .
:E a owl:Class .
:F a owl:Class .
:ABC a owl:Class ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( :A :B :C )
] .
:CDE a owl:Class ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( :C :D :E )
] .
:DEF a owl:Class ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( :D :E :F )
] .
, , . , , , A, B C:
prefix : <http://stackoverflow.com/q/22396095/1281433/intersections
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
select distinct ?class where {
?class owl:equivalentClass/
owl:intersectionOf/
rdf:rest*/rdf:first :A, :B, :C .
}
---------
| class |
=========
| :ABC |
---------
CDE, , . , , , . , , :
prefix : <http://stackoverflow.com/q/22396095/1281433/intersections
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
select ?class ?i where {
values ?i { :A :B :C :D :E }
?class owl:equivalentClass/
owl:intersectionOf/
rdf:rest*/rdf:first ?i .
filter not exists {
?class owl:equivalentClass/
owl:intersectionOf/
rdf:rest*/rdf:first ?j .
filter( !(?j in (:A, :B, :C, :D, :E )) )
}
}
order by ?class ?i
--------------
| class | i |
==============
| :ABC | :A |
| :ABC | :B |
| :ABC | :C |
| :CDE | :C |
| :CDE | :D |
| :CDE | :E |
--------------
, DEF , , D E, , , F.
, , , , , , , . , :
prefix : <http://stackoverflow.com/q/22396095/1281433/intersections
prefix owl: <http://www.w3.org/2002/07/owl
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns
select ?class ?i where {
?class owl:equivalentClass/owl:intersectionOf ?list .
?list rdf:rest*/rdf:first ?i .
filter not exists {
?list rdf:rest*/rdf:first ?element .
filter( !(?element in (:A, :B, :C, :D, :E )) )
}
}
--------------
| class | i |
==============
| :ABC | :A |
| :ABC | :B |
| :ABC | :C |
| :CDE | :C |
| :CDE | :D |
| :CDE | :E |
--------------
, , , , . , , .
, . , , . owl:someValuesFrom , owl:someValuesFrom:
?class owl:equivalentClass/
owl:intersectionOf/
rdf:rest*/rdf:first/
owl:someValuesFrom ?i .
A, Z, C, Z - B,
ABC A
Z
C
, . , , ?i , ?i , . . , , , . , :
prefix : <http://stackoverflow.com/q/22396095/1281433/intersections
prefix owl: <http://www.w3.org/2002/07/owl
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns
select ?class ?i where {
?class owl:equivalentClass/
owl:intersectionOf ?list .
?list rdf:rest*/rdf:first/(owl:equivalentClass|^owl:equivalentClass)* ?i .
filter( ?i in (:A, :B, :C, :D, :E ))
filter not exists {
?list rdf:rest*/rdf:first ?element .
filter not exists {
?element (owl:equivalentClass|^owl:equivalentClass)* ?j
filter( ?j in (:A, :B, :C, :D, :E ))
}
}
}
:Z a owl:Class ;
owl:equivalentClass :B .
:AZC a owl:Class ;
owl:equivalentClass [ a owl:Class ;
owl:intersectionOf ( :A :Z :C )
] .
:
--------------
| class | i |
==============
| :ABC | :A |
| :ABC | :B |
| :ABC | :C |
| :AZC | :A |
| :AZC | :B |
| :AZC | :C |
| :CDE | :C |
| :CDE | :D |
| :CDE | :E |
--------------
( ). , (owl:equivalentClass|^owl:equivalentClass)*.
-, ; ABCD A, B, C, D, ABCD ABC.
, , , . SPARQL . , , , .