001: /*
002: * (c) Copyright 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: * [See end of file]
005: */
006:
007: package arq.examples;
008:
009: // The ARQ application API.
010: import com.hp.hpl.jena.graph.Triple;
011: import com.hp.hpl.jena.query.*;
012: import com.hp.hpl.jena.rdf.model.*;
013: import com.hp.hpl.jena.sparql.core.Var;
014: import com.hp.hpl.jena.sparql.syntax.ElementGroup;
015: import com.hp.hpl.jena.sparql.util.IndentedWriter;
016: import com.hp.hpl.jena.vocabulary.DC;
017:
018: /** Example : Build a query synatx programmatically.
019: * Note: it may be better to build and execute an algebra expression. See other examples.
020: *
021: * @author Andy Seaborne
022: */
023:
024: public class ExProg1 {
025: static public final String NL = System
026: .getProperty("line.separator");
027:
028: public static void main(String[] args) {
029: Model model = createModel();
030:
031: Query query = QueryFactory.make();
032:
033: query.setQueryType(Query.QueryTypeSelect);
034:
035: // Build pattern
036:
037: ElementGroup elg = new ElementGroup();
038:
039: Var varTitle = Var.alloc("title");
040: Var varX = Var.alloc("x");
041:
042: Triple t1 = new Triple(varX, DC.title.asNode(), varTitle);
043: elg.addTriplePattern(t1);
044:
045: // Don't use bNodes for anon variables. The conversion is done in parsing.
046: // BNodes here are assumed to be values from the target graph.
047: Triple t2 = new Triple(varX, DC.description.asNode(), Var
048: .alloc("desc"));
049: elg.addTriplePattern(t2);
050:
051: // Attach the group to query.
052: query.setQueryPattern(elg);
053:
054: // Choose what we want - SELECT *
055: //query.setQueryResultStar(true) ;
056: query.addResultVar(varTitle);
057:
058: // Print query with line numbers
059: // Prefix mapping just helps serialization
060: query.getPrefixMapping().setNsPrefix("dc", DC.getURI());
061: query.serialize(new IndentedWriter(System.out, true));
062: System.out.println();
063:
064: QueryExecution qexec = QueryExecutionFactory.create(query,
065: model);
066:
067: try {
068: // Assumption: it's a SELECT query.
069: ResultSet rs = qexec.execSelect();
070:
071: // The order of results is undefined.
072: System.out.println("Titles: ");
073: for (; rs.hasNext();) {
074: QuerySolution rb = rs.nextSolution();
075:
076: // Get title - variable names do not include the '?' (or '$')
077: RDFNode x = rb.get("title");
078:
079: // Check the type of the result value
080: if (x instanceof Literal) {
081: Literal titleStr = (Literal) x;
082: System.out.println(" " + titleStr);
083: } else
084: System.out.println("Strange - not a literal: " + x);
085:
086: }
087: } finally {
088: // QueryExecution objects should be closed to free any system resources
089: qexec.close();
090: }
091: }
092:
093: public static Model createModel() {
094: Model model = ModelFactory.createDefaultModel();
095:
096: Resource r1 = model.createResource("http://example.org/book#1");
097: Resource r2 = model.createResource("http://example.org/book#2");
098: Resource r3 = model.createResource("http://example.org/book#3");
099:
100: r1.addProperty(DC.title, "SPARQL - the book").addProperty(
101: DC.description, "A book about SPARQL");
102:
103: r2.addProperty(DC.title, "Advanced techniques for SPARQL");
104:
105: r3.addProperty(DC.title, "Jena - an RDF framework for Java")
106: .addProperty(DC.description, "A book about Jena");
107:
108: return model;
109: }
110: }
111:
112: /*
113: * (c) Copyright 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
114: * All rights reserved.
115: *
116: * Redistribution and use in source and binary forms, with or without
117: * modification, are permitted provided that the following conditions
118: * are met:
119: * 1. Redistributions of source code must retain the above copyright
120: * notice, this list of conditions and the following disclaimer.
121: * 2. Redistributions in binary form must reproduce the above copyright
122: * notice, this list of conditions and the following disclaimer in the
123: * documentation and/or other materials provided with the distribution.
124: * 3. The name of the author may not be used to endorse or promote products
125: * derived from this software without specific prior written permission.
126: *
127: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
128: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
129: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
130: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
131: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
132: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
133: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
134: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
135: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
136: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
137: */
|