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

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

枝刈り,クラス順序変更(数字は下に)

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