public class RDFListImpl extends ResourceImpl implements RDFList
Standard implementation the list abstraction from rdf.model.
RDFList.ApplyFn, RDFList.ReduceFn
Modifier and Type | Field and Description |
---|---|
static Implementation |
factory
A factory for generating RDFList facets from nodes in enhanced graphs.
|
rdfNodeFactory
Constructor and Description |
---|
RDFListImpl(Node n,
EnhGraph g)
Construct an implementation of RDFList in the given graph, where the
given node is the head of the list.
|
Modifier and Type | Method and Description |
---|---|
void |
add(RDFNode value)
Add the given value to the end of the list.
|
RDFList |
append(Iterator<? extends RDFNode> nodes)
Answer a new list that is formed by adding each element of this list to
the head of the the list formed from the
given
nodes . |
RDFList |
append(RDFList list)
Answer a new list that is formed by adding each element of this list to
the head of the given
list . |
void |
apply(RDFList.ApplyFn fn)
Apply a function to each value in the list in turn.
|
List<RDFNode> |
asJavaList()
Answer the contents of this RDF list as a Java list of RDFNode values.
|
Set<Statement> |
collectStatements()
Answer a set of all of the RDF statements whose subject is one of the cells
of this list.
|
void |
concatenate(Iterator<? extends RDFNode> nodes)
Add the nodes returned by the given iterator to the end of this list.
|
void |
concatenate(RDFList list)
Change the tail of this list to point to the given list, so that this
list becomes the list of the concatenation of the elements of both lists.
|
RDFList |
cons(RDFNode value)
Return a reference to a new list cell whose head is
value
and whose tail is this list. |
boolean |
contains(RDFNode value)
Answer true if the given node appears as the value of a value of any
of the cells of this list.
|
RDFList |
copy()
Answer a list that contains all of the elements of this list in the same
order, but is a duplicate copy in the underlying model.
|
RDFNode |
get(int i)
Answer the node that is the i'th element of the list, assuming that the
head is item zero.
|
RDFNode |
getHead()
Answer the value that is at the head of the list.
|
boolean |
getStrict()
Answer true lists are operating in strict mode, in which the
well- formedness of the list is checked at every operation.
|
RDFList |
getTail()
Answer the list that is the tail of this list.
|
String |
getValidityErrorMessage()
Answer the error message returned by the last failed validity check,
if any.
|
int |
indexOf(RDFNode value)
Answer the index of the first occurrence of the given value in the list,
or -1 if the value is not in the list.
|
int |
indexOf(RDFNode value,
int start)
Answer the index of the first occurrence of the given value in the list
after index
start , or -1 if the value is not in the list
after the given start point. |
boolean |
isEmpty()
Answer true if this list is the empty list.
|
boolean |
isValid()
Answer true if the list is well-formed, by checking that each node is
correctly typed, and has a head and tail pointer from the correct
vocabulary.
|
ExtendedIterator<RDFNode> |
iterator()
Answer an iterator over the elements of the list.
|
Class<? extends RDFList> |
listAbstractionClass() |
Property |
listFirst() |
Resource |
listNil() |
Property |
listRest() |
Resource |
listType() |
<T> ExtendedIterator<T> |
mapWith(Function<RDFNode,T> fn)
Answer an iterator of the elements of this list, to each of which
the given map function has been applied.
|
Resource |
newListCell(RDFNode value,
Resource tail)
Construct a new list cell with the given value and tail.
|
Object |
reduce(RDFList.ReduceFn fn,
Object initial)
Apply a function to each value in the list in turn, accumulating the
results in an accumulator.
|
RDFList |
remove(RDFNode val)
Remove the given value from this list.
|
void |
removeAll()
Deprecated.
Replaced by
removeList() |
RDFList |
removeHead()
Remove the value from the head of the list.
|
void |
removeList()
Remove all of the components of this list from the model.
|
RDFNode |
replace(int i,
RDFNode value)
Replace the value at the i'th position in the list with the given value.
|
boolean |
sameListAs(RDFList list)
Answer true if this list has the same elements in the same order as the
given list.
|
RDFNode |
setHead(RDFNode value)
Update the head of the list to have the given value, and return the
previous value.
|
void |
setStrict(boolean strict)
Set a flag to indicate whether to strictly check the well-formedness of
lists at each operation.
|
RDFList |
setTail(RDFList tail)
Update the list cell at the front of the list to have the given list as
tail.
|
int |
size()
Answer the number of elements in the list.
|
RDFList |
with(RDFNode value)
Answer the list that is this list with the given value added to the end
of the list.
|
abort, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addProperty, addProperty, addProperty, addProperty, addProperty, addProperty, addProperty, asLiteral, asResource, begin, commit, getId, getLocalName, getModel, getNameSpace, getProperty, getProperty, getPropertyResourceValue, getRequiredProperty, getRequiredProperty, getURI, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasProperty, hasProperty, hasProperty, hasProperty, hasURI, inModel, listProperties, listProperties, listProperties, removeAll, removeProperties, toString, visitWith
as, asNode, canAs, equals, getGraph, hashCode, isAnon, isLiteral, isResource, isURIResource, viewAs
addView, supports
abort, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addLiteral, addProperty, addProperty, addProperty, addProperty, begin, commit, equals, getId, getLocalName, getNameSpace, getProperty, getProperty, getPropertyResourceValue, getRequiredProperty, getRequiredProperty, getURI, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasLiteral, hasProperty, hasProperty, hasProperty, hasProperty, hasURI, inModel, listProperties, listProperties, listProperties, removeAll, removeProperties, toString
as, asLiteral, asResource, canAs, getModel, isAnon, isLiteral, isResource, isURIResource, visitWith
asNode
public static Implementation factory
public Resource listType()
public Resource listNil()
public Property listFirst()
public Property listRest()
public int size()
Answer the number of elements in the list.
public RDFNode getHead()
Answer the value that is at the head of the list.
getHead
in interface RDFList
EmptyListException
- if this list is the empty listpublic RDFNode setHead(RDFNode value)
Update the head of the list to have the given value, and return the previous value.
setHead
in interface RDFList
value
- The value that will become the value of the list headEmptyListException
- if this list is the empty listpublic RDFList getTail()
Answer the list that is the tail of this list.
getTail
in interface RDFList
EmptyListException
- if this list is the empty listpublic RDFList setTail(RDFList tail)
Update the list cell at the front of the list to have the given list as tail. The old tail is returned, and remains in the model.
public boolean isEmpty()
public RDFList cons(RDFNode value)
Return a reference to a new list cell whose head is value
and whose tail is this list.
public void add(RDFNode value)
Add the given value to the end of the list. This is a side-effecting
operation on the underlying model that is only defined if this is not the
empty list. If this list is the empty (nil) list, we cannot perform a
side-effecting update without changing the URI of this node (from rdf:nil
)
to a blank-node for the new list cell) without violating a Jena invariant.
Therefore, this update operation will throw an exception if an attempt is
made to add to the nil list. Safe ways to add to an empty list include
with(org.apache.jena.rdf.model.RDFNode)
and cons(org.apache.jena.rdf.model.RDFNode)
.
add
in interface RDFList
value
- A value to add to the end of the listEmptyListUpdateException
- if an attempt is made to
add
to the empty list.public RDFList with(RDFNode value)
Answer the list that is this list with the given value added to the end
of the list. This operation differs from add(org.apache.jena.rdf.model.RDFNode)
in that it will
always work, even on an empty list, but the return value is the updated
list. Specifically, in the case of adding a value to the empty list, the
returned list will not be the same as this list. Client code should
not assume that this is an in-place update, but should ensure that the resulting
list is asserted back into the graph into the appropriate relationships.
public RDFNode get(int i)
Answer the node that is the i'th element of the list, assuming that the
head is item zero. If the list is too short to have an i'th element,
throws a ListIndexException
.
get
in interface RDFList
i
- The index into the list, from 0ListIndexException
- if the list has fewer than (i + 1)
elements.public RDFNode replace(int i, RDFNode value)
Replace the value at the i'th position in the list with the given value.
If the list is too short to have an i'th element, throws a ListIndexException
.
replace
in interface RDFList
i
- The index into the list, from 0value
- The new value to associate with the i'th list elementListIndexException
- if the list has fewer than (i + 1)
elements.public boolean contains(RDFNode value)
Answer true if the given node appears as the value of a value of any of the cells of this list.
public int indexOf(RDFNode value)
Answer the index of the first occurrence of the given value in the list, or -1 if the value is not in the list.
public int indexOf(RDFNode value, int start)
Answer the index of the first occurrence of the given value in the list
after index start
, or -1 if the value is not in the list
after the given start point.
indexOf
in interface RDFList
value
- The value to search forstart
- The index into the list to start searching fromvalue
in the list not less than
start
, or -1
if not found.ListIndexException
- if start
is greater than the
length of the list.public RDFList append(Iterator<? extends RDFNode> nodes)
Answer a new list that is formed by adding each element of this list to
the head of the the list formed from the
given nodes
. This is a non side-effecting
operation on either this list or the given list, but generates a copy
of this list. For a more storage efficient alternative, see concatenate
.
public RDFList append(RDFList list)
Answer a new list that is formed by adding each element of this list to
the head of the given list
. This is a non side-effecting
operation on either this list or the given list, but generates a copy
of this list. For a more storage efficient alternative, see concatenate
.
public void concatenate(RDFList list)
Change the tail of this list to point to the given list, so that this
list becomes the list of the concatenation of the elements of both lists.
This is a side-effecting operation on this list; for a non side-effecting
alternative, see append(java.util.Iterator<? extends org.apache.jena.rdf.model.RDFNode>)
. Due to the problem of maintaining
the URI invariant on a node, this operation will throw an exception if an
attempt is made to concatenate onto an empty list. To avoid this, test for
an empty list: if true replace the empty list with the argument list, otherwise
proceed with the concatenate as usual. An alternative solution is to use
append(java.util.Iterator<? extends org.apache.jena.rdf.model.RDFNode>)
and replace the original list with the return value.
concatenate
in interface RDFList
list
- The argument list to concatenate to this listEmptyListUpdateException
- if this list is the nil listpublic void concatenate(Iterator<? extends RDFNode> nodes)
Add the nodes returned by the given iterator to the end of this list.
concatenate
in interface RDFList
nodes
- An iterator whose range is RDFNodeEmptyListUpdateException
- if this list is the nil listfor details on avoiding the empty list update exception.
public RDFList copy()
Answer a list that contains all of the elements of this list in the same order, but is a duplicate copy in the underlying model.
public void apply(RDFList.ApplyFn fn)
Apply a function to each value in the list in turn.
public Object reduce(RDFList.ReduceFn fn, Object initial)
Apply a function to each value in the list in turn, accumulating the
results in an accumulator. The final value of the accumulator is returned
as the value of reduce()
.
public <T> ExtendedIterator<T> mapWith(Function<RDFNode,T> fn)
Answer an iterator of the elements of this list, to each of which the given map function has been applied.
public RDFList removeHead()
Remove the value from the head of the list. The tail of the list remains
in the model. Note that no changes are made to list cells that point to
this list cell as their tail. Immediately following a
removeHead
operation, such lists will be in a non-valid
state.
removeHead
in interface RDFList
public RDFList remove(RDFNode val)
Remove the given value from this list. If val
does not occur in
the list, no action is taken. Since removing the head of the list will invalidate
the list head cell, in general the list must return the list that results from this
operation. However, in many cases the return value will be the same as the object
that this method is invoked on
@Deprecated public void removeAll()
removeList()
Deprecated. Since an RDFList
does not behave like a Java container, it is not
the case that the contents of the list can be removed and the container filled with values
again. Therefore, this method name has been deprecated in favour of removeList()
public void removeList()
Remove all of the components of this list from the model. Once this operation
has completed, the RDFList
resource on which it was called will no
longer be a resource in the model, so further methods calls on the list object
(for example, size()
will fail. Due to restrictions on the encoding
of lists in RDF, it is not possible to perform an operation which empties a list
and then adds further values to that list. Client code wishing to perform
such an operation should do so in two steps: first remove the old list, then
create a new list with the new contents. It is important that RDF statements
that reference the old list (in the object position) be updated to point
to the newly created list.
Note that this
is operation is only removing the list cells themselves, not the resources
referenced by the list - unless being the object of an rdf:first
statement is the only mention of that resource in the model.
removeList
in interface RDFList
public Set<Statement> collectStatements()
Answer a set of all of the RDF statements whose subject is one of the cells of this list.
public ExtendedIterator<RDFNode> iterator()
Answer an iterator over the elements of the list. Note that this iterator
does not take a snapshot of the list, so changes to the list statements
in the model while iterating will affect the behaviour of the iterator.
To get an iterator that is not affected by model changes, use asJavaList()
.
public List<RDFNode> asJavaList()
Answer the contents of this RDF list as a Java list of RDFNode values.
asJavaList
in interface RDFList
public boolean sameListAs(RDFList list)
Answer true if this list has the same elements in the same order as the
given list. Note that the standard equals
test just tests
for equality of two given list cells. While such a test is sufficient
for many purposes, this test provides a broader equality definition, but
is correspondingly more expensive to test.
sameListAs
in interface RDFList
list
- The list to test againstpublic boolean getStrict()
Answer true lists are operating in strict mode, in which the well- formedness of the list is checked at every operation.
public void setStrict(boolean strict)
Set a flag to indicate whether to strictly check the well-formedness of lists at each operation. Default false. Note that the flag that is manipulated is actually a static: it applies to all lists. However, RDFList is a Java interface, and Java does not permit static methods in interfaces.
public boolean isValid()
Answer true if the list is well-formed, by checking that each node is correctly typed, and has a head and tail pointer from the correct vocabulary.
isValid
in interface RDFList
isValid
in class EnhNode
RDFList.getValidityErrorMessage()
public String getValidityErrorMessage()
Answer the error message returned by the last failed validity check, if any.
getValidityErrorMessage
in interface RDFList
RDFList.isValid()
Licenced under the Apache License, Version 2.0