org.apache.commons.rdf.api.RDFTermFactory.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.commons.rdf.api.RDFTermFactory.java

Source

/**
 * 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.commons.rdf.api;

import java.io.Serializable;
import java.util.Locale;

/**
 * Factory for creating RDFTerm and Graph instances.
 * <p>
 * It is not specified how an implementation should provide a RDFTermFactory.
 * <p>
 * If an implementation does not support a particular method (e.g. it requires
 * additional parameters or can't create graphs), then it MAY throw
 * {@link UnsupportedOperationException}, as provided by the <code>default</code>
 * implementations in this interface.
 * <p>
 * If a factory method does not allow or support a provided parameter, e.g.
 * because an IRI is considered invalid, then it SHOULD throw
 * {@link IllegalArgumentException}.
 *
 * @see RDFTerm
 * @see Graph
 */
public interface RDFTermFactory {

    /**
     * Create a new blank node.
     * <p>
     * The returned blank node MUST NOT be equal to any existing
     * {@link BlankNode} instances according to {@link BlankNode#equals(Object)}.
     *
     * @return A new, unique {@link BlankNode}
     * @throws UnsupportedOperationException
     *             If the operation is not supported.
     */
    default BlankNode createBlankNode() throws UnsupportedOperationException {
        throw new UnsupportedOperationException("createBlankNode() not supported");
    }

    /**
     * Create a blank node based on the given name.
     * <p>
     * All {@link BlankNode}s created with the given <code>name</code>
     * <em>on a particular instance</em> of <code>RDFTermFactory</code> MUST be
     * equivalent according to {@link BlankNode#equals(Object)},
     * <p>
     * The returned BlankNode MUST NOT be equal to <code>BlankNode</code>
     * instances returned for any other <code>name</code> or those returned from
     * {@link #createBlankNode()}.
     * <p>
     * The returned BlankNode SHOULD NOT be equivalent to any BlankNodes created
     * on a <em>different</em> <code>RDFTermFactory</code> instance, e.g.
     * different instances of <code>RDFTermFactory</code> should produce
     * different blank nodes for the same <code>name</code> unless they
     * purposely are intending to create equivalent {@link BlankNode}
     * instances (e.g. a reinstated {@link Serializable} factory).
     *
     * @param name
     *            A non-empty, non-null, String that is unique to this blank
     *            node in the context of this {@link RDFTermFactory}.
     * @return A BlankNode for the given name
     * @throws UnsupportedOperationException
     *             If the operation is not supported.
     */
    default BlankNode createBlankNode(String name) throws UnsupportedOperationException {
        throw new UnsupportedOperationException("createBlankNode(String) not supported");
    }

