| /** |
| * 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.simple; |
| |
| import java.util.UUID; |
| |
| import org.apache.commons.rdf.api.BlankNode; |
| import org.apache.commons.rdf.api.BlankNodeOrIRI; |
| import org.apache.commons.rdf.api.Dataset; |
| import org.apache.commons.rdf.api.Graph; |
| import org.apache.commons.rdf.api.IRI; |
| import org.apache.commons.rdf.api.Literal; |
| import org.apache.commons.rdf.api.Quad; |
| import org.apache.commons.rdf.api.RDFTerm; |
| import org.apache.commons.rdf.api.RDF; |
| import org.apache.commons.rdf.api.Triple; |
| |
| /** |
| * Simple RDF implementation. |
| * <p> |
| * The {@link RDFTerm}, {@link Triple}, {@link Quad}, {@link Graph} and |
| * {@link Dataset} instances created by SimpleRDF are simple in-memory |
| * Implementations that are not thread-safe or efficient, but which may be |
| * useful for testing and prototyping purposes. |
| */ |
| public class SimpleRDF implements RDF { |
| |
| /** |
| * Marker interface to say that this RDFTerm is part of the Simple |
| * implementation. Used by {@link GraphImpl} to avoid double remapping. |
| * <p> |
| * This method is package protected to avoid any third-party subclasses. |
| * |
| */ |
| static interface SimpleRDFTerm extends RDFTerm { |
| } |
| |
| /** |
| * Unique salt per instance, for {@link #createBlankNode(String)} |
| */ |
| private final UUID SALT = UUID.randomUUID(); |
| |
| @Override |
| public BlankNode createBlankNode() { |
| return new BlankNodeImpl(); |
| } |
| |
| @Override |
| public BlankNode createBlankNode(final String name) { |
| return new BlankNodeImpl(SALT, name); |
| } |
| |
| @Override |
| public Graph createGraph() { |
| // Creates a GraphImpl object using this object as the factory for |
| // delegating all object creation to |
| return new GraphImpl(this); |
| } |
| |
| @Override |
| public Dataset createDataset() throws UnsupportedOperationException { |
| return new DatasetImpl(this); |
| } |
| |
| @Override |
| public IRI createIRI(final String iri) { |
| final IRI result = new IRIImpl(iri); |
| // Reuse any IRI objects already created in Types |
| return Types.get(result).orElse(result); |
| } |
| |
| @Override |
| public Literal createLiteral(final String literal) { |
| return new LiteralImpl(literal); |
| } |
| |
| @Override |
| public Literal createLiteral(final String literal, final IRI dataType) { |
| return new LiteralImpl(literal, dataType); |
| } |
| |
| @Override |
| public Literal createLiteral(final String literal, final String language) { |
| return new LiteralImpl(literal, language); |
| } |
| |
| @Override |
| public Triple createTriple(final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) { |
| return new TripleImpl(subject, predicate, object); |
| } |
| |
| @Override |
| public Quad createQuad(final BlankNodeOrIRI graphName, final BlankNodeOrIRI subject, final IRI predicate, final RDFTerm object) |
| throws IllegalArgumentException { |
| return new QuadImpl(graphName, subject, predicate, object); |
| } |
| } |