The description of conformance is presented in two parts – the mandatory baseline that any implementation of the DMA API must provide, and a detailed definition of each optional capability.
General
Every DMA object describes itself by providing metadata, as specified in the object model overview.
All the DMA classes are described in the reference sections of this specification. For each DMA class, the specification defines what properties and interfaces must be supported for it, given that the class itself is supported.
In order to support self describing metadata, at least the following DMA classes (referred to as SDM classes below) must be supported:
The DMA classes that must be supported by all implementations vary according to metadata space type.
The following are the metadata space types, and the minimum set of DMA classes that they must support:
SDM classes
System
Enumeration
Enumeration Of Object
Individual Document Space Metadata Spaces
SDM classes
DocSpace
DocVersion
Individual Document Space Scope Metadata Spaces
SDM classes
Scope
Query
Query Constant
Query Node
Query Nonterminal Node
Query Operand Description
Query Operator
Query Operator Description
Query Order By Node
Query Property
Query Root
Query Searchable Class
Merged Scope Metadata Spaces
(Same as Individual Document Space Metadata Space)
Query Result Metadata Spaces
SDM classes
Enumeration
Query Result Row
Query Result Set
System Object
The system object is a DMA object implemented by software referred to as "middleware". The main functions of the middleware are to provide an implementation of the system object, a means for registering and locating document spaces, and to provide merged scope objects generated from multiple document space scopes, so that cross repository queries can be performed.
Every conformant implementation of the system object must provide:
The main purpose of document repository implementations of the DMA API is to provide an implementation of the Document Space object, and objects generated from it, e.g., scope objects.
Every conformant document space implementation must provide:
In the subsections of this section, the identifiers for document space capabilities (e.g., DMAC_LEVEL, DMAC_AUTHENTICATE, etc.) appear in the DMA header files as macros that evaluate to unique small, nonnegative integers. The capability identifiers are intended to be used as a list element index of the Doc Space Capabilities property, which is a list of integer32 property native to the document space object (class Doc Space). When the following refers to a capability being "set" or "reset", that means that the value of the corresponding list element is DMA_TRUE or DMA_FALSE, respectively.
The value indicates the version level number of the capabilities property for the document repository. It is a positive integer equal to 1 for the 1.0 DMA spec. On every subsequent release of the DMA spec. in which additional document repository capabilities are introduced, this number is increased by one.
If set, then the document space object supports the IdmaAuthentication interface.
If reset, the document space object does not support the IdmaAuthentication interface.
If set, then (1) document space objects can be added, and deleted, and modified, and/or (2) document versions can be checked in.
If reset, the document space is read only.
If set, IdmaDocSpace:: ConnectObject is supported on the document space object to connect to persistent objects given their OIID.
If reset, IdmaDocSpace:: ConnectObject is not supported.
This is set if and only if content is supported: At least some documents in the document space can have content. This implies that the Rendition class and at least one of the classes Content Transfer and Content Reference must be supported.
If reset, the document repository merely catalogs external material, e.g., books on a shelf, and no documents have content.
If set, then content is supported, and documents can have multiple renditions.
If reset, documents can have at most one rendition.
If set, then content is supported, and renditions can have multiple content elements.
If reset, renditions can not have more than one content element.
If set, then content is supported, and the document space supports the use of rendition types from the MIME rendition type space. NOTE: The Rendition Type property is a string of the form <rendition_type_space>::<typename>. The only <rendition_type_space> defined in the DMA 1.0 spec. is "MIME" (Multipurpose Internet Mail Extension) as defined by the IANA. Examples are "MIME::application/postscript" and "MIME::text". END NOTE
If reset, then the document space does not support MIME reference type names.
If set, then document content is supported, and document content can be edited. Some or all of the following operations can be performed on existing persistent Doc Version objects: Renditions can be added; renditions can be deleted; renditions can be replaced; content elements can be added; content elements can be deleted; content elements can be replaced. This implies IdmaConnection:: ExecuteChange is supported.
If reset, then document cannot be edited. (Note that checking in a new version of a document does not count as updating content in the sense of this capability. That is viewed as creating a new persistent Doc Version object for purposes of discussion of this capability.)
If set, then content is supported, and IdmaContentTransfer:: SetCaptureResource supported. This method allows content to be captured from a named resource.
If reset, then IdmaContentTransfer:: SetCaptureResource is not supported.
If set, then content is supported, and IdmaContentTransfer:: CopyToResource is supported. This method makes a copy of captured content data in a resource of a specified name.
If reset, then IdmaContentTransfer:: CopyToResource is not supported.
If containment is supported, the following optional classes must be supported:
If set, then, any directly containable object (except for root direct containers) must be contained in a container via direct containment. (There are no freestanding directly containable objects except root direct containers.)
If reset, then it is not required that directly containable objects be contained in a container via direct containment.
If containment is not implemented, the value is reset.
If set, then, any referentially containable object (except for root referential containers) must be contained in a container via referential containment. (There are no freestanding referentially containable objects except root referential containers.)
If reset, then it is not required that referentially containable objects be contained in a container via referential containment.
If containment is not implemented, the value is reset.
If DMAC_CONTAIN_REF_REQUIRED and DMAC_CONTAIN_DIR_REQUIRED are both set, and if there is a class that can be contained both via direct containment and referential containment, then objects of that class must be directly contained, but need not be referentially contained.
If DMAC_CONTAIN is set, then containment is supported. The value of DMAC_CONTAIN is defined to be DMAC_CONTAIN_REF OR DMAC_CONTAIN_DIR .
If set, then referential containment is supported. The value of DMAC_CONTAIN_REF is defined to be DMAC_CONTAIN_REF_CONTAINER OR DMAC_CONTAIN_REF_CFG_HISTORY OR DMAC_CONTAIN_REF_VER_SERIES OR DMAC_CONTAIN_REF_VER_DESC OR DMAC_CONTAIN_REF_DOC_VER OR DMAC_CONTAIN_REF_OTHER .
If DMAC_CONTAIN_REF is set, the following optional classes must be supported:
If set, then classes of type Container and subclasses of that type may be contained referentially.
If reset, classes of type Container and subclasses of that type may not be referentially contained.
If set, then classes of type Configuration History and subclasses of that type may be contained referentially.
If reset, then classes of type Configuration History and subclasses of that type may not be referentially contained.
If set, then classes of type Version Series and subclasses of that type may be contained referentially.
If reset, then classes of type Version Series and subclasses of that type may not be referentially contained.
If set, then classes of type Version Description and subclasses of that type may be contained referentially.
If reset, then classes of type Version Description and subclasses of that type may not be referentially contained.
If set, then classes of type Doc Version and subclasses of that type may be contained referentially.
If reset, then classes of type Doc Version and subclasses of that type may not be referentially contained.
If set, then a class of type other than Doc Version, Configuration History, Version Series, and Version Description and subclasses of those classes may be contained referentially.
If reset, then no classes of type other than Doc Version, Configuration History, Version Series, and Version Description and subclasses of those classes may be contained referentially.
This is the maximum number of recursive levels that containers can contain other containers referentially. If a container can not be contained referentially by another container, the value is zero. If there is no limit on the number of levels of referential containment of containers, the value is -1.
If referential containment is not supported, the value is zero.
The value of this capability is defined as DMAC_CONTAIN_REF_ORDER_HEAD OR DMAC_CONTAIN_REF_ORDER_TAIL .
If set, the IdmaRelationshipOrdering interface is supported for Referential Containment Relationship objects, and the SetOrdering method accepts the value DMA_POS_DEFAULT for the value of the ulHeadWhere parameter.
If reset, the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_HEAD_BEFORE
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_BEFORE for the ulHeadWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_BEFORE value for the ulHeadWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_HEAD_AFTER
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_AFTER for the ulHeadWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_AFTER value for the ulHeadWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_HEAD_FIRST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_FIRST for the ulHeadWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_FIRST value for the ulHeadWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_HEAD_LAST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_LAST for the ulHeadWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_LAST value for the ulHeadWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_HEAD_NO_CH
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_NO_CHANGE for the ulHeadWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not implemented for Referential Containment Relationship objects, or the DMA_POS_NO_CHANGE value for the ulHeadWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
If set, the IdmaRelationshipOrdering interface is supported for Referential Containment Relationship objects, and the SetOrdering method accepts the value DMA_POS_DEFAULT for the value of the ulTailWhere parameter.
If reset, the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_TAIL_BEFORE
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_BEFORE for the ulTailWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_BEFORE value for the ulTailWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_TAIL_AFTER
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_AFTER for the ulTailWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_AFTER value for the ulTailWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_TAIL_FIRST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_FIRST for the ulTailWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_FIRST value for the ulTailWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_TAIL_LAST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_LAST for the ulTailWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the DMA_POS_LAST value for the ulTailWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
DMAC_CONTAIN_REF_ORDER_TAIL_NO_CH
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_NO_CHANGE for the ulTailWhere parameter for Referential Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Referential Containment Relationship objects, or the SetOrdering DMA_POS_NO_CHANGE value for the ulTailWhere parameter to SetOrdering is not supported for Referential Containment Relationship objects.
The value of DMAC_CONTAIN_DIR is defined to be DMAC_CONTAIN_DIR_CONTAINER OR DMAC_CONTAIN_DIR_CFG_HISTORY OR DMAC_CONTAIN_DIR_VER_SERIES OR DMAC_CONTAIN_DIR_VER_DESC OR DMAC_CONTAIN_DIR_DOC_VER OR DMAC_CONTAIN_DIR_OTHER .
If DMAC_CONTAIN_DIR is set, the following optional classes must be supported:
If set, then classes of type Container and subclasses of that type may be contained directly.
If reset, then classes of type Container and subclasses of that type may not be directly contained.
If set, then classes of type Configuration History and subclasses of that type may be contained directly.
If reset, then classes of type Configuration History and subclasses of that type may not be directly contained.
If set, then classes of type Version Series and subclasses of that type may be contained directly.
If reset, then classes of type Version Series and subclasses of that type may not be directly contained.
If set, then classes of type Version Description and subclasses of that type may be contained directly.
If reset, then classes of type Version Description and subclasses of that type may not be directly contained.
If set, then classes of type Doc Version and subclasses of that type may be contained directly.
If reset, then classes of type Doc Version and subclasses of that type may not be directly contained.
If set, then a class of type other than Doc Version, Configuration History, Version Series, and Version Description and subclasses of those classes may be contained directly.
If reset, then no classes of type other than Doc Version, Configuration History, Version Series, and Version Description and subclasses of those classes may be contained directly.
This is the maximum number of recursive levels that containers can contain other containers via direct containment. If a container can not be contained by another container via direct containment, the value is zero. If there is no limit on the number of levels, the value is -1.
If direct containment is not supported, the value is zero.
This capability is defined as DMAC_CONTAIN_DIR_ORDER_HEAD OR DMAC_CONTAIN_DIR_ORDER_TAIL .
If set, the IdmaRelationshipOrdering interface is supported for Direct Containment Relationship objects, and the SetOrdering method accepts the value DMA_POS_DEFAULT for the value of the ulHeadWhere parameter.
If reset, the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_HEAD_BEFORE
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_BEFORE for the ulHeadWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_BEFORE value for the ulHeadWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_HEAD_AFTER
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_AFTER for the ulHeadWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_AFTER value for the ulHeadWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_HEAD_FIRST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_FIRST for the ulHeadWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_FIRST value for the ulHeadWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_HEAD_LAST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_LAST for the ulHeadWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_LAST value for the ulHeadWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_HEAD_NO_CH
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_NO_CHANGE for the ulHeadWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not implemented for Direct Containment Relationship objects, or the DMA_POS_NO_CHANGE value for the ulHeadWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
If set, the IdmaRelationshipOrdering interface is supported for Direct Containment Relationship objects, and the SetOrdering method accepts the value DMA_POS_DEFAULT for the value of the ulTailWhere parameter.
If reset, the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_TAIL_BEFORE
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_BEFORE for the ulTailWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_BEFORE value for the ulTailWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_TAIL_AFTER
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_AFTER for the ulTailWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_AFTER value for the ulTailWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_TAIL_FIRST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_FIRST for the ulTailWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_FIRST value for the ulTailWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_TAIL_LAST
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_LAST for the ulTailWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the DMA_POS_LAST value for the ulTailWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
DMAC_CONTAIN_DIR_ORDER_TAIL_NO_CH
If set, the IdmaRelationshipOrdering:: SetOrdering method allows the value DMA_POS_NO_CHANGE for the ulTailWhere parameter for Direct Containment Relationship objects.
If reset, either the IdmaRelationshipOrdering interface is not supported for Direct Containment Relationship objects, or the SetOrdering DMA_POS_NO_CHANGE value for the ulTailWhere parameter to SetOrdering is not supported for Direct Containment Relationship objects.
If versioning is supported, the following optional classes must be supported:
If versioning is supported, the following optional interfaces must be supported by the Doc Version class:
If set, new document versions can be created via IdmaVersionable:: SetCheckin on the Doc Version object, followed by IdmaConnection:: ExecuteChange on the Doc Version object..
If reset, the checking in of new document versions is not supported.
If set, then the versioning related properties are required to have values. Thus, for example, all documents have to be versioned.
If reset, then the versioning related properties are not required to have values. Thus, for example, there can be documents not in a version series.
If set, then there are classes that are not subclasses of Versionable that have versioning properties, and so may be versioned.
If reset, then only classes that are subclasses of Versionable can have versioning properties.
If set, then the document space allows checkin of an object that is already persistent.
If reset, then the document space does not allow checkin of an object that is already persistent.
If set, then a Doc Version can have more than one Version Description as a parent.
If reset, then a Doc Version can have at most one Version Description as a parent.
If set, then the document space supports IdmaVersionSeries:: SetCheckOutNext.
If rest, then the document space does not support SetCheckOutNext. (SetReserveNext is in the versioning baseline. SetCheckOutNext isn’t.)
If set, then the document space supports making a version other than the last be the current version. The current version is what gets checked out and leads to the next version when it’s checked in. Changing the current version would be done by changing the Current Version Description property of the Version Series object.
If reset, the current version cannot be modified. This implies that the current version is always the last version. This also implies that the only way to insert a new version is checkout or reserve, followed by checkin.
DMAC_VERSION_DELETE_VERSION_DESCRIPTION
If set, then the document space supports deleting some, but not necessarily all, Version Descriptions in one operation.
If reset, versions can not be deleted selectively.
If set, then query is supported: IdmaDocSpace:: GetScope is supported, and at least the following query classes are supported: Scope, Query, Query Node, Query Root, Query Property, Query Searchable Class, Query Result Set, Query Result Row. There is at least one searchable class in the Searchable Classes property of scopes generated by the document space, and at least one selectable property in every searchable class in scopes generated by the document space.
If reset, there are no useful queries that are supported. The IdmaDocSpace:: GetScope method is not supported, and none of the query classes are supported. The query classes are: Query, Query Constant, Query Constant Binaries, QueryConstant Binary, Query Constant Boolean, Query Constant Booleans, Query Constant Date Time, Query Constant Date Times, Query Constant Float64, Query Constant Float64s, Query Constant Id, Query Constant Ids, Query Constant Integer32, Query Constant Integer32s, Query Constant String, Query Constant Strings, Query Join Op, Query Node, Query Nonterminal Node, Query Operand Description, Query Operator, Query Operator Description, Query Order By Node, Query Property, Query Result Row, Query Result Set, Query Root, Query Searchable Class, Scope.
If set, then the following is true: DMAC_QUERY is set. The Query Expression property of the Query Root object may be non null. The classes Query Operator Description, Query Operand Description, Query Nonterminal Node, Query Constant, and Query Operator are supported. At least one query operator that is not a join operator is supported. At least one of the following query classes is supported: Query Constant Binaries, Query Constant Binary, Query Constant Boolean, Query Constant Booleans, Query Constant Date Time, Query Constant Date Times, Query Constant Float64, Query Constant Float64s, Query Constant Id, Query Constant Ids, Query Constant Integer32, Query Constant Integer32s, Query Constant String, Query Constant Strings.
If reset, then the Query Expression property of the Query Root object must be null.
If set, then DMAC_QUERY is set, and at least one query join operator is supported.
If reset, then no query join operators are supported.
If set, then DMA_QUERY is set, and the Orderings property of the Query Root object may be non null.
If reset, then the Orderings property of the Query Root object must be null.
If set, Scope objects created by the current document space object always perform three valued elimination on queries when requested to do so.
If reset, Scope objects created by the current document space object never perform three valued elimination on queries.
If this capability is set, locking is supported. The value of DMAC_LOCKING is defined as DMAC_LOCKING_WRITER OR DMAC_LOCKING_READER OR DMAC_LOCKING_EXISTENCE.
Required Interfaces and methods:
If set, the value DMA_LOCK_WRITE for the lLockType parameter to ApplyLock is supported.
If reset, the value DMA_LOCK_WRITE for the lLockType parameter to ApplyLock is not supported.
If set, the value DMA_LOCK_READ for the lLockType parameter to ApplyLock is supported.
If reset, the value DMA_LOCK_READ for the lLockType parameter to ApplyLock is not supported.
If set, the value DMA_LOCK_EXIST for the lLockType parameter to ApplyLock is supported.
If reset, the value DMA_LOCK_EXIST for the lLockType parameter to ApplyLock is not supported.