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:58 UTC
(jena) 16/18: GH-3790: RDF 1.2 features are errors in ARP
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 <an...@apache.org>
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);