/*
* 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;
import org.apache.jena.graph.FrontsTriple ;
/** An RDF Statement.
*
* <p>A Statement is not a Resource, but can produce a ReifiedStatement
* that represents it and from which the Statement can be recovered.</p>
*
* <p>A statement instance tracks which model created it, if any. All the
* Resource components of a Statement are in the same model as the
* Statement, if it has one, and are in no model if the Statement isn't.</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>
*/
public interface Statement extends FrontsTriple
{
/** determine whether two statements are equal.
*
* <p> Two statements are considered to be equal if they have the
* the same subject, predicate and object. A statement can
* only be equal to another statement object.
* </p>
* @return true if and only if the equality condition is met.
* @param o the object to be compared
*/
@Override
public boolean equals(Object o);
/** Returns asTriple().hashCode()
*/
@Override
public int hashCode();
/** An accessor method to return the subject of the statements.
* @return The subject of the statement.
*/
public Resource getSubject();
/** An accessor function to return the predicate of the statement.
* @return The predicate of the statement.
*/
public Property getPredicate();
/** An accessor funtion to return the object of the statement.
* @return Return the object of the statement.
*/
public RDFNode getObject();
/** Get a property of the object of the statement.
*
* <p>There is an unfortunate ambiguity here. GetProperty would normally
* treat the statement as a resource, and return a property about this
* statement. This is not what is wanted in most cases, so getProperty
* on a statement is defined to call getProperty on its object. If
* a property of the statement itself is required, getStatementProperty
* should be used.</p>
*
* <p>If the object of the statement is not a resource, an exception is
* thrown.</p>
* @param p the property sought
* @return a statement representing an instance of the required
* property
*/
public Statement getProperty(Property p) ;
/** Return a property of this statement.
*
* <p>The model associated with this statement is searched for a statement with
* this statement as subject and the specified property as predicate. If
* such a statement is found it is return. If more than one exists in the
* model, then it is undefined which is returned. If no such statement
* exists, an exception is thrown.</p>
* @param p the property sought
* @return a statement representing an instance of the specified
* property.
*/
public Statement getStatementProperty(Property p) ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a resource.</p>
*
* @return The Resource which is the object of the statement.
*/
public Resource getResource() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The Literal which is the object of the statement.
*/
public Literal getLiteral() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public boolean getBoolean() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public byte getByte() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public short getShort() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public int getInt() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown iof the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public long getLong() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public char getChar() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public float getFloat() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public double getDouble() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public String getString() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Resource.</p>
* @return The object of the statement.
*
*/
@Deprecated public Resource getResource(ResourceF f) ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Resource.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public Bag getBag() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Resource.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public Alt getAlt() ;
/** Return the object of the statement.
*
* <p>An exception will be thrown if the object is not a Resource.</p>
*
* @return The object of the statement interpreted as a value of
* the specified type.
*/
public Seq getSeq() ;
/** Return the language of the object of the statement.
*
* <p>An exception will be thrown if the object is not a Literal.</p>
*
* @return the language of the object of the statement
*/
public String getLanguage();
/**
Answer true iff the Literal object of this statement is well-formed XML
(ie equivalent to getLiteral().isWellFormedXML()). If the object is not
a Literal, throw an exception.
*/
public boolean hasWellFormedXML();
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject( boolean o );
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject( long o );
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject( int o );
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject(char o) ;
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject( float o );
/**
Remove this statement (s, p, x) from the model that contains it. Create a
new statement (s, p, o'), where o' is the typed literal corresponding to
o, add it to the model, and answer it.
*/
public Statement changeLiteralObject( double o );
/** change the object of the statement (S, P, X) to (S, P, o).
* <p>The statement with the old value is removed from the model and
* a new statement with the new value added and returned.</p>
* @param o The value to be set.
*
* @return the new (S, P, o) statement.
*/
public Statement changeObject(String o) ;
/** change the object of the statement (S, P, X) to (S, P, o).
* <p>The statement with the old value is removed from the model and
* a new statement with the new value added and returned.</p>
* @param o The value to be set.
* @param wellFormed true if o is well formed XML
*
* @return the new (S, P, o) statement.
*/
public Statement changeObject(String o, boolean wellFormed) ;
/** change the object of the statement (S, P, X) to (S, P, o).
* <p>The statement with the old value is removed from the model and
* a new statement with the new value added.</p>
* @param o The value to be set.
* @param l the language of the String
*
* @return the new (S, P, o) statement..
*/
public Statement changeObject(String o, String l) ;
/** change the object of the statement (S, P, X) to (S, P, o).
* <p>The statement with the old value is removed from the model and
* a new statement with the new value added.</p>
* @param o The value to be set.
* @param l the language of the String
*
* @return the new (S, P, o) statement.
*/
public Statement changeObject(String o, String l, boolean wellFormed)
;
/** change the object of the statement (S, P, X) to (S, P, o).
* <p>The statement with the old value is removed from the model and
* a new statement with the new value added.</p>
* @param o The value to be set
* @return the new (S, P, o) statement.
*/
public Statement changeObject(RDFNode o) ;
/** Remove this statement from its associated model.
*
* <p>The statement with the same subject, predicate and object as this
* statement will be removed from the model associated with this
* statement.</p>
*
* @return this statement.
*/
public Statement remove() ;
/**
Determine if this statement is the subject of any statements its associated
model.
@return true iff this statement is the subject of a statement in the model.
*/
boolean isReified();
/**
answer a ReifiedStatement object that embodies this Statement and
is in the same Model (if any).
*/
ReifiedStatement createReifiedStatement();
/**
answer a ReifiedStatement object that embodies this Statement, has
the same Model, and has the given <code>uri</code>.
*/
ReifiedStatement createReifiedStatement( String uri );
/**
answer an iterator which delivers all the reified statements in the model
this Statement belongs to that match this Statement.
*/
RSIterator listReifiedStatements();
/**
get the Model this Statement was created in.
*/
Model getModel();
/**
* Finds all possible resources which are
* the reification of this statement, and for each
* removes all four triples of the reification quad.
*/
void removeReification();
}