    /**
     * Create a new graph.
     *
     * It is undefined if the graph will be persisted by any underlying storage
     * mechanism.
     *
     * @return A new Graph
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default Graph createGraph() throws UnsupportedOperationException {
        throw new UnsupportedOperationException("createGraph() not supported");
    }

    /**
     * Create an IRI from a (possibly escaped) String.
     *
     * The provided iri string MUST be valid according to the <a
     * href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri">W3C RDF-1.1 IRI</a>
     * definition.
     *
     * @param iri Internationalized Resource Identifier
     * @return A new IRI
     * @throws IllegalArgumentException      If the provided string is not acceptable, e.g. does not
     *                                       conform to the RFC3987 syntax.
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default IRI createIRI(String iri) throws IllegalArgumentException, UnsupportedOperationException {
        throw new UnsupportedOperationException("createIRI(String) not supported");
    }

    /**
     * Create a simple literal.
     *
     * The provided lexical form should not be escaped in any sense, e.g. should
     * not include "quotes" unless those are part of the literal value.
     *
     * The returned Literal MUST have a {@link Literal#getLexicalForm()} that is
     * equal to the provided lexical form, MUST NOT have a
     * {@link Literal#getLanguageTag()} present, and SHOULD return a
     * {@link Literal#getDatatype()} that is equal to the IRI
     * <code>http://www.w3.org/2001/XMLSchema#string</code>.
     *
     * @param lexicalForm The literal value in plain text
     * @return The created Literal
     * @throws IllegalArgumentException      If the provided lexicalForm is not acceptable, e.g. because
     *                                       it is too large for an underlying storage.
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default Literal createLiteral(String lexicalForm)
            throws IllegalArgumentException, UnsupportedOperationException {
        throw new UnsupportedOperationException("createLiteral(String) not supported");
    }

    /**
     * Create a literal with the specified data type.
     *
     * The provided lexical form should not be escaped in any sense, e.g. should
     * not include "quotes" unless those are part of the literal value.
     *
     * It is RECOMMENDED that the provided dataType is one of the <a
     * href="http://www.w3.org/TR/rdf11-concepts/#xsd-datatypes">RDF-compatible
     * XSD types</a>.
     *
     * The provided lexical form SHOULD be in the <a
     * href="http://www.w3.org/TR/rdf11-concepts/#dfn-lexical-space">lexical
     * space</a> of the provided dataType.
     *
     * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} that
     * is equal to the provided lexicalForm, MUST NOT have a
     * {@link Literal#getLanguageTag()} present, and MUST return a
     * {@link Literal#getDatatype()} that is equivalent to the provided dataType
     * IRI.
     *
     * @param lexicalForm The literal value
     * @param dataType    The data type IRI for the literal value, e.g.
     *                    <code>http://www.w3.org/2001/XMLSchema#integer</code>
     * @return The created Literal
     * @throws IllegalArgumentException      If any of the provided arguments are not acceptable, e.g.
     *                                       because the provided dataType is not permitted.
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default Literal createLiteral(String lexicalForm, IRI dataType)
            throws IllegalArgumentException, UnsupportedOperationException {
        throw new UnsupportedOperationException("createLiteral(String) not supported");
    }

    /**
     * Create a language-tagged literal.
     *
     * The provided lexical form should not be escaped in any sense, e.g. should
     * not include "quotes" unless those are part of the literal value.
     *
     * The provided language tag MUST be valid according to <a
     * href="http://tools.ietf.org/html/bcp47">BCP47</a>, e.g. <code>en</code>.
     *
     * The provided language tag <a
     * href="http://www.w3.org/TR/rdf11-concepts/#dfn-language-tagged-string"
     * >MAY be converted to lower case</a>.
     *
     * The returned Literal SHOULD have a {@link Literal#getLexicalForm()} which
     * is equal to the provided lexicalForm, MUST return a
     * {@link Literal#getDatatype()} that is equal to the IRI
     * <code>http://www.w3.org/1999/02/22-rdf-syntax-ns#langString</code>, and
     * MUST have a {@link Literal#getLanguageTag()} present which SHOULD be
     * equal to the provided language tag (compared as
     * {@link String#toLowerCase(Locale)} using {@link Locale#ENGLISH}).
     *
     * @param lexicalForm The literal value
     * @param languageTag The non-empty language tag as defined by <a
     *                    href="http://tools.ietf.org/html/bcp47">BCP47</a>
     * @return The created Literal
     * @throws IllegalArgumentException      If the provided values are not acceptable, e.g. because the
     *                                       languageTag was syntactically invalid.
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default Literal createLiteral(String lexicalForm, String languageTag)
            throws IllegalArgumentException, UnsupportedOperationException {
        throw new UnsupportedOperationException("createLiteral(String,String) not supported");
    }

    /**
     * Create a triple.
     *
     * The returned Triple SHOULD have a {@link Triple#getSubject()} that is
     * equal to the provided subject, a {@link Triple#getPredicate()} that is
     * equal to the provided predicate, and a {@link Triple#getObject()} that is
     * equal to the provided object.
     *
     * @param subject   The IRI or BlankNode that is the subject of the triple
     * @param predicate The IRI that is the predicate of the triple
     * @param object    The IRI, BlankNode or Literal that is the object of the triple
     * @return The created Triple
     * @throws IllegalArgumentException      If any of the provided arguments are not acceptable, e.g.
     *                                       because a Literal has a lexicalForm that is too large for an
     *                                       underlying storage.
     * @throws UnsupportedOperationException If the operation is not supported.
     */
    default Triple createTriple(BlankNodeOrIRI subject, IRI predicate, RDFTerm object)
            throws IllegalArgumentException, UnsupportedOperationException {
        throw new UnsupportedOperationException("createTriple(BlankNodeOrIRI,IRI,RDFTerm) not supported");
    }

}