/*
* 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.rdf.model;
/**
The revised and soon-to-be-core interface for sources of models,
typically generated from RDF descriptions.
<p>ModelSources can supply models in a variety of ways.
<ul>
<li>some fresh model of the kind this ModelSource supplies
<li>the particular model this ModelSource supplies
<li>a named model from the collection this ModelSource supplies
</ul>
A ModelSource is free to "forget" named models if it so wishes;
for example, it may be a discard-if-getting-full cache.
*/
public interface ModelSource extends ModelGetter
{
/**
Answer this ModelSource's default model. Every ModelSource
has a default model. That model need not exist until the
first call on createDefaultModel. Multiple calls of getModel will
yield the *same* model. This method never returns <code>null</code>.
*/
Model createDefaultModel();
/**
Answer a Model that satisfies this ModelSource's shape. Different
calls return different models - they are not permitted to return
the same model. (Doing this on a database model will create new,
pseudo-anonymous, models.) This method never returns <code>null</code>.
*/
Model createFreshModel();
/**
Answer a model. Different ModelSources may implement this
in very different ways - ModelSource imposes few constraints
other than the result is a proper Model. A ModelSource may
use the name to identify an existing Model and re-use it,
or it may create a fresh Model each time.
<p>It is expected that uses of different names will answer
different models (different in the strong sense of not having
the same underlying graph, too).
<p>If the ModelSource does not have a model with this name,
and if it is not prepared to create one, it should throw a
DoesNotExistException. This method never returns <code>null</code>.
*/
Model openModel( String name );
/**
Answer the model named by <code>string</code> in this ModelSource,
if it [still] has one, or <code>null</code> if there isn't one.
The ModelSource should <i>not</i> create a fresh model if it
doesn't already have one.
*/
Model openModelIfPresent( String string );
}