You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/09/22 21:45:35 UTC
svn commit: r1174346 - in /incubator/jena/Jena2/ARQ/trunk: src-dev/dev/
src-test/com/hp/hpl/jena/sparql/core/ src-test/org/openjena/riot/out/
src/com/hp/hpl/jena/sparql/util/ src/org/openjena/riot/out/
Author: andy
Date: Thu Sep 22 19:45:35 2011
New Revision: 1174346
URL: http://svn.apache.org/viewvc?rev=1174346&view=rev
Log:
NodeFmtUtils
Modified:
incubator/jena/Jena2/ARQ/trunk/src-dev/dev/DevARQ.java
incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/core/TestEsc.java
incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/out/TestNodeFmtLib.java
incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/util/FmtUtils.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/EscapeStr.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFmtLib.java
incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFormatterNT.java
Modified: incubator/jena/Jena2/ARQ/trunk/src-dev/dev/DevARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-dev/dev/DevARQ.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-dev/dev/DevARQ.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-dev/dev/DevARQ.java Thu Sep 22 19:45:35 2011
@@ -3,8 +3,7 @@ package dev ;
public class DevARQ
{
- // NodeFmtLib to use a NodeFormatter.
- // BIO: RS = vars list and the bindings.
+ // BIO: Table = vars list and the bindings.
// Assembly configuration: <appendAssemblyId>false</appendAssemblyId>
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/core/TestEsc.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/core/TestEsc.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/core/TestEsc.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/com/hp/hpl/jena/sparql/core/TestEsc.java Thu Sep 22 19:45:35 2011
@@ -56,8 +56,6 @@ public class TestEsc extends TestCase
@Test public void testEscUni17() { execTest("x\\tx\\nx\\r", "x\tx\nx\r") ; }
@Test public void testEscUni18() { execTest("x\\t\\n\\r", "x\t\n\r") ; }
-
-
private void execTestFail(String input)
{
try {
Modified: incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/out/TestNodeFmtLib.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/out/TestNodeFmtLib.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/out/TestNodeFmtLib.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-test/org/openjena/riot/out/TestNodeFmtLib.java Thu Sep 22 19:45:35 2011
@@ -6,6 +6,10 @@
package org.openjena.riot.out;
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.util.NodeFactory ;
+import com.hp.hpl.jena.vocabulary.RDF ;
+
import org.junit.Test ;
import org.openjena.atlas.junit.BaseTest ;
@@ -14,6 +18,8 @@ public class TestNodeFmtLib extends Base
// : is 3A
// - is 2D
+ // BNode labels.
+
@Test public void encode_01() { testenc("abc", "Babc") ; }
@Test public void encode_02() { testenc("-", "BX2D") ; }
@Test public void encode_03() { testenc("abc:def-ghi", "BabcX3AdefX2Dghi") ; }
@@ -28,6 +34,7 @@ public class TestNodeFmtLib extends Base
@Test public void rt_06() { testencdec("X-") ; }
@Test public void rt_07() { testencdec("-123:456:xyz") ; }
+
private void testenc(String input, String expected)
{
String x = NodeFmtLib.encodeBNodeLabel(input) ;
@@ -40,6 +47,20 @@ public class TestNodeFmtLib extends Base
String y = NodeFmtLib.decodeBNodeLabel(x) ;
assertEquals(input, y) ;
}
+
+ @Test public void fmtNode_01() { test ("<a>", "<a>") ; }
+ @Test public void fmtNode_02() { test ("<"+RDF.getURI()+"type>", "rdf:type") ; }
+ @Test public void fmtNode_03() { test ("'123'^^xsd:integer", "123") ; }
+ @Test public void fmtNode_04() { test ("'abc'^^xsd:integer", "\"abc\"^^xsd:integer") ; }
+
+ private static void test(String node, String output)
+ { test(NodeFactory.parseNode(node) , output) ; }
+
+ private static void test(Node node, String output)
+ {
+ String x = NodeFmtLib.str(node) ;
+ assertEquals(output, x) ;
+ }
}
/*
Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/util/FmtUtils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/util/FmtUtils.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/util/FmtUtils.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/util/FmtUtils.java Thu Sep 22 19:45:35 2011
@@ -34,6 +34,8 @@ import com.hp.hpl.jena.vocabulary.XSD ;
public class FmtUtils
{
+ // OLD CODE - being replaces by riot.NodeFmtLib
+
// Consider withdrawing non-serialzation context forms of this.
// Or a temporary SerialzationContext does not abbreviate bNodes.
static final String indentPrefix = " " ;
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/EscapeStr.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/EscapeStr.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/EscapeStr.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/EscapeStr.java Thu Sep 22 19:45:35 2011
@@ -22,6 +22,8 @@ import java.io.IOException ;
import java.io.StringWriter ;
import java.io.Writer ;
+import com.hp.hpl.jena.sparql.lang.ParserBase ;
+
import org.openjena.atlas.io.IO ;
import org.openjena.atlas.io.OutputUtils ;
@@ -116,4 +118,16 @@ public class EscapeStr
}
}
}
+
+ // Utilities to remove escapes
+
+ public static String unescapeStr(String s)
+ { return unescape(s, '\\') ; }
+
+ // Worker function
+ public static String unescape(String s, char escape)
+ {
+ return ParserBase.unescape(s, escape, false, -1, -1) ;
+
+ }
}
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFmtLib.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFmtLib.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFmtLib.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFmtLib.java Thu Sep 22 19:45:35 2011
@@ -7,115 +7,91 @@
package org.openjena.riot.out;
+import java.io.StringWriter ;
+import java.io.Writer ;
+import java.net.MalformedURLException ;
+import java.util.Map ;
+
import org.openjena.atlas.lib.Bytes ;
import org.openjena.atlas.lib.Chars ;
-import org.openjena.riot.RiotException ;
import org.openjena.riot.system.PrefixMap ;
import org.openjena.riot.system.Prologue ;
import org.openjena.riot.system.RiotChars ;
import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.graph.Node_Literal ;
import com.hp.hpl.jena.graph.Triple ;
-import com.hp.hpl.jena.rdf.model.RDFNode ;
+import com.hp.hpl.jena.iri.IRI ;
+import com.hp.hpl.jena.iri.IRIFactory ;
+import com.hp.hpl.jena.iri.IRIRelativize ;
import com.hp.hpl.jena.shared.PrefixMapping ;
+import com.hp.hpl.jena.sparql.ARQConstants ;
import com.hp.hpl.jena.sparql.core.Quad ;
-import com.hp.hpl.jena.sparql.util.FmtUtils ;
+/** Presentation utilitiles for Nodes, Triples, Quads and more */
public class NodeFmtLib
{
- // TODO Switch to using NodeFormatter.
-
-
- // FmtUtils: This writes abbreviated bnodes (_:b0 etc)
- // These utilities are lower level and reflect the bNodes label.
-
+ // See OutputLangUtils.
+ // See and use EscapeStr
+ static PrefixMap dftPrefixMap = new PrefixMap() ;
+ static {
+ PrefixMapping pm = ARQConstants.getGlobalPrefixMap() ;
+ Map<String, String> map = pm.getNsPrefixMap() ;
+ for ( Map.Entry<String, String> e : map.entrySet() )
+ dftPrefixMap.add(e.getKey(), e.getValue() ) ;
+ }
+
public static String str(Triple t)
{
- return
- serialize(t.getSubject()) + " " +
- serialize(t.getPredicate()) + " " +
- serialize(t.getObject()) ;
+ return str(t.getSubject(), t.getPredicate(),t.getObject()) ;
}
public static String str(Quad q)
{
- return
- serialize(q.getGraph()) + " " +
- serialize(q.getSubject()) + " " +
- serialize(q.getPredicate()) + " " +
- serialize(q.getObject()) ;
+ return str(q.getGraph(), q.getSubject(), q.getPredicate(), q.getObject()) ;
}
+
- private static final boolean onlySafeBNodeLabels = false ;
+ // Worker
+ public static String str(Node ... nodes)
+ {
+ StringWriter sw = new StringWriter() ;
+ boolean first = true ;
+ for ( Node n : nodes )
+ {
+ if ( ! first )
+ {
+ sw.append(" ") ;
+ first = false ;
+ }
+ str(sw, n) ;
+ }
+ return sw.toString() ;
+ }
- public static String displayStr(Node n) { return FmtUtils.stringForNode(n) ; }
+ //public static String str(Node n)
- public static String serialize(Node n)
- { return serialize(n, null, null) ; }
+ private static final boolean onlySafeBNodeLabels = true ;
- public static String serialize(Node n, Prologue prologue)
- { return serialize(n, prologue.getBaseURI(), prologue.getPrefixMap()) ; }
+ //public static String displayStr(Node n) { return serialize(n) ; }
-
- /** Encoding of a node so it can be reconstructed */
- public static String serialize(Node n, String base, PrefixMap prefixMap)
- {
- // See also Nodec.
- // See also OutputLangUtils - merge and this is a buffering call.
-
- if ( n == null )
- return "<<null>>" ;
-
- if ( n.isBlank() )
- {
- String str = n.getBlankNodeLabel() ;
- // c.f. OutputLangUtils
- if ( onlySafeBNodeLabels )
- str = encodeBNodeLabel(str) ;
- return "_:"+str ;
- }
-
- if ( n.isLiteral() )
- return FmtUtils.stringForLiteral((Node_Literal)n, null) ;
+ public static void str(Writer w, Node n)
+ { serialize(w, n, null, null) ; }
- if ( n.isURI() )
- {
- String uri = n.getURI() ;
- return stringForURI(uri, base, prefixMap) ;
- }
-
- // Safe name?
- if ( n.isVariable() )
- return "?"+n.getName() ;
-//
-// if ( n.equals(Node.ANY) )
-// return "ANY" ;
-
- throw new RiotException("Failed to turn a node into a string: "+n) ;
- //return null ;
- }
-
- // c.f. FmtUtils.stringForURI
- // Uses PrefixMap, not PrefixMapping
- static String stringForURI(String uri, String base, PrefixMap mapping)
+ public static void serialize(Writer w, Node n, Prologue prologue)
+ { serialize(w, n, prologue.getBaseURI(), prologue.getPrefixMap()) ; }
+
+
+ public static void serialize(Writer w, Node n, String base, PrefixMap prefixMap)
{
- if ( mapping != null )
- {
- String pname = mapping.abbreviate(uri) ;
- if ( pname != null )
- return pname ;
- }
- if ( base != null )
- {
- String x = FmtUtils.abbrevByBase(uri, base) ;
- if ( x != null )
- return "<"+x+">" ;
- }
- return FmtUtils.stringForURI(uri) ;
+ if ( prefixMap == null )
+ prefixMap = dftPrefixMap ;
+ NodeFormatter formatter = new NodeFormatterTTL(base, prefixMap) ;
+ formatter.format(w, n) ;
}
+ // ---- Blank node labels.
+
// Strict N-triples only allows [A-Za-z][A-Za-z0-9]
static char encodeMarkerChar = 'X' ;
@@ -193,32 +169,108 @@ public class NodeFmtLib
return buffer.toString() ;
}
-
- //public static String safeBNodeLabel(String label)
+ // ---- Relative URIs.
- public static String displayStr(Triple t, PrefixMapping prefixMapping)
+ static private int relFlags = IRIRelativize.SAMEDOCUMENT | IRIRelativize.CHILD ;
+ static public String abbrevByBase(String uri, String base)
{
- return FmtUtils.stringForTriple(t, prefixMapping) ;
+ if ( base == null )
+ return null ;
+ IRI baseIRI = IRIFactory.jenaImplementation().construct(base) ;
+ IRI rel = baseIRI.relativize(uri, relFlags) ;
+ String r = null ;
+ try { r = rel.toASCIIString() ; }
+ catch (MalformedURLException ex) { r = rel.toString() ; }
+ return r ;
}
- public static String displayStr(RDFNode obj)
+ // ---- Escaping.
+
+ static boolean applyUnicodeEscapes = false ;
+
+ static EscapeStr escaper = new EscapeStr(false) ;
+
+ // take a string and make it safe for writing.
+ public static String stringEsc(String s)
+ {
+ return stringEsc(s, true) ;
+ }
+
+ public static String stringEsc(String s, boolean singleLineString)
{
- return FmtUtils.stringForRDFNode(obj) ;
+ StringWriter sw = new StringWriter() ;
+ if ( singleLineString )
+ escaper.writeStr(sw, s) ;
+ else
+ escaper.writeStrMultiLine(sw, s) ;
+ return sw.toString() ;
}
- //public static String str(Quad quad) {}
+ public static void stringEsc(StringBuilder sbuff, String s)
+ { stringEsc( sbuff, s, true ) ; }
+
+ public static void stringEsc(StringBuilder sbuff, String s, boolean singleLineString)
+ {
+ int len = s.length() ;
+ for (int i = 0; i < len; i++) {
+ char c = s.charAt(i);
+
+ // Escape escapes and quotes
+ if (c == '\\' || c == '"' )
+ {
+ sbuff.append('\\') ;
+ sbuff.append(c) ;
+ continue ;
+ }
+
+ // Characters to literally output.
+ // This would generate 7-bit safe files
+// if (c >= 32 && c < 127)
+// {
+// sbuff.append(c) ;
+// continue;
+// }
+
+ // Whitespace
+ if ( singleLineString && ( c == '\n' || c == '\r' || c == '\f' ) )
+ {
+ if (c == '\n') sbuff.append("\\n");
+ if (c == '\t') sbuff.append("\\t");
+ if (c == '\r') sbuff.append("\\r");
+ if (c == '\f') sbuff.append("\\f");
+ continue ;
+ }
+
+ // Output as is (subject to UTF-8 encoding on output that is)
+
+ if ( ! applyUnicodeEscapes )
+ sbuff.append(c) ;
+ else
+ {
+ // Unicode escapes
+ // c < 32, c >= 127, not whitespace or other specials
+ if ( c >= 32 && c < 127 )
+ {
+ sbuff.append(c) ;
+ }
+ else
+ {
+ String hexstr = Integer.toHexString(c).toUpperCase();
+ int pad = 4 - hexstr.length();
+ sbuff.append("\\u");
+ for (; pad > 0; pad--)
+ sbuff.append("0");
+ sbuff.append(hexstr);
+ }
+ }
+ }
+ }
// public static String stringEsc(String s) { return FmtUtils.stringEsc(s) ; }
//
// public static String stringEsc(String s, boolean singleLineString)
// { return FmtUtils.stringEsc(s, singleLineString) ; }
-//
-// public static void stringEsc(StringBuilder sbuff, String s)
-// { FmtUtils.stringEsc(sbuff, s) ; }
-//
-// public static void stringEsc(StringBuilder sbuff, String s, boolean singleLineString)
-// { FmtUtils.stringEsc(sbuff, s, singleLineString) ; }
//
// public static String unescapeStr(String s) { return ParserBase.unescapeStr(s) ; }
Modified: incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFormatterNT.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFormatterNT.java?rev=1174346&r1=1174345&r2=1174346&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFormatterNT.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/org/openjena/riot/out/NodeFormatterNT.java Thu Sep 22 19:45:35 2011
@@ -67,7 +67,7 @@ public class NodeFormatterNT extends Nod
} catch (IOException ex) { IO.exception(ex) ; }
}
- private void writeEscaped(Writer w,String lex) throws IOException
+ private void writeEscaped(Writer w, String lex) throws IOException
{
w.write('"') ;
w.write(lex) ; // DO BETTER