root/SPARQLBuilderWWW/src/java/org/biohackathon/SPARQLBuilder/OWL/EndpointAccess.java @ 255

リビジョン 251, 8.7 KB (コミッタ: atsuko, 9 年 前)

コスト関数導入

行番号 
1/*
2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
5 */
6
7package org.biohackathon.SPARQLBuilder.OWL;
8
9import com.hp.hpl.jena.query.*;
10import com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP;
11import java.util.*;
12
13/**
14 *
15 * @author atsuko
16 */
17public class EndpointAccess {
18    static public boolean checkPath(Path path, String sparqlEndpoint){
19        return checkPath(path.getStartClass(), path.getClassLinks(), sparqlEndpoint);
20    }
21   
22    static public boolean checkPath(String startClass, List<ClassLink> classlinks, String sparqlEndpoint){
23        // SPARQL Query construction
24        StringBuilder queryStr = new StringBuilder();
25        queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
26        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
27        queryStr.append("ASK { \n");
28       
29        ListIterator<ClassLink> cit = classlinks.listIterator();
30        queryStr.append("?r0").append(" rdf:type <").append(startClass).append("> .\n");
31        int i = 0;
32        while( cit.hasNext() ){
33            ClassLink link = cit.next();
34            //String next = link.getLinkedClassURI();
35            String sval = "?r".concat(Integer.toString(i));
36            String oval = "?r".concat(Integer.toString(i+1));
37            queryStr.append(oval).append(" rdf:type <").append(link.getLinkedClassURI()).append("> .\n");
38            if( link.getDirection() == Direction.forward ){
39                queryStr.append(sval).append(" <").append(link.getPropertyURI()).append("> ")
40                        .append(oval).append(" .\n");
41            }else{
42                queryStr.append(oval).append(" <").append(link.getPropertyURI()).append("> ")
43                        .append(sval).append(" .\n");               
44            }
45            i++;
46        }
47        queryStr.append("} \n");
48       
49        String sparqlQuery = queryStr.toString();
50        Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ);
51        QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query);
52        boolean res = qexec.execAsk();
53        qexec.close();
54        return res;
55    }
56   
57    static public boolean checkSimplePath(List<Integer> nodes, OWLClassGraph ocg, String sparqlEndpoint){
58        // SPARQL Query construction
59        StringBuilder queryStr = new StringBuilder();
60        queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
61        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
62        queryStr.append("ASK { \n");
63       
64        ListIterator<Integer> cit = nodes.listIterator();
65        queryStr.append("?r0").append(" rdf:type <").append(ocg.labels.get(cit.next())).append("> .\n");
66        int i = 0;
67        while( cit.hasNext() ){
68            String cURI = ocg.labels.get(cit.next());
69            //String next = link.getLinkedClassURI();
70            String sval = "?r".concat(Integer.toString(i));
71            String pval = "?p".concat(Integer.toString(i));
72            String oval = "?r".concat(Integer.toString(i+1));
73            queryStr.append(oval).append(" rdf:type <").append(cURI).append("> .\n");
74            queryStr.append("{{");
75            queryStr.append(sval).append(" ").append(pval).append(" ")
76                        .append(oval).append(" }\n UNION\n {");
77            queryStr.append(oval).append(" ").append(pval).append(" ")
78                        .append(sval).append(" }}\n");
79            i++;
80        }
81        queryStr.append("} \n");
82       
83        String sparqlQuery = queryStr.toString();
84        System.out.println("Ask Simple");
85        System.out.println(sparqlQuery);
86        Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ);
87        /*
88        QueryEngineHTTP httpQuery = new QueryEngineHTTP(sparqlEndpoint, query);
89        boolean res = httpQuery.execAsk();
90        httpQuery.close();
91                */
92        QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query);
93        boolean res = qexec.execAsk();
94        qexec.close();
95        return res;
96    }   
97
98    static public boolean check3SimplePath(Integer node1, Integer node2, Integer node3, OWLClassGraph ocg, String sparqlEndpoint){
99        // SPARQL Query construction
100        StringBuilder queryStr = new StringBuilder();
101        queryStr.append("PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n");
102        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
103        queryStr.append("ASK { \n");
104       
105        queryStr.append("?n1縲€rdf:type ?c1 .\n");
106        queryStr.append("?n2縲€rdf:type ?c2 .\n");
107        queryStr.append("?n3縲€rdf:type ?c3 .\n");
108       
109        queryStr.append("{{");
110            queryStr.append("?n1").append(" ").append("?p1").append(" ")
111                        .append("?n2").append(" }\n UNION\n {");
112            queryStr.append("?n2").append(" ").append("?p1").append(" ")
113                        .append("?n1").append(" }}\n");
114
115        queryStr.append("{{");
116            queryStr.append("?n2").append(" ").append("?p2").append(" ")
117                        .append("?n3").append(" }\n UNION\n {");
118            queryStr.append("?n3").append(" ").append("?p2").append(" ")
119                        .append("?n2").append(" }}\n");           
120       
121        queryStr.append("VALUES (?c1 ?c2 ?c3){ \n");
122        queryStr.append("<").append(ocg.labels.get(node1)).append("> \n");
123        queryStr.append("<").append(ocg.labels.get(node2)).append("> \n");
124        queryStr.append("<").append(ocg.labels.get(node3)).append("> \n");
125        queryStr.append("} \n");
126        queryStr.append("} \n");
127       
128        String sparqlQuery = queryStr.toString();
129        System.out.println("Ask Simple3");
130        System.out.println(sparqlQuery);
131        Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ);
132        QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query);
133        boolean res = qexec.execAsk();
134        qexec.close();
135        return res;
136    }
137   
138    static public boolean check3SimplePathwithJoin(Integer node1, Integer node2, Integer node3, OWLClassGraph ocg, String sparqlEndpoint){
139        StringBuilder queryStr = new StringBuilder();
140        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
141        queryStr.append("SELECT DISTINCT ?n2 { \n");
142       
143        queryStr.append("?n1").append(" rdf:type <").append(ocg.labels.get(node1)).append("> .\n");
144        queryStr.append("?n2").append(" rdf:type <").append(ocg.labels.get(node2)).append("> .\n");
145       
146        queryStr.append("{{");
147            queryStr.append("?n1").append(" ").append("?p1").append(" ")
148                        .append("?n2").append(" }\n UNION\n {");
149            queryStr.append("?n2").append(" ").append("?p1").append(" ")
150                        .append("?n1").append(" }}\n");
151
152        queryStr.append("} \n");
153       
154        String sparqlQuery = queryStr.toString();
155        System.out.println("SELECT Simple3 by Join");
156        System.out.println(sparqlQuery);
157        Query query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ);
158        QueryExecution qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query);
159        ResultSet res1 = qexec.execSelect();
160        qexec.close();
161       
162        queryStr = new StringBuilder();
163        queryStr.append("PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n");
164        queryStr.append("SELECT DISTINCT ?n2 { \n");
165       
166        queryStr.append("?n2").append(" rdf:type <").append(ocg.labels.get(node2)).append("> .\n");
167        queryStr.append("?n3").append(" rdf:type <").append(ocg.labels.get(node3)).append("> .\n");
168       
169        queryStr.append("{{");
170            queryStr.append("?n2").append(" ").append("?p2").append(" ")
171                        .append("?n3").append(" }\n UNION\n {");
172            queryStr.append("?n3").append(" ").append("?p2").append(" ")
173                        .append("?n2").append(" }}\n");
174
175        queryStr.append("} \n");
176       
177        sparqlQuery = queryStr.toString();
178        System.out.println("SELECT Simple3 by Join 2");
179        System.out.println(sparqlQuery);
180        query = QueryFactory.create(sparqlQuery, Syntax.syntaxARQ);
181        qexec = QueryExecutionFactory.sparqlService(sparqlEndpoint, query);
182        ResultSet res2 = qexec.execSelect();
183        qexec.close();
184       
185        Set<String> res1hash = new HashSet<String>();
186        while(res1.hasNext()){
187            String resstr = res1.next().toString();
188            res1hash.add(resstr);
189        }
190        while(res2.hasNext()){
191            if ( res1hash.contains(res2.next().toString())){
192                return true;
193            }
194        }
195        return false;     
196    }
197}
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。