From: <mrp...@us...> - 2014-03-18 18:59:06
|
Revision: 7996 http://sourceforge.net/p/bigdata/code/7996 Author: mrpersonick Date: 2014-03-18 18:59:02 +0000 (Tue, 18 Mar 2014) Log Message: ----------- added support for a JSON to RDF parser. ticket 862 Modified Paths: -------------- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/ServiceProviderHook.java branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriter.java branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriterFactoryForConstruct.java branches/RDR/bigdata-rdf/src/resources/service-providers/META-INF/services/org.openrdf.rio.RDFParserFactory branches/RDR/bigdata-war/src/html/js/workbench.js Added Paths: ----------- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParser.java branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParserFactory.java branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar Modified: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/ServiceProviderHook.java =================================================================== --- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/ServiceProviderHook.java 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/ServiceProviderHook.java 2014-03-18 18:59:02 UTC (rev 7996) @@ -38,6 +38,7 @@ import org.openrdf.rio.RDFWriterRegistry; import com.bigdata.rdf.model.StatementEnum; +import com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONParserFactory; import com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONWriterFactoryForConstruct; import com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONWriterFactoryForSelect; import com.bigdata.rdf.rio.ntriples.BigdataNTriplesParserFactory; @@ -118,16 +119,22 @@ r.add(new BigdataNTriplesParserFactory()); - // subclassed the turtle parser to allow for fully numeric bnode ids + // subclassed the turtle parser for RDR r.add(new BigdataTurtleParserFactory()); + /* + * Allows parsing of JSON SPARQL Results with an {s,p,o,[c]} header. + * RDR-enabled. + */ + r.add(new BigdataSPARQLResultsJSONParserFactory()); + } { final TupleQueryResultWriterRegistry r = TupleQueryResultWriterRegistry.getInstance(); - // add our custom RDR-enabled JSON writer + // add our custom RDR-enabled JSON writer (RDR-enabled) r.add(new BigdataSPARQLResultsJSONWriterFactoryForSelect()); } @@ -139,8 +146,10 @@ // r.add(new BigdataRDFXMLWriterFactory()); + // RDR-enabled r.add(new BigdataTurtleWriterFactory()); + // RDR-enabled r.add(new BigdataSPARQLResultsJSONWriterFactoryForConstruct()); } Added: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParser.java =================================================================== --- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParser.java (rev 0) +++ branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParser.java 2014-03-18 18:59:02 UTC (rev 7996) @@ -0,0 +1,574 @@ +/** +Copyright (C) SYSTAP, LLC 2006-2014. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package com.bigdata.rdf.rio.json; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.io.Reader; + +import org.apache.log4j.Logger; +import org.openrdf.model.Resource; +import org.openrdf.model.Statement; +import org.openrdf.model.URI; +import org.openrdf.model.Value; +import org.openrdf.model.ValueFactory; +import org.openrdf.rio.RDFFormat; +import org.openrdf.rio.RDFHandlerException; +import org.openrdf.rio.RDFParseException; +import org.openrdf.rio.helpers.RDFParserBase; + +import com.bigdata.rdf.model.BigdataStatement; +import com.bigdata.rdf.model.BigdataValueFactory; +import com.bigdata.rdf.model.BigdataValueFactoryImpl; +import com.fasterxml.jackson.core.JsonFactory; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; + +/** + * RDF parser for JSON SPARQL Results files that have the variables (s, p, o, + * and optionally c) in the header. + */ +public class BigdataSPARQLResultsJSONParser extends RDFParserBase { + + protected static final transient Logger log = + Logger.getLogger(BigdataSPARQLResultsJSONParser.class); + + + private LineNumberReader lineReader; + + private BigdataValueFactory vf; + + /** + * Default ctor uses a BigdataValueFactory with a namespace of "". Used + * for testing. + */ + public BigdataSPARQLResultsJSONParser() { + this(BigdataValueFactoryImpl.getInstance("")); + } + + /** + * Construct a parser with the supplied BigdataValueFactory. + */ + public BigdataSPARQLResultsJSONParser(final BigdataValueFactory vf) { + super(vf); + + this.vf = vf; + } + + /** + * Set the value factory. Must be a BigdataValueFactory because of the + * RDR syntax support. + */ + public void setValueFactory(final ValueFactory vf) { + if (vf instanceof BigdataValueFactory) { + this.vf = (BigdataValueFactory) vf; + } else { + throw new IllegalArgumentException(); + } + } + + /** + * Returns {@link BigdataSPARQLResultsJSONParserFactory#JSON}. + */ + @Override + public RDFFormat getRDFFormat() { + + return BigdataSPARQLResultsJSONParserFactory.JSON; + + } + + /** + * Parse the supplied input stream into RDF. + */ + @Override + public void parse(final InputStream is, final String baseURI) throws IOException, + RDFParseException, RDFHandlerException { + + parse(new InputStreamReader(is), baseURI); + + } + + /** + * Parse the supplied reader into RDF. + */ + @Override + public void parse(final Reader r, final String baseURI) throws IOException, + RDFParseException, RDFHandlerException { + + lineReader = new LineNumberReader(r); + // Start counting lines at 1: + lineReader.setLineNumber(1); + + // read graph from JSON in request + + final JsonFactory factory = new JsonFactory(); + + final JsonParser parser = factory.createJsonParser(lineReader); + +// final JsonParser parser = Json.createParser(lineReader); + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.START_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("head"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.START_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("vars"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.START_ARRAY) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING && !(parser.getCurrentName().equals("s"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING && !(parser.getCurrentName().equals("p"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING && !(parser.getCurrentName().equals("o"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event == JsonToken.VALUE_STRING) { + + if (!(parser.getCurrentName().equals("c"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + } + + if (event != JsonToken.END_ARRAY) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.END_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("results"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.START_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("bindings"))) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.START_ARRAY) { + reportFatalError("unexpected parse event: " + event); + } + + +// boolean startingBindings = false; +// boolean breakLoop = false; +// +// while (parser.hasNext()) { +// JsonToken event = parser.nextToken(); +// switch (event) { +// case START_ARRAY: +// if (startingBindings) +// breakLoop = true; +// case END_ARRAY: +// case START_OBJECT: +// case END_OBJECT: +// case VALUE_FALSE: +// case VALUE_NULL: +// case VALUE_TRUE: +// System.err.println(event.toString()); +// break; +// case KEY_NAME: +// if (parser.getString().equals("bindings")) +// startingBindings = true; +// System.err.println(event.toString() + " " +// + parser.getString()); +// break; +// case VALUE_STRING: +// case VALUE_NUMBER: +// System.err.println(event.toString() + " " +// + parser.getString()); +// break; +// } +// if (breakLoop) +// break; +// } + + rdfHandler.startRDF(); + + Statement stmt; + while ((stmt = parseStatement(parser)) != null) { + + if (log.isDebugEnabled()) + log.debug(stmt); + + rdfHandler.handleStatement(stmt); + + } + + rdfHandler.endRDF(); + + } + + /** + * Parse a statement from the JSON stream. + */ + private final BigdataStatement parseStatement( + final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event == null || event == JsonToken.END_ARRAY) { + + return null; + + } + + if (event != JsonToken.START_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("s"))) { + reportFatalError("unexpected parse event: " + event); + } + + final Resource s = (Resource) parseValue(parser); + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("p"))) { + reportFatalError("unexpected parse event: " + event); + } + + final URI p = (URI) parseValue(parser); + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !(parser.getCurrentName().equals("o"))) { + reportFatalError("unexpected parse event: " + event); + } + + final Value o = parseValue(parser); + + event = parser.nextToken(); + + switch (event) { + case END_OBJECT: + return vf.createStatement(s, p, o); + case FIELD_NAME: + if (!(parser.getCurrentName().equals("c"))) { + reportFatalError("unexpected parse event: " + event); + } + final Resource c = (Resource) parseValue(parser); + event = parser.nextToken(); + if (event != JsonToken.END_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + return vf.createStatement(s, p, o, c); + default: + reportFatalError("unexpected parse event: " + event); + } + + // unreachable code + return null; + + } + + /** + * Parse a value from the JSON stream. + */ + protected Value parseValue(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.START_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("type")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + final String type = parser.getText(); + + Value val = null; + + if ("sid".equals(type)) { + + val = parseSid(parser); + + } else if ("uri".equals(type)) { + + val = parseURI(parser); + + } else if ("bnode".equals(type)) { + + val = parseBNode(parser); + + } else if ("literal".equals(type)) { + + val = parseLiteral(parser); + + } else if ("typed-literal".equals(type)) { + + val = parseTypedLiteral(parser); + + } else { + + reportFatalError("unexpected parse event: " + event); + + } + + event = parser.nextToken(); + + if (event != JsonToken.END_OBJECT) { + reportFatalError("unexpected parse event: " + event); + } + + return val; + + } + + /** + * Parse a sid from the JSON stream. + */ + protected Value parseSid(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("value")) { + reportFatalError("unexpected parse event: " + event); + } + + final BigdataStatement stmt = parseStatement(parser); + + return vf.createBNode(stmt); + + } + + /** + * Parse a URI from the JSON stream. + */ + protected Value parseURI(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("value")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + return vf.createURI(parser.getText()); + + } + + /** + * Parse a bnode from the JSON stream. + */ + protected Value parseBNode(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("value")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + return vf.createBNode(parser.getText()); + + } + + /** + * Parse a plain literal or language-tagged literal from the JSON stream. + */ + protected Value parseLiteral(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME) + reportFatalError("unexpected parse event: " + event); + + if (parser.getCurrentName().equals("xml:lang")) { + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + final String lang = parser.getText(); + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("value")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + return vf.createLiteral(parser.getText(), lang); + + } else if (parser.getCurrentName().equals("value")) { + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + return vf.createLiteral(parser.getText()); + + } else { + + reportFatalError("unexpected parse event: " + event); + + // unreachable code + return null; + + } + + } + + /** + * Parse a typed literal from the JSON stream. + */ + protected Value parseTypedLiteral(final JsonParser parser) + throws RDFParseException, JsonParseException, IOException { + + JsonToken event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("datatype")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + final URI datatype = vf.createURI(parser.getText()); + + event = parser.nextToken(); + + if (event != JsonToken.FIELD_NAME && !parser.getCurrentName().equals("value")) { + reportFatalError("unexpected parse event: " + event); + } + + event = parser.nextToken(); + + if (event != JsonToken.VALUE_STRING) { + reportFatalError("unexpected parse event: " + event); + } + + return vf.createLiteral(parser.getText(), datatype); + + } + + /** + * Overrides {@link RDFParserBase#reportFatalError(String)}, adding line + * number information to the error. + */ + @Override + protected void reportFatalError(String msg) throws RDFParseException { + + reportFatalError(msg, lineReader.getLineNumber(), -1); + + } + + +} Property changes on: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParser.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParserFactory.java =================================================================== --- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParserFactory.java (rev 0) +++ branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParserFactory.java 2014-03-18 18:59:02 UTC (rev 7996) @@ -0,0 +1,68 @@ +/** +Copyright (C) SYSTAP, LLC 2006-2014. All rights reserved. + +Contact: + SYSTAP, LLC + 4501 Tower Road + Greensboro, NC 27410 + lic...@bi... + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package com.bigdata.rdf.rio.json; + +import java.nio.charset.Charset; + +import org.openrdf.rio.RDFFormat; +import org.openrdf.rio.RDFParser; +import org.openrdf.rio.RDFParserFactory; +import org.openrdf.rio.turtle.TurtleParser; + +/** + * An {@link RDFParserFactory} for Turtle parsers. + * + * @author Arjohn Kampman + * @openrdf + */ +public class BigdataSPARQLResultsJSONParserFactory implements RDFParserFactory { + + public static final RDFFormat JSON = new RDFFormat( + "JSON", // name + "application/sparql-results+json", // mime-type + Charset.forName("UTF-8"), // charset + "json", // file extension + false, // supports namespaces + true // supports contexts + ); + + static { + + RDFFormat.register(JSON); + + } + + /** + * Returns {@link RDFFormat#TURTLE}. + */ + public RDFFormat getRDFFormat() { + return JSON; + } + + /** + * Returns a new instance of {@link TurtleParser}. + */ + public RDFParser getParser() { + return new BigdataSPARQLResultsJSONParser(); + } +} Property changes on: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONParserFactory.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Modified: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriter.java =================================================================== --- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriter.java 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriter.java 2014-03-18 18:59:02 UTC (rev 7996) @@ -107,15 +107,15 @@ writer.write(", "); writeKey("value"); openBraces(); - writeKeyValue("sid-s", stmt.getSubject()); + writeKeyValue("s", stmt.getSubject()); writeComma(); - writeKeyValue("sid-p", stmt.getPredicate()); + writeKeyValue("p", stmt.getPredicate()); writeComma(); - writeKeyValue("sid-o", stmt.getObject()); + writeKeyValue("o", stmt.getObject()); if (stmt.getContext() != null) { writeComma(); - writeKeyValue("sid-c", stmt.getContext()); + writeKeyValue("c", stmt.getContext()); } closeBraces(); @@ -469,7 +469,7 @@ @Override public RDFFormat getRDFFormat() { - return BigdataSPARQLResultsJSONWriterFactoryForConstruct.JSON; + return BigdataSPARQLResultsJSONParserFactory.JSON; } } Modified: branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriterFactoryForConstruct.java =================================================================== --- branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriterFactoryForConstruct.java 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-rdf/src/java/com/bigdata/rdf/rio/json/BigdataSPARQLResultsJSONWriterFactoryForConstruct.java 2014-03-18 18:59:02 UTC (rev 7996) @@ -7,7 +7,6 @@ import java.io.OutputStream; import java.io.Writer; -import java.nio.charset.Charset; import org.openrdf.query.resultio.TupleQueryResultFormat; import org.openrdf.query.resultio.TupleQueryResultWriterFactory; @@ -23,26 +22,11 @@ */ public class BigdataSPARQLResultsJSONWriterFactoryForConstruct implements RDFWriterFactory { - public static final RDFFormat JSON = new RDFFormat( - "JSON", // name - "application/sparql-results+json", // mime-type - Charset.forName("UTF-8"), // charset - "json", // file extension - false, // supports namespaces - true // supports contexts - ); - - static { - - RDFFormat.register(JSON); - - } - /** * Returns {@link TupleQueryResultFormat#JSON}. */ public RDFFormat getRDFFormat() { - return JSON; + return BigdataSPARQLResultsJSONParserFactory.JSON; } /** Modified: branches/RDR/bigdata-rdf/src/resources/service-providers/META-INF/services/org.openrdf.rio.RDFParserFactory =================================================================== --- branches/RDR/bigdata-rdf/src/resources/service-providers/META-INF/services/org.openrdf.rio.RDFParserFactory 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-rdf/src/resources/service-providers/META-INF/services/org.openrdf.rio.RDFParserFactory 2014-03-18 18:59:02 UTC (rev 7996) @@ -1,3 +1,4 @@ com.bigdata.rdf.rio.nquads.NQuadsParserFactory com.bigdata.rdf.rio.ntriples.BigdataNTriplesParserFactory com.bigdata.rdf.rio.turtle.BigdataTurtleParserFactory +com.bigdata.rdf.rio.json.BigdataSPARQLResultsJSONParserFactory \ No newline at end of file Added: branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar =================================================================== (Binary files differ) Index: branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar =================================================================== --- branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar 2014-03-18 18:59:02 UTC (rev 7996) Property changes on: branches/RDR/bigdata-sails/lib/jackson-core-2.3.3-20140314.203554-3.jar ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Modified: branches/RDR/bigdata-war/src/html/js/workbench.js =================================================================== --- branches/RDR/bigdata-war/src/html/js/workbench.js 2014-03-18 18:16:29 UTC (rev 7995) +++ branches/RDR/bigdata-war/src/html/js/workbench.js 2014-03-18 18:59:02 UTC (rev 7996) @@ -867,7 +867,7 @@ /* Utility functions */ function getSID(binding) { - return '<< <' + binding.value['sid-s'].value + '>\n<' + binding.value['sid-p'].value + '>\n<' + binding.value['sid-o'].value + '> >>'; + return '<<\n <' + binding.value['s'].value + '>,\n<' + binding.value['p'].value + '>,\n <' + binding.value['o'].value + '>\n>>'; } function parseSID(sid) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |