package org.openprovenance.prov.model;
/**
* <p>Interface for PROV Specialization association.
* <p><a href="http://www.w3.org/TR/prov-dm/#concept-specialization">PROV-DM Definition for Specialization</a>:
* An entity that is a specialization ◊ of another shares all aspects of the latter, and additionally presents
* more specific aspects of the same thing as the latter. In particular, the lifetime of the entity being specialized
* contains that of any specialization.
*
* <p><span class="strong">Relevant Factory Methods:</span>
* <ul>
* <li> {@link ProvFactory#newSpecializationOf(QualifiedName, QualifiedName)}
* <li> {@link ObjectFactory#createSpecializationOf()}
* </ul>
*
* <p><span class="strong">Schema Definition:</span>
* <p>The following schema fragment specifies the expected content contained within this class.
*
* <pre>
* <complexType name="Specialization">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* <element name="specificEntity" type="{http://www.w3.org/ns/prov#}IDRef"/>
* <element name="generalEntity" type="{http://www.w3.org/ns/prov#}IDRef"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
* <p>
* @see <a href="http://www.w3.org/TR/prov-dm/#term-specialization">PROV-DM Specialization</a>
* @see <a href="http://www.w3.org/TR/prov-o/#specializationOf">PROV-O specializationOf</a>
* @see <a href="http://www.w3.org/TR/prov-n/#expression-specialization">PROV-N Specialization</a>
* @see <a href="http://www.w3.org/TR/prov-xml/#term-Specialization">PROV-XML Specialization</a>
* @see <a href="http://www.w3.org/Submission/2013/SUBM-prov-json-20130424/#term-specialization">PROV-JSON Specialization</a>
*
* @author lavm
*
*/
public interface SpecializationOf extends Relation {
/** Mutator for the entity that is a specialization of the general entity.
* @param specific the entity that is a specialization of the general one*/
void setSpecificEntity(QualifiedName specific);
/** Mutator for the entity that is being specialized.
* @param general the entity that is being specialized.
**/
void setGeneralEntity(QualifiedName general);
/** Returns an identifier of the entity that is being specialized.
*
* @return {@link QualifiedName} of the entity that is being specialized.
*/
public QualifiedName getGeneralEntity();
/** Returns an identifier of the entity that is a specialization of the general entity.
*
* @return {@link QualifiedName} of the entity that is a specialization of the general one.
*/
public QualifiedName getSpecificEntity();
}