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}