This is an automated email from the ASF dual-hosted git repository.

andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git


The following commit(s) were added to refs/heads/main by this push:
     new 762cd45cde GH-2932: Fix for NodeFmtLib.strNT and added variants for 
Triple and Quad.
762cd45cde is described below

commit 762cd45cde95f2528d8b06e558edbf2f41246308
Author: Claus Stadler <[email protected]>
AuthorDate: Wed Jan 8 23:55:33 2025 +0100

    GH-2932: Fix for NodeFmtLib.strNT and added variants for Triple and Quad.
---
 .../java/org/apache/jena/riot/out/NodeFmtLib.java  | 28 ++++++++++++-
 .../org/apache/jena/riot/out/TestNodeFmtLib.java   | 46 +++++++++++++++++++++-
 2 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFmtLib.java 
b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFmtLib.java
index 87c22208d4..8ef332292a 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFmtLib.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFmtLib.java
@@ -76,6 +76,32 @@ public class NodeFmtLib
         return strNodesTTL(q.getGraph(), q.getSubject(), q.getPredicate(), 
q.getObject());
     }
 
+    /** Format a triple as N-Triples. */
+    public static String strNT(Triple triple) {
+        return strNQ(triple.getSubject(), triple.getPredicate(), 
triple.getObject(), null);
+    }
+
+    /** Format a quad as N-Quads. */
+    public static String strNQ(Quad quad) {
+        return strNQ(quad.getSubject(), quad.getPredicate(), quad.getObject(), 
quad.getGraph());
+    }
+
+    /** Format the components of a quad as N-Quads. The graph component may be 
null. */
+    public static String strNQ(Node s, Node p, Node o, Node g) {
+        StringBuilder result = new StringBuilder();
+        result.append(strNT(s));
+        result.append(" ");
+        result.append(strNT(p));
+        result.append(" ");
+        result.append(strNT(o));
+        if (g != null && !Quad.isDefaultGraph(g)) {
+            result.append(" ");
+            result.append(strNT(g));
+        }
+        result.append(" .");
+        return result.toString();
+    }
+
     /** With Turtle abbreviation for literals, no prefixes of base URI */
     public static String strTTL(Node node) {
         return strNode(node, ttlFormatter);
@@ -83,7 +109,7 @@ public class NodeFmtLib
 
     /** Format in N-triples style. */
     public static String strNT(Node node) {
-        return strNode(node, ttlFormatter);
+        return strNode(node, ntFormatter);
     }
 
     /** Format in N-triples style. */
diff --git 
a/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmtLib.java 
b/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmtLib.java
index f9691dae60..36715e49ed 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmtLib.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/out/TestNodeFmtLib.java
@@ -21,6 +21,10 @@ package org.apache.jena.riot.out;
 import static org.junit.Assert.assertEquals;
 
 import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.sparql.core.Quad;
+import org.apache.jena.sparql.sse.SSE;
 import org.apache.jena.sparql.util.NodeFactoryExtra ;
 import org.apache.jena.sys.JenaSystem;
 import org.apache.jena.vocabulary.RDF ;
@@ -65,7 +69,7 @@ public class TestNodeFmtLib
     @Test public void fmtNode_00() { testNT ("<a>", "<a>") ; }
 
     @Test public void fmtNode_11() { testNT ("<"+RDF.getURI()+"type>", 
"<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>") ; }
-    @Test public void fmtNode_12() { testNT ("'123'^^xsd:integer", "123") ; }
+    @Test public void fmtNode_12() { testNT ("'123'^^xsd:integer", 
"\"123\"^^<http://www.w3.org/2001/XMLSchema#integer>") ; }
     @Test public void fmtNode_13() { testNT ("'abc'^^xsd:integer", 
"\"abc\"^^<http://www.w3.org/2001/XMLSchema#integer>") ; }
 
     // NB - Not 'a' which is position sensitive.
@@ -103,4 +107,44 @@ public class TestNodeFmtLib
         assertEquals(output, x) ;
     }
 
+    @Test
+    public void strNT_triple() {
+        Triple triple = SSE.parseTriple("(<urn:s> rdf:type <urn:o>)");
+        assertEquals(
+            "<urn:s> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:o> 
.",
+            NodeFmtLib.strNT(triple));
+    }
+
+    @Test
+    public void strNT_triple_bnode() {
+        // Note that <_:abc> actually parses as a blank node and preserves its 
label.
+        Triple triple = SSE.parseTriple("(<_:abc> rdf:type <urn:o>)");
+        assertEquals(
+            "_:Babc <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:o> 
.",
+            NodeFmtLib.strNT(triple));
+    }
+
+    @Test
+    public void strNT_triple_int() {
+        Triple triple = SSE.parseTriple("(<urn:s> <urn:value> 1)");
+        assertEquals(
+            "<urn:s> <urn:value> 
\"1\"^^<http://www.w3.org/2001/XMLSchema#integer> .",
+            NodeFmtLib.strNT(triple));
+    }
+
+    @Test
+    public void strNQ_quad_namedGraph() {
+        Quad quad = SSE.parseQuad("(<urn:g> <urn:s> rdf:type <urn:o>)");
+        assertEquals(
+            "<urn:s> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:o> 
<urn:g> .",
+            NodeFmtLib.strNQ(quad));
+    }
+
+    @Test
+    public void strNQ_quad_defaultGraph() {
+        Quad quad = SSE.parseQuad("(_ <urn:s> rdf:type <urn:o>)");
+        assertEquals(
+            "<urn:s> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <urn:o> 
.",
+            NodeFmtLib.strNQ(quad));
+    }
 }

Reply via email to