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 ff9a14c6f65297be8af1e2ca568216f64253d84c Author: Andy Seaborne <[email protected]> AuthorDate: Wed Jul 16 22:01:31 2025 +0100 Add G.listLength --- .../apache/jena/sparql/util/graph/GraphList.java | 65 ++++++++++------------ .../src/main/java/org/apache/jena/system/G.java | 10 ++++ 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java index cb56d73218..65690fcdbc 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/graph/GraphList.java @@ -40,6 +40,36 @@ import org.apache.jena.vocabulary.RDF; public class GraphList { + public static List<Node> members(GNode gnode) { + List<Node> x = new ArrayList<>(); + members(gnode, x); + return x; + } + + public static void members(GNode gnode, final Collection<Node> acc) { + if ( !isListNode(gnode) ) + return; + + while (!listEnd(gnode)) { + Node n = car(gnode); + if ( n != null ) + acc.add(n); + gnode = next(gnode); + } + } + + public static int length(GNode gnode) { + if ( !isListNode(gnode) ) + return -1; + + int len = 0; + while (!listEnd(gnode)) { + len++; + gnode = next(gnode); + } + return len; + } + // ---------------------- /** Starting at a list element, find the heads of lists it is in */ public static List<Node> listFromMember(GNode gnode) @@ -144,41 +174,6 @@ public class GraphList return x == null || Node.ANY.equals(x); } - public static List<Node> members(GNode gnode) - { - List<Node> x = new ArrayList<>(); - members(gnode, x); - return x; - } - - public static void members(GNode gnode, final Collection<Node> acc) - { - if ( ! isListNode(gnode) ) - return; - - while( ! listEnd(gnode) ) - { - Node n = car(gnode); - if ( n != null ) - acc.add(n); - gnode = next(gnode); - } - } - - public static int length(GNode gnode) - { - if ( ! isListNode(gnode) ) - return -1; - - int len = 0; - while ( ! listEnd(gnode) ) - { - len++; - gnode = next(gnode); - } - return len; - } - public static int occurs(GNode gnode, Node item) { return indexes(gnode, item).size(); } diff --git a/jena-arq/src/main/java/org/apache/jena/system/G.java b/jena-arq/src/main/java/org/apache/jena/system/G.java index 6d91a2999e..5c4c15b1c9 100644 --- a/jena-arq/src/main/java/org/apache/jena/system/G.java +++ b/jena-arq/src/main/java/org/apache/jena/system/G.java @@ -490,6 +490,16 @@ public class G { return GraphList.members(gNode); } + /** Return a the length of an RDF list. */ + public static int listLength(Graph graph, Node node) { + Objects.requireNonNull(graph, "graph"); + Objects.requireNonNull(node, "node"); + GNode gNode = GNode.create(graph, node); + if ( ! GraphList.isListNode(gNode) ) + return -1; + return GraphList.length(gNode); + } + /** * Return a java list where the {@code node} is an RDF list of nodes or a single * node (returned a singleton list).
