/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * http://www.dspace.org/license/
 */

package org.dspace.rdf.conversion;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;

/**
 * Schema for DSpace Metadata RDF Mappings.
 *
 * @author Pascal-Nicolas Becker (dspace -at- pascal -hyphen- becker -dot- de)
 * @see <a href="http://digital-repositories.org/ontologies/dspace-metadata-mapping/0.2.0">http://digital
 * -repositories.org/ontologies/dspace-metadata-mapping/0.2.0</a>
 */
public class DMRM {
    /**
     * <p>The RDF model that holds the vocabulary terms</p>
     */
    private static Model m_model = ModelFactory.createDefaultModel();

    /**
     * <p>The namespace of the vocabulary as a string</p>
     */
    public static final String NS = "http://digital-repositories.org/ontologies/dspace-metadata-mapping/0.2.0#";

    /**
     * <p>The namespace of the vocabulary as a string</p>
     *
     * @return Namespace URI
     * @see #NS
     */
    public static String getURI() {
        return NS;
    }

    /**
     * <p>The namespace of the vocabulary as a resource</p>
     */
    public static final Resource NAMESPACE = m_model.createResource(NS);

    /**
     * <p>Represents the mapping of a DSpace metadata value to an RDF equivalent.</p>
     */
    public static final Resource DSpaceMetadataRDFMapping = m_model.createResource(NS + "DSpaceMetadataRDFMapping");

    /**
     * <p>A reified statement that describes the result of the DSpaceMetadataRDFMapping.</p>
     */
    public static final Resource Result = m_model.createResource(NS + "Result");

    /**
     * <p>Processes a metadata value into an RDF value or an IRI.</p>
     */
    public static final Resource ValueProcessor = m_model.createResource(NS + "ValueProcessor");

    /**
     * <p>A regular expression to be used with java, composed of a matching and a replaying expression.</p>
     */
    public static final Resource ValueModifier = m_model.createResource(NS + "ValueModifier");

    /**
     * <p>Generates a literal depending on a DSpace metadata value.</p>
     */
    public static final Resource LiteralGenerator = m_model.createResource(NS + "LiteralGenerator");

    /**
     * <p>Generates an IRI used for a rdfs:Resource depending on the converted DSpace Object and one of its metadata
     * values.</p>
     */
    public static final Resource ResourceGenerator = m_model.createResource(NS + "ResourceGenerator");

    /**
     * <p>Placeholder for the IRI of the DSpace Object that gets converted.</p>
     */
    public static final Resource DSpaceObjectIRI = m_model.createResource(NS + "DSpaceObjectIRI");

    /**
     * <p>Shortcut to generate a Literal containing an unchanged metadata value.</p>
     */
    public static final Resource DSpaceValue = m_model.createResource(NS + "DSpaceValue");

    /**
     * <p>Specifies the RDF to generate for a specified matadata.</p>
     */
    public static final Property creates = m_model.createProperty(NS + "creates");

    /**
     * <p>The subject of a DSpace metadata RDF mapping result.</p>
     */
    public static final Property subject = m_model.createProperty(NS + "subject");

    /**
     * <p>The predicate of a DSpace metadata RDF mapping result.</p>
     */
    public static final Property predicate = m_model.createProperty(NS + "predicate");

    /**
     * <p>The object of a DSpace metadata RDF mapping result.</p>
     */
    public static final Property object = m_model.createProperty(NS + "object");

    /**
     * <p>The name of the metadata to convert (e.g. dc.title).</p>
     */
    public static final Property metadataName = m_model.createProperty(NS + "metadataName");

    /**
     * <p>A regex that the metadata value has to fulfill if the mapping should become active.</p>
     */
    public static final Property condition = m_model.createProperty(NS + "condition");

    /**
     * <p>Information how the metadata value should be modified before it is inserted in the pattern.</p>
     */
    public static final Property modifier = m_model.createProperty(NS + "modifier");

    /**
     * <p>A regex that matches those subsequences of a metadata value, that should be replaced.</p>
     */
    public static final Property matcher = m_model.createProperty(NS + "matcher");

    /**
     * <p>A regex that replaces previously matched subsequences of a metadata value.</p>
     */
    public static final Property replacement = m_model.createProperty(NS + "replacement");

    /**
     * <p>A pattern that contains $DSpaceValue as placeholder for the metadata value.</p>
     */
    public static final Property pattern = m_model.createProperty(NS + "pattern");

    /**
     * <p>Defines the datatype a generated literal gets.</p>
     */
    public static final Property literalType = m_model.createProperty(NS + "literalType");

    /**
     * <p>Defines the language a literal uses. Maybe overridden by #dspaceLanguageTag.</p>
     */
    public static final Property literalLanguage = m_model.createProperty(NS + "literalLanguage");

    /**
     * <p>Defines to use the language tag of a DSpace metadata value.</p>
     */
    public static final Property dspaceLanguageTag = m_model.createProperty(NS + "dspaceLanguageTag");

    /**
     * Default constructor
     */
    private DMRM() { }
}
