/*
* 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.graph;
import org.apache.jena.datatypes.RDFDatatype ;
import org.apache.jena.graph.impl.* ;
import org.apache.jena.shared.* ;
/**
An RDF node holding a literal value. Literals may have datatypes.
*/
public class Node_Literal extends Node_Concrete
{
/** @deprecated Use {@code Node_Literal(LiteralLabel)} */
@Deprecated
/* package */ Node_Literal( Object label )
{ super( label ); }
/* package */ Node_Literal( LiteralLabel label )
{ super( label ); }
@Override
public LiteralLabel getLiteral()
{ return (LiteralLabel) label; }
@Override
public final Object getLiteralValue()
{ return getLiteral().getValue(); }
@Override
public final String getLiteralLexicalForm()
{ return getLiteral().getLexicalForm(); }
@Override
public final String getLiteralLanguage()
{ return getLiteral().language(); }
@Override
public final String getLiteralDatatypeURI()
{ return getLiteral().getDatatypeURI(); }
@Override
public final RDFDatatype getLiteralDatatype()
{ return getLiteral().getDatatype(); }
@Override
public final boolean getLiteralIsXML()
{ return getLiteral().isXML(); }
@Override
public String toString( PrefixMapping pm, boolean quoting )
{ return ((LiteralLabel) label).toString( quoting ); }
@Override
public boolean isLiteral()
{ return true; }
/**
Literal nodes defer their indexing value to the component literal.
@see org.apache.jena.graph.Node#getIndexingValue()
*/
@Override
public Object getIndexingValue()
{ return getLiteral().getIndexingValue(); }
@Override
public Object visitWith( NodeVisitor v )
{ return v.visitLiteral( this, getLiteral() ); }
@Override
public boolean equals( Object other )
{
if ( this == other ) return true ;
return other instanceof Node_Literal && label.equals( ((Node_Literal) other).label );
}
/**
* 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>
*/
@Override
public boolean sameValueAs(Object o) {
return o instanceof Node_Literal
&& ((LiteralLabel)label).sameValueAs( ((Node_Literal) o).getLiteral() );
}
@Override
public boolean matches( Node x )
{ return sameValueAs( x ); }
}