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 ); + } + }
