📄 node.java
字号:
/*
(c) Copyright 2002, 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
[See end of file]
$Id: Node.java,v 1.57 2007/07/04 15:22:02 chris-dollin Exp $
*/
package com.hp.hpl.jena.graph;
import com.hp.hpl.jena.rdf.model.AnonId;
import com.hp.hpl.jena.datatypes.*;
import com.hp.hpl.jena.graph.impl.*;
import com.hp.hpl.jena.graph.test.NodeCreateUtils;
import com.hp.hpl.jena.shared.*;
/**
A Node has five subtypes: Node_Blank, Node_Anon, Node_URI,
Node_Variable, and Node_ANY.
Nodes are only constructed by the node factory methods, and they will
attempt to re-use existing nodes with the same label if they are recent
enough.
@author Jeremy Carroll and Chris Dollin
*/
public abstract class Node {
final protected Object label;
static final int THRESHOLD = 10000;
static final NodeCache present = new NodeCache();
/**
The canonical instance of Node_ANY. No other instances are required.
*/
public static final Node ANY = new Node_ANY();
static final String RDFprefix = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
/**
Returns a Node described by the string, primarily for testing purposes.
The string represents a URI, a numeric literal, a string literal, a bnode label,
or a variable.
<ul>
<li> 'some text' :: a string literal with that text
<li> 'some text'someLanguage:: a string literal with that text and language
<li> 'some text'someURI:: a typed literal with that text and datatype
<li> digits :: a literal [OF WHAT TYPE] with that [numeric] value
<li> _XXX :: a bnode with an AnonId built from _XXX
<li> ?VVV :: a variable with name VVV
<li> &PPP :: to be done
<li> name:stuff :: the URI; name may be expanded using the Extended map
</ul>
@param x the string describing the node
@return a node of the appropriate type with the appropriate label
* @deprecated Use {@link NodeCreateUtils#create(String)} instead
*/
public static Node create( String x )
{ return NodeCreateUtils.create( x ); }
/**
As for create(String), but the PrefixMapping used to translate URI strings
is an additional argument.
@param pm the PrefixMapping for translating pre:X strings
@param x the string encoding the node to create
@return a node with the appropriate type and label
* @deprecated Use {@link NodeCreateUtils#create(PrefixMapping,String)} instead
*/
public static Node create( PrefixMapping pm, String x )
{ return NodeCreateUtils.create( pm, x ); }
public static RDFDatatype getType( String s )
{ return TypeMapper.getInstance().getSafeTypeByName( s ); }
/** make a blank node with a fresh anon id */
public static Node createAnon()
{ return createAnon( AnonId.create() ); }
/** make a blank node with the specified label */
public static Node createAnon( AnonId id )
{ return create( makeAnon, id ); }
/** make a literal node with the specified literal value */
public static Node createLiteral( LiteralLabel lit )
{ return create( makeLiteral, lit ); }
/** make a URI node with the specified URIref string */
public static Node createURI( String uri )
{ return create( makeURI, uri ); }
/** make a variable node with a given name */
public static Node createVariable( String name )
{ return create( makeVariable, Node_Variable.variable( name ) ); }
public static Node createLiteral( String value )
{ return createLiteral( value, "", false ); }
/** make a literal with specified language and XMLishness.
_lit_ must *not* be null.
@param isXml If true then lit is exclusive canonical XML of type
rdf:XMLLiteral, and no checking will be invoked.
*/
public static Node createLiteral( String lit, String lang, boolean isXml )
{
if (lit == null) throw new NullPointerException
( "null for literals has been illegal since Jena 2.0" );
return createLiteral( new LiteralLabel( lit, lang, isXml ) );
}
/**
* Build a typed literal node from its lexical form. The
* lexical form will be parsed now and the value stored. If
* the form is not legal this will throw an exception.
*
* @param lex the lexical form of the literal
* @param lang the optional language tag
* @param dtype the type of the literal, null for old style "plain" literals
* @throws DatatypeFormatException if lex is not a legal form of dtype
*/
public static Node createLiteral( String lex, String lang, RDFDatatype dtype )
throws DatatypeFormatException
{ return createLiteral( LiteralLabel.createLiteralLabel( lex, lang, dtype ) ); }
public static Node createUncachedLiteral( Object value, String lang, RDFDatatype dtype )
throws DatatypeFormatException
{ return new Node_Literal( new LiteralLabel( value, lang, dtype ) ); }
/**
Visit a Node and dispatch on it to the appropriate method from the
NodeVisitor <code>v</code>.
@param v the visitor to apply to the node
@return the value returned by the applied method
*/
public abstract Object visitWith( NodeVisitor v );
/**
Answer true iff this node is concrete, ie not variable, ie URI, blank, or literal.
*/
public abstract boolean isConcrete();
/**
Answer true iff this node is a literal node [subclasses override]
*/
public boolean isLiteral()
{ return false; }
/**
Answer true iff this node is a blank node [subclasses override]
*/
public boolean isBlank()
{ return false; }
/**
Answer true iff this node is a URI node [subclasses override]
*/
public boolean isURI()
{ return false; }
/**
Answer true iff this node is a variable node - subclasses override
*/
public boolean isVariable()
{ return false; }
/** get the blank node id if the node is blank, otherwise die horribly */
public AnonId getBlankNodeId()
{ throw new UnsupportedOperationException( this + " is not a blank node" ); }
/**
Answer the label of this blank node or throw an UnsupportedOperationException
if it's not blank.
*/
public String getBlankNodeLabel()
{ return getBlankNodeId().getLabelString(); }
/**
Answer the literal value of a literal node, or throw an UnsupportedOperationException
if it's not a literal node
*/
public LiteralLabel getLiteral()
{ throw new UnsupportedOperationException( this + " is not a literal node" ); }
/**
Answer the value of this node's literal value, if it is a literal;
otherwise die horribly.
*/
public Object getLiteralValue()
{ throw new NotLiteral( this ); }
/**
Answer the lexical form of this node's literal value, if it is a literal;
otherwise die horribly.
*/
public String getLiteralLexicalForm()
{ throw new NotLiteral( this ); }
/**
Answer the language of this node's literal value, if it is a literal;
otherwise die horribly.
*/
public String getLiteralLanguage()
{ throw new NotLiteral( this ); }
/**
Answer the data-type URI of this node's literal value, if it is a
literal; otherwise die horribly.
*/
public String getLiteralDatatypeURI()
{ throw new NotLiteral( this ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -