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 2026/03/18 11:07:48 UTC

(jena) 06/18: GH-3790: Plain RDF/XML output: write triple terms and text dir

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

commit e53c632a80710ce4571ec131e1a97aeadf343ef5
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Mar 8 21:31:09 2026 +0000

    GH-3790: Plain RDF/XML output: write triple terms and text dir
---
 .../jena/rdf/model/impl/StatementTermImpl.java     |  8 ++++
 .../jena/rdfxml/xmloutput/impl/RDFXML_Basic.java   | 49 +++++++++++++++++-----
 2 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementTermImpl.java b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementTermImpl.java
index f914a41ddf..b76d3a1df4 100644
--- a/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementTermImpl.java
+++ b/jena-core/src/main/java/org/apache/jena/rdf/model/impl/StatementTermImpl.java
@@ -112,4 +112,12 @@ public class StatementTermImpl extends EnhNode implements StatementTerm {
             return this;
         return new StatementTermImpl(statement, (ModelCom)m);
     }
+
+    @Override
+    public String toString() {
+        return "<<( " + statement.getSubject().toString()
+                + " " + statement.getPredicate().toString()
+                + " " + statement.getObject()
+                +" )>>";
+    }
 }
diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/RDFXML_Basic.java b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/RDFXML_Basic.java
index 152b552811..27da13563e 100644
--- a/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/RDFXML_Basic.java
+++ b/jena-core/src/main/java/org/apache/jena/rdfxml/xmloutput/impl/RDFXML_Basic.java
@@ -96,7 +96,7 @@ public class RDFXML_Basic extends BaseXMLWriter {
         }
 
 	protected void writePredicate(Statement stmt, final PrintWriter writer)
-		 {
+	{
 		final Property predicate = stmt.getPredicate();
 		final RDFNode object = stmt.getObject();
 
@@ -106,16 +106,25 @@ public class RDFXML_Basic extends BaseXMLWriter {
 					SplitRDFXML.namespace(predicate),
 					SplitRDFXML.localname(predicate)));
 
-		if (object instanceof Resource) {
-			writer.print(" ");
-			writeResourceReference(((Resource) object), writer);
-			writer.println("/>");
-		} else {
-			writeLiteral((Literal) object, writer);
-			writer.println(
-				"</"
-					+ endElementTag(SplitRDFXML.namespace(predicate), SplitRDFXML.localname(predicate))
-					+ ">");
+		switch(object) {
+		    case Resource resource ->{
+	            writer.print(" ");
+	            writeResourceReference(resource, writer);
+	            writer.println("/>");
+		    }
+		    case Literal literal ->{
+	            writeLiteral(literal, writer);
+	            writer.println("</"+ endElementTag(SplitRDFXML.namespace(predicate), SplitRDFXML.localname(predicate)) + ">");
+		    }
+		    case StatementTerm triple ->{
+		        writeTripleTerm(triple, writer);
+		        writer.print(space);
+		        writer.print(space);
+		        writer.println("</"+ endElementTag(SplitRDFXML.namespace(predicate), SplitRDFXML.localname(predicate)) + ">");
+		    }
+		    default->{
+		        throw new JenaException("Bad object: "+object);
+		    }
 		}
 	}
 
@@ -184,4 +193,22 @@ public class RDFXML_Basic extends BaseXMLWriter {
 		writer.print( Util.substituteEntitiesInElementContent( form ) );
 	}
 
+    protected void writeTripleTerm(StatementTerm triple, PrintWriter writer) {
+        writer.print(" " + rdfAt("parseType") + "=" + attributeQuoted( "Triple" )+">");
+        writer.println();
+        Statement stmt = triple.getStatement();
+        Resource subject = stmt.getSubject();
+        writer.print(space);
+        writer.print(space);
+        writeDescriptionHeader( subject, writer );
+
+        writer.print(space);
+        writer.print(space);
+        writePredicate( stmt, writer );
+
+        writer.print(space);
+        writer.print(space);
+        writeDescriptionTrailer( subject, writer );
+    }
+
 }