package tr.com.srdc.mdr.core.api.ai;
import java.util.List;
import tr.com.srdc.mdr.core.api.composite.ClassificationSchemeItem;
import tr.com.srdc.mdr.core.model.iso11179.DataElementResource;
import tr.com.srdc.mdr.core.util.MappingRelation;
/**
* A Data Element is considered to be a basic unit of data of interest to an
* organization. It is a unit of data for which the definition, identification,
* representation, and permissible values are specified by means of a set of
* attributes.<br>
* As an {@link AdministeredItem}, a Data Element carries its own Administration
* Record information, allowing it to be identified, named, defined and
* optionally classified in a {@link ClassificationScheme}.<br>
* A Data Element is formed when a {@link DataElementConcept} is assigned a
* representation. One of the key components of a representation is the
* {@link ValueDomain}, i.e., restricted valid values.<br>
* A Data Element is the association among a {@link DataElementConcept}, a
* {@link ValueDomain} and optionally a {@link RepresentationClass}. The
* association of a Data Element with a Representation Class may be either
* direct, or via the Value Domain A Data Element cannot be registered as an
* Administered Item without being associated with a Data Element Concept and a
* Value Domain.<br>
* A representation class qualifier may be specified, that is used to qualify
* the name of the data element.<br>
* A data element precision may be used to specify the number of decimal places
* permitted in any associated data element values. If not specified, the unit
* of measure precision from the associated Value Domain shall apply.
*
* @author anil
*
*/
public interface DataElement extends AdministeredItem {
@Override
/**
* @return the {@link DataElementResource} version this instance.
*/
DataElementResource asMDRResource();
/**
* @return {@link DataElementConcept} which which forms this DataElement and
* identifies WHAT is the data
*/
DataElementConcept getDataElementConcept();
/**
* @return {@link ValueDomain} which forms this DataElement and identifies
* HOW physically the data is
*/
ValueDomain getValueDomain();
/**
*
*
* @param oid
*
* @param extractionSpecificationType
* Type of the extraction specification. <b>Possible values:
* DataElement.EXTRACTION_SPEC_TYPE_*</b>
* @param extractionSpecification
* Extraction expression in the given extraction specification
* type
*
*/
/**
* Abstract common data elements can be implemented in different content
* models. Machine-processable specifications for supported content models
* can be added to data elements.
*
* @param oid
* oid for the target content model
* @param esType
* Type of the extraction specification. XPATH, BRIDG UML...
* @param esScript
* The extraction specification script.
*/
void addExtractionSpecification(String oid, String esType, String esScript);
/**
*
* @return List of the classification scheme items used for extraction
* specifications. Contains specifications to retrieve the element
* on other content models.
*/
List<ClassificationSchemeItem> getExtractionSpecifications();
/**
* Abstract common data elements can be implemented in different content
* models. Machine-understandable similarities can be added to data
* elements. Adds mappings to both data elements if the relation symmetric
*
* @param relation
* The mapping relation between data elements.
* @param matchedElement
* The matched data element
*/
void addMapping(MappingRelation relation, DataElement matchedElement);
/**
*
* @return List of the classification scheme items used for mappings between
* this data element and other data elements from other terminology
* systems
*/
List<ClassificationSchemeItem> getMappings();
// /**
// * DataElement's may have {@link DataElementExample}'s which provides
// * representative samples of the DataElement.<br>
// * This method is used to create a DataElementExample which provides
// samples
// * of this DataElement or a set of DataElements
// *
// * @param exampleItem
// * Example Item as a representative sample for the DataElement
// * @return newly created DataElementExample providing samples for this
// * DataElements
// */
// DataElementExample createDataElementExample(String exampleItem);
//
// /**
// * @return unmodifiable List of all {@link DataElementExample}'s providing
// * representative samples for this DataElement
// */
// List<DataElementExample> getDataElementExamples() throws MDRException;
//
// /**
// * @return unmodifiable List of all {@link DataElementDerivation}s which
// * take this DataElement as input
// * @throws MDRException
// */
// List<DataElementDerivation> getInputDerivations() throws MDRException;
//
// /**
// * @return {@link DataElementDerivation} of which this DataElement is
// output
// */
// DataElementDerivation getOutputDerivation();
//
// /**
// * Method to set qualifier for the {@link RepresentationClass} of the
// * DataElement.<br>
// * DataElemenet may or may not have a RepresentationClass which act as a
// * additional ClassificationScheme for DataElements.
// * RepresentationClassQualifier is used to specify RepresentationClass if
// it
// * exists.
// *
// * @param qualifier
// * Optional. New value for the RepresentationClass qualifier
// * attribute. If given <code>null</code>, removes existing value.
// */
// void setClassQualifier(String qualifier);
//
// /**
// * @return Qualifier of the RepresentationClass of DataElement. If such
// * attribute does not exist, return <code>null</code>.
// */
// String getClassQualifier();
//
// /**
// * Method to set precision attribte of DataElement.<br>
// * Precision is used to specify number of decimal places permitted in any
// * values of DataElement. If not specified, then precision from
// * {@link ValueDomain}'s {@link UnitOfMeasure} could be used.
// *
// * @param precision
// * Optinoal. New value for the precision attribute. If given
// * <code>null</code>, removes existing value.
// */
// void setPrecision(int precision);
//
// /**
// * @return Precision of the DataElement. If such attribute does not exist,
// * return <code>null</code>.
// */
// int getPrecision();
}