001/**
002 * Copyright (C) 2007 - 2016, Jens Lehmann
003 *
004 * This file is part of DL-Learner.
005 *
006 * DL-Learner is free software; you can redistribute it and/or modify
007 * it under the terms of the GNU General Public License as published by
008 * the Free Software Foundation; either version 3 of the License, or
009 * (at your option) any later version.
010 *
011 * DL-Learner is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
014 * GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License
017 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
018 */
019package org.dllearner.kb.sparql;
020
021/**
022 * @author Lorenz Buehmann
023 *
024 */
025public class SPARQLQueryUtils {
026        
027        public static final String PREFIXES =
028                        "PREFIX owl:<http://www.w3.org/2002/07/owl#> "
029                        + "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
030                        + "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> ";
031        
032        // base entities
033        public static final String SELECT_CLASSES_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 a owl:Class .}";
034        public static final String SELECT_OBJECT_PROPERTIES_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 a owl:ObjectProperty .}";
035        public static final String SELECT_DATA_PROPERTIES_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 a owl:DatatypeProperty .}";
036        public static final String SELECT_INDIVIDUALS_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 a owl:NamedIndividual .}";
037        
038        public static final String SELECT_CLASSES_QUERY_ALT = PREFIXES + "SELECT DISTINCT ?var1 WHERE {[] a ?var1 .}";
039        public static final String SELECT_INDIVIDUALS_QUERY_ALT = PREFIXES + "SELECT ?var1 WHERE {?var1 a [] . \n"
040                        + "OPTIONAL { ?s1 a ?var1. } \n"
041                        + "OPTIONAL { ?s2 ?var1 []. } \n"
042                        + "FILTER ( !BOUND(?s1) && !BOUND(?s2) ) }";
043        
044        // extended
045        public static final String SELECT_DATA_PROPERTIES_BY_RANGE_QUERY = PREFIXES
046                        + "SELECT ?var1 WHERE {?var1 a owl:DatatypeProperty . ?var1 rdfs:range <%s> . }";
047
048        // class hierarchy queries
049        public static final String SELECT_TOP_LEVEL_OWL_CLASSES = PREFIXES +
050                        "SELECT ?var1\n" +
051                        "WHERE { ?var1 a owl:Class .\n" +
052                        "FILTER ( ?var1 != owl:Thing && ?var1 != owl:Nothing ) .\n" +
053                        "OPTIONAL { ?var1 rdfs:subClassOf ?super .\n" +
054                        "FILTER ( ?super != owl:Thing && ?super != ?var1 && ?super != rdfs:Resource) } .\n" +
055                        "FILTER ( !BOUND(?super) ) }";
056        
057        public static final String SELECT_LEAF_CLASSES_OWL = PREFIXES +
058                        "SELECT ?var1\n" +
059                        "WHERE { ?var1 a owl:Class .\n" +
060                        "FILTER ( ?var1 != owl:Thing && ?var1 != owl:Nothing ) .\n" +
061                        "OPTIONAL { ?sub rdfs:subClassOf ?var1 .\n" +
062                        "FILTER ( ?sub != owl:Nothing && ?sub != ?var1 ) } .\n" +
063                        "FILTER ( !BOUND(?sub) ) }";
064        
065        public static final String SELECT_LEAF_CLASSES = PREFIXES +
066                        "SELECT ?var1\n" +
067                        "WHERE { ?var1 a owl:Class .\n" +
068                        "FILTER ( ?var1 != owl:Thing && ?var1 != owl:Nothing ) .\n" +
069                        "OPTIONAL { ?var1 rdfs:subClassOf ?sub .\n" +
070                        "FILTER ( ?sub != owl:Nothing && ?sub != ?var1 ) } .\n" +
071                        "FILTER ( !BOUND(?sub) ) }";
072        
073        public static final String SELECT_SUPERCLASS_OF_QUERY_INF = PREFIXES + "SELECT ?var1 WHERE { " +
074        "<%s> (rdfs:subClassOf|owl:equivalentClass|^owl:equivalentClass|(owl:intersectionOf/rdf:rest*/rdf:first))* ?var1 .}";
075        
076        public static final String SELECT_SUPERCLASS_OF_QUERY_RDFS = PREFIXES + "SELECT ?var1 WHERE { " +
077                        "<%s> rdfs:subClassOf* ?var1 .}";
078
079        public static final String SELECT_SUBCLASS_OF_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 rdfs:subClassOf <%s> .}";
080        public static final String SELECT_DIRECT_SUBCLASS_OF_QUERY = PREFIXES +
081                        "SELECT ?var1 {\n" +
082                        "               BIND( <%s> as ?concept )\n" +
083                        "               ?var1 rdfs:subClassOf ?concept .\n" +
084                        "               OPTIONAL {\n" +
085                        "               ?concept rdfs:subClassOf ?inbetweener .\n" +
086                        "               ?var1 rdfs:subClassOf ?inbetweener .\n" +
087                        "               FILTER( ?inbetweener != ?concept && ?inbetweener != ?var1 )\n" +
088                        "               }\n" +
089                        "               FILTER( ! BOUND(?inbetweener) && ?var1 != ?concept)\n" +
090                        "               }";
091        public static final String SELECT_SUPERCLASS_OF_QUERY = PREFIXES + "SELECT ?var1 WHERE {<%s> rdfs:subClassOf ?var1 .}";
092        public static final String SELECT_DIRECT_SUPERCLASS_OF_QUERY = PREFIXES +
093                        "SELECT ?var1 {\n" +
094                        "               BIND( <%s> as ?concept )\n" +
095                        "               ?concept rdfs:subClassOf ?var1 .\n" +
096                        "               OPTIONAL {\n" +
097                        "               ?concept rdfs:subClassOf ?inbetweener .\n" +
098                        "               ?inbetweener rdfs:subClassOf ?var1 .\n" +
099                        "               FILTER( ?inbetweener != ?concept && ?inbetweener != ?var1 )\n" +
100                        "               }\n" +
101                        "               FILTER( ! BOUND(?inbetweener) && ?var1 != ?concept)\n" +
102                        "               }";
103        public static final String SELECT_EQUIVALENT_CLASSES_QUERY = PREFIXES + "SELECT ?var1 WHERE {"
104                        + "{?var1 owl:equivalentClass <%s> .} UNION {<%s> owl:equivalentClass ?var1 .}}";
105        public static final String SELECT_DISJOINT_CLASSES_QUERY = PREFIXES + "SELECT ?var1 WHERE {"
106                        + "{?var1 owl:disjointWith <%s> .} UNION {<%s> owl:disjointWith ?var1 .}}";
107        public static final String ASK_SUBCLASS_OF_QUERY = PREFIXES + "ASK {<%s> rdfs:subClassOf <%s> .}";
108        public static final String ASK_EQUIVALENT_CLASSES_QUERY = PREFIXES + "ASK {"
109                        + "{<%s> owl:equivalentClass <%s> .} UNION {<%s> owl:equivalentClass ?var1 .}}";
110        public static final String ASK_DISJOINT_CLASSES_QUERY = PREFIXES + "SELECT ?var1 WHERE {"
111                        + "{<%s> owl:disjointWith <%s> .} UNION {<%s> owl:disjointWith <%s> .}}";
112        public static final String SELECT_SIBLING_CLASSES_QUERY = PREFIXES
113                        + "SELECT ?var1 WHERE {<%s> rdfs:subClassOf ?sup . ?var1 rdfs:subClassOf ?sup. FILTER(!SAMETERM(?var1, <%s>))}";
114
115        // property hierarchy
116        public static final String SELECT_SUBPROPERTY_OF_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 rdfs:subPropertyOf <%s> .}";
117        public static final String SELECT_SUPERPROPERTY_OF_QUERY = PREFIXES + "SELECT ?var1 WHERE {<%s> rdfs:subPropertyOf ?var1 .}";
118        public static final String SELECT_EQUIVALENT_PROPERTIES_QUERY = PREFIXES + "SELECT ?var1 WHERE {"
119                        + "{?var1 owl:equivalentProperty <%s> .} UNION {<%s> owl:equivalentProperty ?var1 .}}";
120        public static final String SELECT_DISJOINT_PROPERTIES_QUERY = PREFIXES + "SELECT ?var1 WHERE {"
121                        + "{?var1 owl:propertyDisjointWith <%s> .} UNION {<%s> owl:propertyDisjointWith ?var1 .}}";
122        
123        // instance queries
124        public static final String SELECT_CLASS_INSTANCES_QUERY = PREFIXES + "SELECT ?var1 WHERE {?var1 a <%s> .}";
125        public static final String SELECT_INSTANCE_TYPES_QUERY = PREFIXES + "SELECT ?var1 WHERE { <%s> a ?var1 .}";
126        public static final String SELECT_PROPERTY_RELATIONSHIPS_QUERY = PREFIXES + "SELECT ?var1 ?var2 WHERE { ?var1 <%s> ?var2 .}";
127}