/*
* 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.rdf.model;
/** An RDF Container.
*
* <p>This interface defines methods for accessing RDF container resources.
* These methods operate on the RDF statements contained in a model. The
* container implementation may cache state from the underlying model, so
* objects should not be added to or removed from the container by directly
* manipulating its properties, whilst the container is being
* accessed through this interface.</p>
*
* <p>When a member is deleted from a container using this interface, or an
* iterator returned through this interface, all the other members with
* higher ordinals are renumbered using an algorithm which may depend on the
* type of the container.</p>
*
* <p>This interface provides methods supporting typed literals. This means
* that methods are provided which will translate a built in type, or an
* object to an RDF Literal. This translation is done by invoking the
* <CODE>toString()</CODE> method of the object, or its built in equivalent.
* The reverse translation is also supported. This is built in for built
* in types. Factory objects, provided by the application, are used
* for application objects.</p>
* <p>This interface provides methods for supporting enhanced resources. An
* enhanced resource is a resource to which the application has added
* behaviour. RDF containers are examples of enhanced resources built in
* to this package. Enhanced resources are supported by encapsulating a
* resource created by an implementation in another class which adds
* the extra behaviour. Factory objects are used to construct such
* enhanced resources.</p>
*/
public interface Container extends Resource {
/**
* Verify that the container is an Alt.
*
* This method will return true if the object is in a model and that model
* contains the triple < this, RDF.type, RDF.Alt > otherwise returns
* false.
*/
public boolean isAlt();
/**
* Verify that the container is a Seq.
*
* This method will return true if the object is in a model and that model
* contains the triple < this, RDF.type, RDF.Seq > otherwise returns
* false.
*/
public boolean isSeq();
/**
* Verify that the container is a Bag.
*
* This method will return true if the object is in a model and that model
* contains the triple < this, RDF.type, RDF.Bag > otherwise returns
* false.
*/
public boolean isBag();
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(RDFNode o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(boolean o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(long o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(char o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(float o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(double o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(String o);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @param l The language of the string to be added
* @return this object so that calls may be cascaded.
*/
public Container add(String o, String l);
/** Add a new value to a container.
*
* <p>The size of the container is extended by 1 and the new value is added as
* the last element of the container.</p>
* @param o The value to be added.
* @return this object so that calls may be cascaded.
*/
public Container add(Object o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(RDFNode o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(boolean o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(long o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(char o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(float o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(double o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(String o);
/** Determine whether the container contains a value
* @param o the value being tested for
* @param l the language of the string tested
* @return true if and only if the container contains o
*/
public boolean contains(String o, String l);
/** Determine whether the container contains a value
* @param o the value being tested for
* @return true if and only if the container contains o
*/
public boolean contains(Object o);
/** Remove a value from the container.
*
* <p>The predicate of the statement <CODE>s</CODE> identifies the
* ordinal of the value to be removed. Once removed, the values in the
* container with a higher ordinal value are renumbered. The renumbering
* algorithm depends on the type of container.<p>
* @param s The statement to be removed from the model.
* @return this container to enable cascading calls.
*/
public Container remove(Statement s);
/** Return an iterator over the values.
*
* <p><B>Note</B> the interator returned is not a standard java.util.iterator.
* It has a <CODE>close</CODE> method which SHOULD be called if the
* application has not completed the iteration, but no longer requires
* the iterator. This will enable the freeing of resources in, for
* example, implementations which store their models in a database.</p>
.
* @return Return an iterator over the values.
*/
public NodeIterator iterator();
/** return the number values in the container.
* @return the number of values int the container.
*/
public int size();
}