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 5ee25dcc05f86ab1a0bd77f6caf014ae8f3eba85 Author: Andy Seaborne <[email protected]> AuthorDate: Mon Mar 16 21:56:42 2026 +0000 GH-3790: RDF 1.2 features are errors in ARP --- .../apache/jena/rdfxml/arp1/ARPErrorNumbers.java | 6 +++ .../apache/jena/rdfxml/arp1/impl/ElementLexer.java | 1 - .../org/apache/jena/rdfxml/arp1/impl/Names.java | 15 ++++-- .../apache/jena/rdfxml/arp1/impl/QNameLexer.java | 53 +++++++++++++++------- .../jena/rdfxml/arp1/impl/XMLBaselessContext.java | 4 +- .../rdfxml/arp1/states/WantPropertyElement.java | 7 +++ .../apache/jena/graph/test/AbstractTestGraph.java | 1 - 7 files changed, 63 insertions(+), 24 deletions(-) diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/ARPErrorNumbers.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/ARPErrorNumbers.java index ec444cf6e0..a7f4b8f563 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/ARPErrorNumbers.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/ARPErrorNumbers.java @@ -522,6 +522,12 @@ For input involving no errors, ARP creates triples in accordance with the RDF/XM */ public int ERR_RESOLVING_AGAINST_RELATIVE_BASE = 215; + /** + * RDF 1.2 feature -- ParserType="Triple", rdf:version + * Not supported by ARP. + */ + public int ERR_RDF12 = 216; + /** No longer used. (E300) * @deprecated Not used. **/ diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/ElementLexer.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/ElementLexer.java index e667bcb69e..67e9bf84b8 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/ElementLexer.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/ElementLexer.java @@ -67,7 +67,6 @@ public class ElementLexer extends QNameLexer { r==E_LI?ERR_LI_AS_TYPE: ERR_BAD_RDF_ELEMENT, getQName() + " is not allowed as an element tag here."); - } @Override void deprecatedAttribute(Taint me,int r) throws SAXParseException { diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/Names.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/Names.java index ced8527180..80fce906a5 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/Names.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/Names.java @@ -28,13 +28,13 @@ public interface Names { String xmlns = "http://www.w3.org/XML/1998/namespace".intern(); String xmlnsns = "http://www.w3.org/2000/xmlns/"; - + int A_XMLBASE = 1; int A_XMLLANG = 2; int A_XML_OTHER = 4; - + int A_XMLNS = 32768; int A_ID = 8; @@ -52,9 +52,16 @@ public interface Names { int A_TYPE = 512; int A_DEPRECATED = 1024; - + int A_BAGID = 16384; + // RDF 1.2 rdf:version. Not supported by ARP + int A_VERSION = 64*1024; + + // XML International Tag Set ("its:") - not supported by ARP + int A_ITS_VERSION = 128*1024; + int A_ITS_DIR = 256*1024; + int E_LI = 2048; int E_RDF = 4096; @@ -78,7 +85,7 @@ public interface Names { ANode RDF_OBJECT = URIReference.createNoChecks((rdfns + "object")); ANode RDF_NIL = URIReference.createNoChecks(rdfns+"nil"); - + ANode RDF_FIRST = URIReference.createNoChecks(rdfns+"first"); ANode RDF_REST = URIReference.createNoChecks(rdfns+"rest"); } diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/QNameLexer.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/QNameLexer.java index 2b4134259d..a9ab6957a6 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/QNameLexer.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/QNameLexer.java @@ -25,22 +25,24 @@ import java.util.HashSet; import java.util.Set; import org.apache.jena.rdfxml.arp1.ARPErrorNumbers; +import org.apache.jena.rdfxml.arp1.ParseException; import org.apache.jena.rdfxml.arp1.states.Frame; +import org.apache.jena.vocabulary.ITS; import org.xml.sax.SAXParseException; abstract public class QNameLexer implements Names, ARPErrorNumbers { final int bad; final int select; final Frame frame; - - + + public QNameLexer(Frame f, int good, int bad) { bad &= ~good; this.bad = bad; this.select = good|bad; this.frame = f; } - + private int xml(String wanted, int fl) { return (fl &select)== fl @@ -51,12 +53,12 @@ abstract public class QNameLexer implements Names, ARPErrorNumbers { abstract boolean isInRdfns(Taint taintMe) throws SAXParseException; abstract void error(Taint taintMe,int rslt) throws SAXParseException; abstract void deprecatedAttribute(Taint me,int rslt) throws SAXParseException; - + abstract String getLocalName(); abstract String getUri(); abstract String getQName(); - + private int rdf(Taint taintMe,String wanted, int fl) throws SAXParseException { if ((fl &select)== fl && wanted.equals(getLocalName())) { @@ -96,7 +98,7 @@ abstract public class QNameLexer implements Names, ARPErrorNumbers { // How disgusting. // When xmlns="eg:a" // xmlns is the prefix ... - if (this.getUri().equals(xmlnsns)) + if (this.getUri().equals(xmlnsns)) return A_XMLNS; throw e; } @@ -125,33 +127,50 @@ abstract public class QNameLexer implements Names, ARPErrorNumbers { return rdf(taintMe,"ID",A_ID); case 'n': /* nodeID */ return rdf(taintMe,"nodeID",A_NODEID); - case 'a': /* about aboutEach aboutEachPrefix */ - switch (getLocalName().length()) { - case 5: - return rdf(taintMe,"about",A_ABOUT); - case 9: - return rdf(taintMe,"aboutEach",A_DEPRECATED); - case 15: - return rdf(taintMe,"aboutEachPrefix",A_DEPRECATED); + case 'a': { + switch (getLocalName()) { + case "about": + return rdf(taintMe,"about",A_ABOUT); + case "aboutEach": + return rdf(taintMe,"aboutEach",A_DEPRECATED); + case "aboutEachPrefix": + return rdf(taintMe,"aboutEachPrefix",A_DEPRECATED); + case "annotationId", "annotation": { + throw new ParseException(ARPErrorNumbers.ERR_RDF12, location(), "RDF 1.2 not supported by ARP: rdf:"+getLocalName()); + } } break; + } case 'r': /* resource */ return rdf(taintMe,"resource",A_RESOURCE); case 'R': /* resource */ return rdf(taintMe,"RDF",E_RDF); - case 'd': /* datatype */ + case 'd': { /* datatype */ + if ( ITS.uri.equals(getUri()) && "dir".equals(getLocalName()) ) + throw new ParseException(ARPErrorNumbers.ERR_RDF12, location(), "RDF 1.2 not supported by ARP: its:"+getLocalName()); return rdf(taintMe,"datatype",A_DATATYPE); + } case 't': /* type */ return rdf(taintMe,"type",A_TYPE); case 'p': /* parseType */ return rdf(taintMe,"parseType",A_PARSETYPE); case 'D': /* Description */ return rdf(taintMe,"Description",E_DESCRIPTION); + case 'v': + if ( "version".equals(getLocalName()) ) { + if ( rdfns.equals(getUri()) ) + throw new ParseException(ARPErrorNumbers.ERR_RDF12, location(), "RDF 1.2 not supported by ARP: rdf:"+getLocalName()); + if ( ITS.uri.equals(getUri()) ) {} + throw new ParseException(ARPErrorNumbers.ERR_RDF12, location(), "RDF 1.2 not supported by ARP: rdf:"+getLocalName()); + } } return 0; } - + private ARPLocation location() { + return new ARPLocation(frame.arp.getLocator()); + } + // static final Set rdfnames = new HashSet(); // static { // rdfnames.add("Description"); @@ -227,6 +246,6 @@ abstract public class QNameLexer implements Names, ARPErrorNumbers { return knownRDFProperties.contains(name); } - + } diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/XMLBaselessContext.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/XMLBaselessContext.java index dfe3c89c5a..a995c806d3 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/XMLBaselessContext.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/impl/XMLBaselessContext.java @@ -53,7 +53,9 @@ public class XMLBaselessContext extends AbsXMLContext implements ARPErrorNumbers case ERR_RESOLVING_AGAINST_RELATIVE_BASE: errmsg = "Resolving against relative URI <"+baseURI+">"; break; - default: + case ERR_RDF12: + errmsg = "RDF 1.2 not supported by ARP"; + default: throw new IllegalArgumentException("Unknown error code: "+eno); } } diff --git a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/states/WantPropertyElement.java b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/states/WantPropertyElement.java index db7919c43c..501511066e 100644 --- a/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/states/WantPropertyElement.java +++ b/jena-core/src/main/java/org/apache/jena/rdfxml/arp1/states/WantPropertyElement.java @@ -23,6 +23,8 @@ package org.apache.jena.rdfxml.arp1.states; import java.util.ArrayList; +import org.apache.jena.rdfxml.arp1.ARPErrorNumbers; +import org.apache.jena.rdfxml.arp1.ParseException; import org.apache.jena.rdfxml.arp1.impl.*; import org.xml.sax.Attributes; import org.xml.sax.SAXParseException; @@ -174,10 +176,15 @@ public class WantPropertyElement extends Frame implements WantsObjectFrameI, } return new WantPropertyElement(this, x); } + if (pt.equals("Triple")) { + ARPLocation aLoc = new ARPLocation(arp.getLocator()); + throw new ParseException(ARPErrorNumbers.ERR_RDF12, aLoc, "RDF 1.2 not supported by ARP: rdf:parseType=\"Triple\""); + } if (!pt.equals("Literal")) { warning(WARN_UNKNOWN_PARSETYPE, "Unknown rdf:parseType: '" + pt + "' (treated as 'Literal')"); } + return new OuterXMLLiteral(this, x, pt); } diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java index ec62e37aa7..6285854891 100644 --- a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java +++ b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraph.java @@ -826,7 +826,6 @@ public abstract class AbstractTestGraph extends GraphTestBase { } private void testIsomorphismFile(int n, String lang, String suffix, boolean result) { - Graph g1 = getNewGraph(); Graph g2 = getNewGraph(); Model m1 = ModelFactory.createModelForGraph(g1);
