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 2024/08/07 08:28:38 UTC
(jena) branch main updated (a3f605c194 -> 48896cc034)
This is an automated email from the ASF dual-hosted git repository.
andy pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
from a3f605c194 GH-2619: Fix writing invalid rdf:XMLLiterals
new ae2d928799 Comments about errorprone and checkerframework artifacts
new cc8888ab72 Tidy comments
new 5b1ac91893 Remove unused QueryIteratorCaching
new d8377c6d4f Tidy white space
new 48896cc034 Use arrow switch statements
The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java | 87 ++++++++++------------
.../jena/sparql/engine/ExecutionContext.java | 3 +-
.../apache/jena/sparql/engine/binding/Binding.java | 2 +-
.../jena/sparql/engine/iterator/QueryIter.java | 3 +-
.../sparql/engine/iterator/QueryIteratorBase.java | 20 +++--
.../engine/iterator/QueryIteratorCaching.java | 76 -------------------
.../sparql/engine/iterator/QueryIteratorCheck.java | 1 -
.../engine/iterator/QueryIteratorWrapper.java | 1 -
.../jena/base/module/SubsystemLifecycle.java | 20 +++--
.../org/apache/jena/base/module/package-info.java | 1 -
pom.xml | 25 ++++++-
11 files changed, 91 insertions(+), 148 deletions(-)
delete mode 100644 jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCaching.java
(jena) 01/05: Comments about errorprone and checkerframework artifacts
Posted by an...@apache.org.
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 ae2d92879961f6b93aa473250a47f887e8f8e18f
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Aug 4 13:59:54 2024 +0100
Comments about errorprone and checkerframework artifacts
---
pom.xml | 25 ++++++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index 542c3b358a..5f540e7efc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -419,11 +419,22 @@
<!--
com.google.errorprone:error_prone_annotations
is used by gson, guava and caffeine.
- It can lead to dependency convergence errors
- (the dependencies using it are all at the same depth).
+ It can lead to dependency convergence errors.
+
+ The dependencies using it are all at the same depth.
Either explicitly depend here or choose one
- route and exclude from the others.
+ route and exclude from the others or exclude
+ systematically. If the dependency plugin is being used,
+ it will likely report errors because it is stricter than
+ the maven resolution rule.
+
Gson is probably the one to choose as the preferred route.
+ https://github.com/google/gson/issues/2681#issuecomment-2125845040
+
+ If using runtime checking tools, checkerframework may be needed
+ https://checkerframework.org/manual/#faq-runtime-retention
+
+ The downside of including them is that they bringing in IDE autocomplete names.
-->
<!--
<dependency>
@@ -437,6 +448,14 @@
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${ver.gson}</version>
+ <!--
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.errorprone</groupId>
+ <artifactId>error_prone_annotations</artifactId>
+ </exclusion>
+ </exclusions>
+ -->
</dependency>
<dependency>
(jena) 03/05: Remove unused QueryIteratorCaching
Posted by an...@apache.org.
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 5b1ac91893d86692e0f737fa16211c0fc8439545
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Mon Aug 5 08:29:00 2024 +0100
Remove unused QueryIteratorCaching
---
.../engine/iterator/QueryIteratorCaching.java | 76 ----------------------
1 file changed, 76 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCaching.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCaching.java
deleted file mode 100644
index a7f3b70721..0000000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCaching.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.sparql.engine.iterator;
-
-import java.util.ArrayList ;
-import java.util.List ;
-
-import org.apache.jena.atlas.io.IndentedWriter ;
-import org.apache.jena.sparql.engine.QueryIterator ;
-import org.apache.jena.sparql.engine.binding.Binding ;
-import org.apache.jena.sparql.serializer.SerializationContext ;
-
-/** A caching QueryIterator. On demand, the application can ask for a new
- * query iterator which will repeat the bindings yielded so far.
- */
-
-public
-class QueryIteratorCaching extends QueryIteratorWrapper
-{
- // Not tracked.
- List<Binding> cache = new ArrayList<>() ;
-
- public QueryIteratorCaching(QueryIterator qIter)
- {
- super(qIter) ;
- }
-
- @Override
- protected Binding moveToNextBinding()
- {
- Binding b = super.moveToNextBinding() ;
- cache.add(b) ;
- return b ;
- }
-
- @Override
- public void output(IndentedWriter out, SerializationContext sCxt)
- {}
-
- public QueryIterator createRepeat()
- {
- List<Binding> elements = cache ;
- if ( super.hasNext() )
- // If the iterator isn't finished, copy what we have so far.
- elements = new ArrayList<>(cache) ;
-
- return QueryIterPlainWrapper.create(elements.iterator(), null) ;
- }
-
- public static QueryIterator reset(QueryIterator qIter)
- {
- if ( qIter instanceof QueryIteratorCaching )
- {
- QueryIteratorCaching cIter = (QueryIteratorCaching)qIter ;
- return cIter.createRepeat() ;
- }
-
- return qIter ;
- }
-}
(jena) 04/05: Tidy white space
Posted by an...@apache.org.
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 d8377c6d4f639a676bc4690c2896038e88bc92bd
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Mon Aug 5 08:53:36 2024 +0100
Tidy white space
---
.../java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
index 1652836697..2eef035937 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
@@ -966,8 +966,8 @@ class ParserRDFXML_SAX
String qName = attributes.getQName(index);
if ( namespace == null || namespace.isEmpty() ) {
- if ( outputWarnings ){
- //In SAX, xmlns: is qname, but namespace and local name are "".
+ if ( outputWarnings ) {
+ // In SAX, xmlns: is a qname, but namespace and local name are "".
if ( ! localName.isEmpty() ) // Skip XML namespace declarations.
RDFXMLparseWarning("XML attribute '"+qName+"' used for RDF property attribute - ignored", position);
}
(jena) 02/05: Tidy comments
Posted by an...@apache.org.
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 cc8888ab72048b37b82e646f293acb001cd2f141
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Sun Aug 4 14:00:49 2024 +0100
Tidy comments
---
.../apache/jena/sparql/engine/ExecutionContext.java | 3 ++-
.../apache/jena/sparql/engine/binding/Binding.java | 2 +-
.../jena/sparql/engine/iterator/QueryIter.java | 3 ++-
.../sparql/engine/iterator/QueryIteratorBase.java | 20 ++++++++++++--------
.../sparql/engine/iterator/QueryIteratorCheck.java | 1 -
.../sparql/engine/iterator/QueryIteratorWrapper.java | 1 -
.../apache/jena/base/module/SubsystemLifecycle.java | 20 +++++++++++++-------
.../org/apache/jena/base/module/package-info.java | 1 -
8 files changed, 30 insertions(+), 21 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java
index 87329d4ef7..8d67401a3c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/ExecutionContext.java
@@ -23,6 +23,7 @@ import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.atlas.logging.Log;
import org.apache.jena.graph.Graph;
import org.apache.jena.query.ARQ;
@@ -123,7 +124,7 @@ public class ExecutionContext implements FunctionEnv
public Iterator<QueryIterator> listAllIterators() {
if ( allIterators == null )
- return null;
+ return Iter.nullIterator();
return allIterators.iterator();
}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/Binding.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/Binding.java
index 9bb7fcf4b7..d7c7efbc5c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/Binding.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/binding/Binding.java
@@ -57,7 +57,7 @@ public interface Binding
/** Iterate over all variables of this binding. */
public Iterator<Var> vars();
- /** Iterate over all variables of this binding. */
+ /** Collect all variables of this binding. */
public Set<Var> varsMentioned();
/** Operate on each entry. */
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
index c435afb67d..3dbf653640 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
@@ -30,7 +30,8 @@ import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.serializer.SerializationContext ;
/**
- * This class provides the general machinery for iterators. */
+ * This class provides the machinery for trackable iterators.
+ */
public abstract class QueryIter extends QueryIteratorBase
{
// Volatile just to make it safe to concurrent updates
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
index 77d922f897..4177328edb 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
@@ -35,8 +35,8 @@ import org.apache.jena.sparql.util.PrintSerializableBase;
* <ul>
* <li>autoclose when the iterator runs out</li>
* <li>async cancellation</li>
- * <li>final {@link #hasNext()} and {@link #next()} to check for abort.
- Implementation provide {@link #hasNextBinding()}, {@link #moveToNextBinding()}</li>
+ * <li>final {@link #hasNext()} and {@link #next()} to check for cancellation.
+ Subclasses provide two operations: {@link #hasNextBinding()}, {@link #moveToNextBinding()}</li>
* </ul>
*/
@@ -55,13 +55,14 @@ public abstract class QueryIteratorBase
private volatile boolean cancelOnce = false;
private Object cancelLock = new Object();
- public QueryIteratorBase() {
+ /** QueryIteratorBase with no cancellation facility */
+ protected QueryIteratorBase() {
// No async cancellation.
this(null);
}
/** Argument : shared flag for cancellation. */
- public QueryIteratorBase(AtomicBoolean cancelSignal) {
+ protected QueryIteratorBase(AtomicBoolean cancelSignal) {
if ( cancelSignal == null )
// Allows for direct cancel (not timeout).
cancelSignal = new AtomicBoolean(false);
@@ -76,12 +77,15 @@ public abstract class QueryIteratorBase
// -------- The contract with the subclasses
- /** Implement this, not hasNext() */
+ /**
+ * Implement this, not hasNext()
+ */
protected abstract boolean hasNextBinding();
- /** Implement this, not next() or nextBinding()
- Returning null is turned into NoSuchElementException
- Does not need to call hasNext (can presume it is true) */
+ /**
+ * Implement this, not next() or nextBinding() Returning null is turned into
+ * NoSuchElementException Does not need to call hasNext (can presume it is true)
+ */
protected abstract Binding moveToNextBinding();
/** Close the iterator. */
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCheck.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCheck.java
index 22cc116456..5bd11f71a5 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCheck.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorCheck.java
@@ -28,7 +28,6 @@ import org.apache.jena.sparql.engine.QueryIterator ;
import org.apache.jena.sparql.serializer.SerializationContext ;
/** Query iterator that checks everything was closed correctly */
-
public class QueryIteratorCheck extends QueryIteratorWrapper
{
private ExecutionContext execCxt ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorWrapper.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorWrapper.java
index f49cdb169f..2f524a5e4d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorWrapper.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorWrapper.java
@@ -25,7 +25,6 @@ import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.serializer.SerializationContext;
/** Wrap a QueryIterator so it can have some/all of it's methods intercepted. */
-
public class QueryIteratorWrapper extends QueryIteratorBase {
protected QueryIterator iterator;
diff --git a/jena-base/src/main/java/org/apache/jena/base/module/SubsystemLifecycle.java b/jena-base/src/main/java/org/apache/jena/base/module/SubsystemLifecycle.java
index dd3f1f28c6..703dd6cd6f 100644
--- a/jena-base/src/main/java/org/apache/jena/base/module/SubsystemLifecycle.java
+++ b/jena-base/src/main/java/org/apache/jena/base/module/SubsystemLifecycle.java
@@ -21,18 +21,24 @@ package org.apache.jena.base.module;
/** Lifecycle interface for modules and subsystems. */
public interface SubsystemLifecycle {
- /** start - a module should be ready to operate when this returns. */
+ /**
+ * start - a module should be ready to operate when this returns.
+ */
public void start();
- /** stop - a module should have performed any shutdown operations by the time this returns.
- * Caution: code must be prepared to operate without assuming this called.
- * Abrupt termination of the JVM is always possible.
+ /**
+ * stop - a module should have performed any shutdown operations by the time this
+ * returns. Caution: code must be prepared to operate without assuming this
+ * called. Abrupt termination of the JVM is always possible.
*/
public void stop();
- /** Provide a marker as to the level to order initialization, 10,20,30,...
- * See {@link Subsystem} for details.
+ /**
+ * Provide a marker as to the level to order initialization, 10,20,30,... See
+ * {@link Subsystem} for details.
*/
- default public int level() { return 9999; }
+ default public int level() {
+ return 9999;
+ }
}
diff --git a/jena-base/src/main/java/org/apache/jena/base/module/package-info.java b/jena-base/src/main/java/org/apache/jena/base/module/package-info.java
index ebf297cbfb..de4767081e 100644
--- a/jena-base/src/main/java/org/apache/jena/base/module/package-info.java
+++ b/jena-base/src/main/java/org/apache/jena/base/module/package-info.java
@@ -27,4 +27,3 @@
*/
package org.apache.jena.base.module;
-
(jena) 05/05: Use arrow switch statements
Posted by an...@apache.org.
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 48896cc034fe8be5b99c0a39aa8e2510f3aa4a18
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Mon Aug 5 15:59:43 2024 +0100
Use arrow switch statements
---
.../riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java | 83 ++++++++++------------
1 file changed, 37 insertions(+), 46 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
index 2eef035937..27447c3524 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/lang/rdfxml/rrx/ParserRDFXML_SAX.java
@@ -495,7 +495,7 @@ class ParserRDFXML_SAX
// Gathering characters for an object lexical form, then encountering a start element
// which is a resource. This is the only case of lookahead in the RDF/XML grammar.
switch (parserMode) {
- case ObjectLex:
+ case ObjectLex -> {
// While processing ObjectLex, we found a startElement.
// The "ObjectLex" decision needs updating. This is a ParserMode.NodeElement.
// This is not parseType=Resource.
@@ -506,15 +506,16 @@ class ParserRDFXML_SAX
// Leave in parserMode=ObjectLex
pushParserFrame(ParserMode.NodeElement);
processBaseAndLang(attributes, position);
- break;
- default:
+ }
+ default -> {
// For everything else.
pushParserFrame();
processBaseAndLang(attributes, position);
+ }
}
switch (parserMode) {
- case TOP:
+ case TOP -> {
// Document element: Either a one element fragment or rdf:RDF
// rdf:RDF => nodeElementList
// nodeElementList = ws* (nodeElement ws* )* or nodeElement
@@ -526,28 +527,24 @@ class ParserRDFXML_SAX
}
// The top element can be a single nodeElement.
startNodeElement(namespaceURI, localName, qName, attributes, position);
- break;
- case NodeElement:
+ }
+ case NodeElement ->
startNodeElement(namespaceURI, localName, qName, attributes, position);
- break;
- case PropertyElement:
+ case PropertyElement ->
startPropertyElement(namespaceURI, localName, qName, attributes, position);
- break;
- case ObjectLex:
+ case ObjectLex -> {
// Finish ObjectLex. Generate the triple.
Node innerSubject = attributesToSubjectNode(attributes, position);
currentEmitter.emit(currentSubject, currentProperty, innerSubject, position);
// This is an rdf:Description or a typed node element.
startNodeElementWithSubject(innerSubject, namespaceURI, localName, qName, attributes, position);
- break;
- case ObjectParseTypeLiteral:
+ }
+ case ObjectParseTypeLiteral ->
// Handled on entry.
throw RDFXMLparseError("Unexpected parserMode " + parserMode, position);
- case ObjectParseTypeCollection:
+ case ObjectParseTypeCollection ->
startCollectionItem(namespaceURI, localName, qName, attributes, position);
- break;
- default:
- break;
+ default -> {}
}
incElementDepth();
}
@@ -583,28 +580,23 @@ class ParserRDFXML_SAX
}
switch (parserMode) {
- case NodeElement:
- endNodeElement(position);
- break;
- case PropertyElement:
+ case NodeElement ->
+ endNodeElement(position);
+ case PropertyElement -> {
if ( isEndNodeElement() )
// Possible next property but it's a node element so no property
// and it's end of node, with two "end property" tags seen in a row.
endNodeElement(position);
else
endPropertyElement(position);
- // How to tell this is end of the properties?
- break;
- case ObjectLex:
+ }
+ case ObjectLex ->
endObjectLexical(position);
- break;
- case ObjectParseTypeLiteral:
+ case ObjectParseTypeLiteral ->
endObjectXMLLiteral(position);
- break;
- case ObjectParseTypeCollection:
+ case ObjectParseTypeCollection ->
endCollectionItem(position);
- break;
- default:
+ default ->
throw RDFXMLparseError("Inconsistent parserMode:" + parserMode, position);
}
@@ -772,12 +764,12 @@ class ParserRDFXML_SAX
ObjectParseType objectParseType = objectParseType(parseTypeStr, position);
switch (objectParseType) {
- case Plain:
+ case Plain -> {
parserMode(ParserMode.ObjectLex);
accCharacters.setLength(0);
// This may turn into a resource object if a startTag is encountered next.
- break;
- case Resource:
+ }
+ case Resource -> {
// Change of subject to a blank node subject.
Node nested = blankNode(position);
if ( ReaderRDFXML_SAX.TRACE )
@@ -796,14 +788,14 @@ class ParserRDFXML_SAX
// ... expect a property element start or an end element.
parserMode(ParserMode.PropertyElement);
// There is nothing else special to do other than the implicit pop.
- break;
- case Literal:
+ }
+ case Literal -> {
startXMLLiteral(position);
- break;
- case Collection:
+ }
+ case Collection -> {
parserMode(ParserMode.ObjectParseTypeCollection);
collectionNode = new NodeHolder();
- break;
+ }
}
}
@@ -1137,27 +1129,26 @@ class ParserRDFXML_SAX
}
switch (parserMode) {
- case ObjectLex:
+ case ObjectLex -> {
accCharacters.append(ch, start, length);
return;
- case ObjectParseTypeLiteral:
+ }
+ case ObjectParseTypeLiteral -> {
// Dealt with above.
return;
+ }
// Allow whitespace only
- case ObjectParserTypeResource:
- case NodeElement:
- case PropertyElement:
- case ObjectParseTypeCollection:
+ case ObjectParserTypeResource, NodeElement, PropertyElement, ObjectParseTypeCollection -> {
if ( !isWhitespace(ch, start, length) )
throw RDFXMLparseError("Non-whitespace text content between element tags: "
+ nonWhitespaceForMsg(ch, start, length), position());
- break;
- case TOP:
+ }
+ case TOP -> {
if ( !isWhitespace(ch, start, length) ) {
throw RDFXMLparseError("Non-whitespace text content outside element tags: "
+ nonWhitespaceForMsg(ch, start, length), position());
}
- break;
+ }
}
}