📄 node.java
字号:
/**
Answer the RDF datatype object of this node's literal value, if it is
a literal; otherwise die horribly.
*/
public RDFDatatype getLiteralDatatype()
{ throw new NotLiteral( this ); }
public boolean getLiteralIsXML()
{ throw new NotLiteral( this ); }
/**
Exception thrown if a literal-access operation is attemted on a
non-literal node.
*/
public static class NotLiteral extends JenaException
{
public NotLiteral( Node it )
{ super( it + " is not a literal node" ); }
}
/**
Answer the object which is the index value for this Node. The default
is this Node itself; overridden in Node_Literal for literal indexing
purposes. Only concrete nodes should use this method.
*/
public Object getIndexingValue()
{ return this; }
/** get the URI of this node if it has one, else die horribly */
public String getURI()
{ throw new UnsupportedOperationException( this + " is not a URI node" ); }
/** get the namespace part of this node if it's a URI node, else die horribly */
public String getNameSpace()
{ throw new UnsupportedOperationException( this + " is not a URI node" ); }
/** get the localname part of this node if it's a URI node, else die horribly */
public String getLocalName()
{ throw new UnsupportedOperationException( this + " is not a URI node" ); }
/** get a variable nodes name, otherwise die horribly */
public String getName()
{ throw new UnsupportedOperationException( "this (" + this.getClass() + ") is not a variable node" ); }
/** answer true iff this node is a URI node with the given URI */
public boolean hasURI( String uri )
{ return false; }
/** an abstraction to allow code sharing */
static abstract class NodeMaker { abstract Node construct( Object x ); }
static final NodeMaker makeAnon = new NodeMaker()
{ Node construct( Object x ) { return new Node_Blank( x ); } };
static final NodeMaker makeLiteral = new NodeMaker()
{ Node construct( Object x ) { return new Node_Literal( x ); } };
static final NodeMaker makeURI = new NodeMaker()
{ Node construct( Object x ) { return new Node_URI( x ); } };
static final NodeMaker makeVariable = new NodeMaker()
{ Node construct( Object x ) { return new Node_Variable( x ); } };
/**
The canonical NULL. It appears here so that revised definitions [eg as a bnode]
that require the cache-and-maker system will work; the NodeMaker constants
should be non-null at this point.
*/
public static final Node NULL = new Node_NULL();
/**
keep the distinguishing label value.
*/
/* package visibility only */ Node( Object label )
{ this.label = label; }
static private boolean caching = true;
/**
provided only for testing purposes. _cache(false)_ switches off caching and
clears the cache. _cache(true)_ switches caching [back] on. This allows
structural equality to be tested.
*/
public static void cache( boolean wantCache )
{
if (wantCache == false) present.clear();
caching = wantCache;
}
/**
We object strongly to null labels: for example, they make .equals flaky. We reuse nodes
from the recent cache if we can. Otherwise, the maker knows how to construct a new
node of the correct class, and we add that node to the cache. create is
synchronised to avoid threading problems - a separate thread might zap the
cache entry that get is currently looking at.
*/
public static synchronized Node create( NodeMaker maker, Object label )
{
if (label == null) throw new JenaException( "Node.make: null label" );
Node node = (Node) present.get( label );
return node == null ? cacheNewNode( label, maker.construct( label ) ) : node;
}
/**
cache the node <code>n</code> under the key <code>label</code>,
and return that node.
*/
private static Node cacheNewNode( Object label, Node n )
{
if (present.size() > THRESHOLD) { /* System.err.println( "> trashing node cache" ); */ present.clear(); }
if (caching) present.put( label, n );
return n;
}
/**
Nodes only equal other Nodes that have equal labels.
*/
public abstract boolean equals(Object o);
/**
* Test that two nodes are semantically equivalent.
* In some cases this may be the sames as equals, in others
* equals is stricter. For example, two xsd:int literals with
* the same value but different language tag are semantically
* equivalent but distinguished by the java equality function
* in order to support round tripping.
* <p>Default implementation is to use equals, subclasses should
* override this.</p>
*/
public boolean sameValueAs(Object o)
{ return equals( o ); }
public int hashCode()
{ return label.hashCode() * 31; }
/**
Answer true iff this node accepts the other one as a match.
The default is an equality test; it is over-ridden in subclasses to
provide the appropriate semantics for literals, ANY, and variables.
@param other a node to test for matching
@return true iff this node accepts the other as a match
*/
public boolean matches( Node other )
{ return equals( other ); }
/**
Answer a human-readable representation of this Node. It will not compress URIs,
nor quote literals (because at the moment too many places use toString() for
something machine-oriented).
*/
public String toString()
{ return toString( null ); }
/**
Answer a human-readable representation of this Node where literals are
quoted according to <code>quoting</code> but URIs are not compressed.
*/
public String toString( boolean quoting )
{ return toString( null, quoting ); }
/**
Answer a human-readable representation of the Node, quoting literals and
compressing URIs.
*/
public String toString( PrefixMapping pm )
{ return toString( pm, true ); }
/**
Answer a human readable representation of this Node, quoting literals if specified,
and compressing URIs using the prefix mapping supplied.
*/
public String toString( PrefixMapping pm, boolean quoting )
{ return label.toString(); }
}
/*
(c) Copyright 2002, 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -