• Topic
  • Discussion
  • VOS.VirtJenaSPARQLExample13(Last) -- DAVWikiAdmin? , 2017-06-29 07:38:24 Edit WebDAV System Administrator 2017-06-29 07:38:24

    Virtuoso Jena Provider - SPARQL Example 13


    import com.hp.hpl.jena.query.*;
    import com.hp.hpl.jena.graph.Triple;
    import com.hp.hpl.jena.graph.Node;
    import com.hp.hpl.jena.graph.Graph;
    import com.hp.hpl.jena.graph.test.*;
    import com.hp.hpl.jena.rdf.model.*;
    import com.hp.hpl.jena.rdf.model.RDFNode;
    import com.hp.hpl.jena.vocabulary.RDFS;
    import java.util.*;
    
    import virtuoso.jena.driver.*;
    
    public class VirtuosoSPARQLExample13 {
    
        /**
         * Executes a SPARQL query against a virtuoso url and prints results.
         */
        public static void main(String[] args) 
        {
    	String url;
    	if(args.length == 0)
    	    url = "jdbc:virtuoso://localhost:1111";
    	else
    	    url = args[0];
    
    /*** LOADING data to http://exmpl13 graph  ***/
            
            VirtModel mdata = VirtModel.openDatabaseModel("http://exmpl13", url, "dba", "dba");
            mdata.removeAll();
    
            Statement st;
    
            st = statement(mdata, "http://localhost:8890/dataspace http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdfs.org/sioc/ns#Space" );
           	mdata.add(st);
    
            st = statement(mdata, "http://localhost:8890/dataspace http://rdfs.org/sioc/ns#link http://localhost:8890/ods");
           	mdata.add(st);
    
    
            st = statement(mdata, "http://localhost:8890/dataspace/test2/weblog/test2tWeblog http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdfs.org/sioc/types#Weblog");
           	mdata.add(st);
            st = statement(mdata, "http://localhost:8890/dataspace/test2/weblog/test2tWeblog http://rdfs.org/sioc/ns#link http://localhost:8890/dataspace/test2/weblog/test2tWeblog");
           	mdata.add(st);
    
            st = statement(mdata, "http://localhost:8890/dataspace/discussion/oWiki-test1Wiki http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://rdfs.org/sioc/types#MessageBoard");
           	mdata.add(st);
            st = statement(mdata, "http://localhost:8890/dataspace/discussion/oWiki-test1Wiki http://rdfs.org/sioc/ns#link http://localhost:8890/dataspace/discussion/oWiki-test1Wiki");
           	mdata.add(st);
    
    
            // Query string.
            String queryString = "SELECT * WHERE {?s ?p ?o}" ; 
            System.out.println("Execute query=\n"+queryString) ;
            System.out.println() ;
    
    
            QueryExecution qexec = VirtuosoQueryExecutionFactory.create(queryString, mdata) ;
            try {
                ResultSet rs = qexec.execSelect() ;
                for ( ; rs.hasNext() ; ) {
    		QuerySolution result = rs.nextSolution();
    		    RDFNode s = result.get("s");
    		    RDFNode p = result.get("p");
    		    RDFNode o = result.get("o");
    		    System.out.println(" { " + s + " " + p + " " + o + " . }");
                }
            } finally {
                qexec.close() ;
            }
    
            mdata.removeRuleSet("exmpl13_rules","http://:exmpl13_schema");
    
    
    /*** LOADING rule to http://exmpl13_schema graph  ***/
    
            VirtModel mrule = VirtModel.openDatabaseModel("http://exmpl13_schema", url, "dba", "dba");
            mrule.removeAll();
    
            Resource r1 = mrule.createResource("http://rdfs.org/sioc/ns#Space") ;
            r1.addProperty(RDFS.subClassOf, rdfNode(mrule, "http://www.w3.org/2000/01/rdf-schema#Resource"));
    
            r1 = mrule.createResource("http://rdfs.org/sioc/ns#Container") ;
            r1.addProperty(RDFS.subClassOf, rdfNode(mrule, "http://rdfs.org/sioc/ns#Space"));
    
            r1 = mrule.createResource("http://rdfs.org/sioc/ns#Forum") ;
            r1.addProperty(RDFS.subClassOf, rdfNode(mrule, "http://rdfs.org/sioc/ns#Container"));
    
            r1 = mrule.createResource("http://rdfs.org/sioc/types#Weblog") ;
            r1.addProperty(RDFS.subClassOf, rdfNode(mrule, "http://rdfs.org/sioc/ns#Forum"));
    
            r1 = mrule.createResource("http://rdfs.org/sioc/types#MessageBoard") ;
            r1.addProperty(RDFS.subClassOf, rdfNode(mrule, "http://rdfs.org/sioc/ns#Forum"));
    
            r1 = mrule.createResource("http://rdfs.org/sioc/ns#link") ;
            r1.addProperty(RDFS.subPropertyOf, rdfNode(mrule, "http://rdfs.org/sioc/ns"));
    
            mrule.close();
    
            mdata.createRuleSet("exmpl13_rules","http://exmpl13_schema");
            mdata.close();
    
    
    
            VirtInfGraph infGraph = new VirtInfGraph("exmpl13_rules", false, 
            				"http://exmpl13", url, "dba", "dba");
            InfModel model = ModelFactory.createInfModel(infGraph);
            
            
            queryString = "SELECT ?s "+
                          "FROM <http://exmpl13> "+
                          "WHERE {?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>  <http://rdfs.org/sioc/ns#Space> } ";
            System.out.println("\n\nExecute query=\n"+queryString) ;
            System.out.println() ;
    
            qexec = VirtuosoQueryExecutionFactory.create(queryString, model) ;
            try {
                ResultSet rs = qexec.execSelect() ;
                for ( ; rs.hasNext() ; ) {
    		QuerySolution result = rs.nextSolution();
    		    RDFNode s = result.get("s");
    		    System.out.println(" " + s);
                }
            } finally {
                qexec.close() ;
            }
    
    
    
            queryString = "SELECT * "+
                          "FROM <http://exmpl13> "+
                          "WHERE "+
                          "{ "+
                          " ?s ?p <http://rdfs.org/sioc/ns#Space> . "+
                          " ?s ?p1 <http://localhost:8890/dataspace/test2/weblog/test2tWeblog> . "+
                          "} ";
            
            System.out.println("\n\nExecute query=\n"+queryString) ;
            System.out.println() ;
    
            qexec = VirtuosoQueryExecutionFactory.create(queryString, model) ;
            try {
                ResultSet rs = qexec.execSelect() ;
                for ( ; rs.hasNext() ; ) {
    		QuerySolution result = rs.nextSolution();
    		    RDFNode s = result.get("s");
    		    RDFNode p = result.get("p");
    		    RDFNode p1 = result.get("p1");
    		    System.out.println(" " + s + " " + p + " " + p1);
                }
            } finally {
                qexec.close() ;
            }
    
            model.close();
        }
    
    
    
        public static Statement statement( Model m, String fact )
             {
             StringTokenizer st = new StringTokenizer( fact );
             Resource sub = resource( m, st.nextToken() );
             Property pred = property( m, st.nextToken() );
             RDFNode obj = rdfNode( m, st.nextToken() );
             return m.createStatement( sub, pred, obj );    
             }    
    
        public static Resource resource( Model m, String s )
            { return (Resource) rdfNode( m, s ); }
    
        public static Property property( Model m, String s )
            { return (Property) rdfNode( m, s ).as( Property.class ); }
    
        public static RDFNode rdfNode( Model m, String s )
            { return m.asRDFNode( NodeCreateUtils.create( m, s ) ); }
    
    
    
    }