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 <[email protected]>
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 );
+    }
+
 }

Reply via email to