/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.riot.process.inf; import java.util.ArrayList ; import java.util.HashMap ; import java.util.List ; import java.util.Map ; import org.apache.jena.atlas.lib.StrUtils ; import org.apache.jena.graph.Node ; import org.apache.jena.query.* ; import org.apache.jena.rdf.model.Model ; public class InferenceSetupRDFS { /*package*/ final Map<Node, List<Node>> transClasses = new HashMap<>() ; /*package*/ final Map<Node, List<Node>> transProperties = new HashMap<>() ; /*package*/ final Map<Node, List<Node>> domainList = new HashMap<>() ; /*package*/ final Map<Node, List<Node>> rangeList = new HashMap<>() ; public InferenceSetupRDFS(Model vocab) { // Find classes - uses property paths exec("SELECT ?x ?y { ?x rdfs:subClassOf+ ?y }", vocab, transClasses) ; // Find properties exec("SELECT ?x ?y { ?x rdfs:subPropertyOf+ ?y }", vocab, transProperties) ; // Find domain exec("SELECT ?x ?y { ?x rdfs:domain ?y }", vocab, domainList) ; // Find range exec("SELECT ?x ?y { ?x rdfs:range ?y }", vocab, rangeList) ; } private static void exec(String qs, Model model, Map<Node, List<Node>> multimap) { String preamble = StrUtils.strjoinNL("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>", "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>", "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>", "PREFIX owl: <http://www.w3.org/2002/07/owl#>", "PREFIX skos: <http://www.w3.org/2004/02/skos/core#>") ; Query query = QueryFactory.create(preamble+"\n"+qs, Syntax.syntaxARQ) ; QueryExecution qexec = QueryExecutionFactory.create(query, model) ; ResultSet rs = qexec.execSelect() ; for ( ; rs.hasNext() ; ) { QuerySolution soln= rs.next() ; Node x = soln.get("x").asNode() ; Node y = soln.get("y").asNode() ; if ( ! multimap.containsKey(x) ) multimap.put(x, new ArrayList<Node>()) ; multimap.get(x).add(y) ; } } }