com.bigdata.rdf.internal.IV Maven / Gradle / Ivy
/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Created on May 3, 2010
*/
package com.bigdata.rdf.internal;
import java.io.Serializable;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import com.bigdata.btree.keys.IKeyBuilder;
import com.bigdata.rdf.internal.impl.TermId;
import com.bigdata.rdf.model.BigdataLiteral;
import com.bigdata.rdf.model.BigdataValue;
import com.bigdata.rdf.store.AbstractTripleStore.Options;
import com.bigdata.rdf.vocab.Vocabulary;
/**
* Interface for the internal representation of an RDF {@link Value} (the
* representation which is encoded within the statement indices).
*
* @param
* The generic type for the RDF {@link Value} implementation.
* @param
* The generic type for the inline value.
*/
public interface IV extends Serializable,
Comparable, IVCache, Value {
/**
* The value of the flags representing the {@link VTE} and the {@link DTE}.
* The upper TWO (2) bits code the {@link VTE} while the lower SIX (6) bits
* code the {@link DTE}.
*/
byte flags();
/**
* The byte length of the encoded {@link IV}.
*/
int byteLength();
/**
* Encode the {@link IV} as an unsigned byte[].
*
* @param keyBuilder
* The object used to encode the {@link IV}.
* @return the key builder
*/
IKeyBuilder encode(IKeyBuilder keyBuilder);
/*
* RDF Value type methods.
*/
/**
* Return the {@link VTE} for the {@link IV}
*/
VTE getVTE();
/**
* Return true
iff this is an RDF Literal. Note that some kinds
* of RDF Literals MAY be represented inline.
*/
boolean isLiteral();
/**
* Return true
iff this is an RDF BlankNode.
*/
boolean isBNode();
/**
* Return true
iff this is an RDF {@link URI}.
*/
boolean isURI();
/**
* Return true
iff this is a statement identifier (this feature
* is enabled with {@link Options#STATEMENT_IDENTIFIERS}).
*/
boolean isStatement();
/**
* Return true
iff this is a URI or a bnode.
*/
boolean isResource();
/*
* Data type methods.
*/
/**
* Return the {@link DTE} for the {@link IV} .
* This will be {@link DTE#TermId} iff the internal "value"
* is a term identifier. Otherwise it will be the type safe enum
* corresponding to the specific data type which can be decoded from this
* {@link IV} using {@link #getInlineValue()}.
*/
DTE getDTE();
/**
* IFF {@link #getDTE()} returns {@link DTE#Extension} then this method will
* report the {@link DTEExtension} value that specifies the intrinsic
* datatype for this IV.
*
* @see BLZG-1507 (Implement support for DTE extension types for URIs)
*
* @see BLZG-1595 ( DTEExtension for compressed timestamp)
*/
DTEExtension getDTEX();
/**
* true
iff the {@link IV} represents a null
* {@link IV} reference. null
{@link IV}s are somewhat special.
* They get used as wild cards for the keys in the justifications index and
* perhaps (?) in a few other locations.
*/
boolean isNullIV();
/**
* true
iff the RDF value is directly represented inline. When
* an RDF Value is "inline" its value can be directly decoded from its
* representation in the keys of the statement indices.
*/
boolean isInline();
/**
* true
iff the flags
byte is followed by an
* {@link IV} which defines how the subsequent value (represented according
* to the {@link DTE}) will be interpreted. This is used to support
* projections of value spaces for data type literals onto the intrinsic
* types. It is also used to support indirect resolution of the namespace
* associated with a URI.
*/
boolean isExtension();
/**
* Return true
iff this {@link IV} is a {@link Vocabulary}
* item.
*/
boolean isVocabulary();
/**
* Return the Java {@link Object} corresponding to the inline value.
*
* @return The {@link Object}.
* @throws UnsupportedOperationException
* unless the RDF value is inline.
*/
T getInlineValue() throws UnsupportedOperationException;
/**
* true
for any of the numeric data types (xsd:byte,
* xsd:unsignedByte, xsd:short, xsd:unsignedShort, xsd:int, xsd:unsignedInt,
* xsd:long, xsd:unsignedLong, xsd:float, xsd:double, xsd:integer, and
* xsd:decimal).
*/
boolean isNumeric();
/**
* true
for an signed numeric datatype ( xsd:byte,
* xsd:short, xsd:int, xsd:long, xsd:float, xsd:double, xsd:integer, and
* xsd:decimal).
*/
boolean isSignedNumeric();
/**
* true
for an unsigned numeric datatype ( xsd:unsignedByte,
* xsd:unsignedShort, xsd:unsignedInt, xsd:unsignedLong).
*/
boolean isUnsignedNumeric();
/**
* This is !isBigNumeric()
and is true
for any of
* the fixed length numeric data types (xsd:byte, xsd:unsignedByte,
* xsd:short, xsd:unsignedShort, xsd:int, xsd:unsignedInt, xsd:long,
* xsd:unsignedLong, xsd:float, xsd:double).
*/
boolean isFixedNumeric();
/**
* true
for xsd:integer and xsd:decimal.
*/
boolean isBigNumeric();
/**
* true
for xsd:float, xsd:double, and xsd:decimal
*/
boolean isFloatingPointNumeric();
//
// /**
// * Return the blank node ID for this {@link IV}.
// *
// * @throws UnsupportedOperationException
// * if this {@link IV} does not represent a blank node.
// * @return
// */
// String bnodeId();
/**
* Each concrete {@link IV} implementation will implement one of the
* corresponding openrdf {@link Value} interfaces depending on the type of
* value the {@link IV} represents ({@link URI}, {@link BNode}, or
* {@link Literal}). This method signifies whether or not the IV can deliver
* the information needed by those interfaces with or without
* materialization. For example, inline numerics can implement the entire
* {@link Literal} interface without needing to be materialized into a
* {@link BigdataLiteral}. {@link TermId}s cannot answer any of the requests
* in the openrdf interfaces without materialization (all the relevant
* information is in the lexicon indices). Even some inlines need
* materialization. For example, ...
*/
boolean needsMaterialization();
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy