MMI Collection Browser Object Schema
Out of date
Newest schema mapping is here
Status
This schema is... |
|
---|---|
under review |
|
complete |
|
Schema
Procedure |
MMI Field name |
CSpace field name |
DB table.field |
NXQL table:field |
Link to search? |
---|---|---|---|---|---|
Cataloging |
Label |
Brief Description (RF) |
collectionobjects_common_briefdescriptions.item .pos |
collectionobjects_common:briefDescriptions |
N |
|
Description |
Distinguishing Features |
collectionobjects_common.distinguishingfeatures |
collectionobjects_common:distinguishingFeatures |
N |
|
Content remarks |
Inscription Content (RF) |
collectionobjects_mmi_mmiinscriptioncontents.item .pos |
collectionobjects_mmi:mmiInscriptionContents |
N |
|
Accession number |
Object Number |
collectionobjects_common.objectnumber |
collectionobjects_common:objectNumber |
N |
|
Collection category |
Responsible Department (RF)(CL) |
collectionobjects_common_responsibledepartments.item |
collectionobjects_common:responsibleDepartments |
Y |
|
Artifact class/ Work type (Categories) |
Artifact class/ Work type (RG) |
shares the table name |
shares the table name |
|
|
|
Artifact Class |
.artifactclass |
:artifactClassWorkTypeList/*/artifactClass |
Y |
|
|
Work Type |
.worktype |
:artifactClassWorkTypeList/*/workType |
Y |
|
Dimensions |
Dimensions (component) |
|
shares the table name |
N |
|
|
Dimension summary |
measuredpartgroup.dimensionsummary |
:measuredPartGroupList/*/dimensionSummary |
|
|
|
Measured part |
measuredpartgroup.measuredpart |
:measuredPartGroupList/*/measuredPart |
|
|
|
Value date (date) |
dimensionsubgroup.valuedate |
:measuredPartGroupList/*/dimensionSubGroupList/*/valueDate |
|
|
|
Measurement unit |
dimensionsubgroup.measurementunit |
:measuredPartGroupList/*/dimensionSubGroupList/*/measurementUnit |
|
|
|
Value (integer) |
dimensionsubgroup.value |
:measuredPartGroupList/*/dimensionSubGroupList/*/value |
|
|
|
Value qualifier (integer) |
dimensionsubgroup.valuequalifier |
:measuredPartGroupList/*/dimensionSubGroupList/*/valueQualifier |
|
|
Extent |
Number of Objects (integer) |
collectionobjects_common.numberofobjects |
collectionobjects_common:numberOfObjects |
N |
|
Attribute: Format |
Physical Description |
collectionobjects_common.physicaldescription |
collectionobjects_common:physicalDescription |
N |
|
Attribute: Technique |
Technique (RF) |
collectionobjects_mmi_mmitechniques.item .pos |
collectionobjects_mmi:mmiTechniques |
N |
|
Attribute: Dimensions |
Dimensions (component) |
same as before? |
|
N |
|
Attribute: Display date |
Production Date (component) |
shares the table name |
shares the table name |
N |
|
|
Display date |
.datedisplaydate |
:objectProductionDateGroupList/*/dateDisplayDate |
|
|
|
Association (URN) |
.dateassociation |
:objectProductionDateGroupList/*/dateAssociation |
|
|
|
dateEarliestScalarValue (date) |
.dateearliestscalarvalue |
:objectProductionDateGroupList/*/dateEarliestScalarValue |
|
|
|
dateLatestScalarValue (date) |
.datelatestscalarvalue |
:objectProductionDateGroupList/*/dateLatestScalarValue |
|
|
Attribute: Materials |
Material (RF) (CL) |
collectionobjects_mmi_mmimaterials.item .pos |
collectionobjects_mmi:mmiMaterials |
N |
|
Attribute: Components |
Object component name (RG) |
shares the table name |
shares the table name |
N |
|
|
Object component name |
.objectcomponentname |
:objectComponentGroupList/*/objectComponentName |
|
|
|
Object component information |
.objectcomponentinformation |
:objectComponentGroupList/*/objectComponentInformation |
|
|
Authority: Associated Entities |
Associated organization (RG) |
shares the table name |
shares the table name |
Y |
|
|
Associated organization (URN) |
.assocorganization |
:assocOrganizationGroupList/*/assocOrganization |
|
|
|
Associated organization type (CL) |
.assocorganizationtype |
:assocOrganizationGroupList/*/assocOrganizationType |
|
|
|
Associated organization note |
.assocorganizationnote |
:assocOrganizationGroupList/*/assocOrganizationNote |
|
|
Authority: Associated Productions |
Associated production (RG) |
shares the table name |
shares the table name |
Y |
|
|
Associated production (URN) |
.assocproduction |
:assocProductionList/*/assocProduction |
|
|
|
Associated production type (CL) |
.assocproductiontype |
:assocProductionList/*/assocProductionType |
|
|
|
Associated production note |
.assocproductionnote |
:assocProductionList/*/assocProductionNote |
|
|
Authority: Associated Publications |
Associated publication (RG) |
shares the table name |
shares the table name |
Y |
|
|
Associated publication (URN) |
.assocpublication |
:assocPublicationList/*/assocPublication |
|
|
|
Associated publication type (CL) |
.assocpublicationtype |
:assocPublicationList/*/assocPublicationType |
|
|
|
Associated publication note |
.assocpublicationnote |
:assocPublicationList/*/assocPublicationNote |
|
|
Authority: Production Entities |
Production organization (RG) |
shares the table name |
shares the table name |
Y |
|
|
Production organization (URN) |
.objectproductionorganization |
:objectProductionOrganizationGroupList/*/objectProductionOrganization |
|
|
|
Production role (CL) |
.objectproductionorganizationrole |
:objectProductionOrganizationGroupList/*/objectProductionOrganizationRole |
|
|
Authority: Content Entities |
Content organization (RG) |
shares the table name |
shares the table name |
Y |
|
|
Content entity (URN) |
.contententity |
:contentEntityList/*/contentEntity |
|
|
|
Content entity type (CL) |
.contententitytype |
:contentEntityList/*/contentEntityType |
|
|
Authority: Groups (collection subsets) |
need to add |
|
|
Y |
Acquisition |
Credit line |
Credit Line |
acquisitions_common.creditline |
|
N |
Location |
Current location |
Current location (URN) |
movements_common.currentlocation |
movements_common:currentLocation |
N |
The fields marked (RF) describe the NXQL format that will search through all elements of that repeatable field. To limit the search to the primary value then append /0
to the field name, e.g. collectionobjects_mmi:mmiTechniques/0
Likewise, fields marked (RG) describe repeatable groups of fields. The underlying fields are shown with a wildcard in the field path to indicate that such an search term is required for the NXQL query string to return without a syntax error. The wildcard can be replaced with a 0
to indicate the primary value of that field should be only be searched upon.
The fields marked (CL) describe a field that is a controlled list (HTML select
element). The returned value is a non-spaced string. Please see Controlled List mapping for a mapping of controlled list strings to displayed values.
(date) indicates a PostgreSQL "timestamp without time zone" type field and requires a DATE or TIMESTAMP literal in the NXQL notation. For instance, in non-URL encoded form:
collectionobjects_common:measuredPartGroupList/*/dimensionSubGroupList/*/valueDate <= DATE '2012-01-09'
or
collectionobjects_common:measuredPartGroupList/*/dimensionSubGroupList/*/valueDate <= TIMESTAMP '2012-01-09T00:00:00'
See also Common Services REST API documentation and NXQL documentation.
(integer) indicates a field integer type.
(URN) indicates a field that uses a refname structure to indicate value and metadata for that field. See also refname.
Searching through a range of values using text based fields
The following is not the preferred form. Please see searching scalar values below.
NXQL supports the BETWEEN
operator to search through a range of numerical or text values.
An example
http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common/physicalDescription BETWEEN 'g' AND 'h'
Another example for a simple range of displayDate
values for 1950's
http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common/objectProductionDateGroupList/*/dateDisplayDate BETWEEN '%1950%' AND '%1959%'
BETWEEN
doesn't give expected results when the displayDate
value is in any format other than strictly numerical. Values like "stamped 1934", "Jan 1973, Feb 1973", "ca. 1922", "Feb-May, Dec 1975" and "February, 1934" are not found when bounding the BETWEEN
operator between two numerical values.
Searching through a range of scalar date values for a structured date field
The structured date field type is a group of related fields which give greater definition of a date, range and certainty.
Searching through a range of dates for a structured date requires using the dateEarliestScalarValue
and dateLatestScalarValue
scalar fields of the structured date group.
These fields contain a postgres TIMESTAMP
value in the form of YYYY-MM-DDThh:mm:ss
where T
is an indicator of a timestamp, e.g. 2012-03-27T11:23:00
. the API will also accept queries using a DATE literal and internally convert to/from TIMESTAMP.
All scalar dates are saved in postgres with a lower bound time stamp, dateEarliestScalarValue
, of T00:00:00
and a higher bound time stamp, dateLatestScalarValue
, of T23:59:59
.
An important fact about scalar dates in this context is that CollectionSpace modifies the saved postgres timestamp value by the server's timezone. This means the postgres scalar values are effectively 5 hours behind (NYC being UTC -5, ignoring DST) in CollectionSpace. This impacts the way in which DATE or TIMESTAMP ranges are calculated using the REST API.
For example, say there is a search for all dates from 1954.
Using the DATE
literal, rather than search from a lower bound of 1954-01-01
and a higher bound of 1954-12-31
, there would be a recalculated search from 1953-12-31
up through 1955-01-01
.
Using the TIMESTAMP
literal, the range search would take into consideration the server timezone (non DST value) and recalculate based on that value. The updated query would have a range from 1953-12-31T19:00:00
up through 1954-12-31:19:00:00
.
Example API call
DATE
non url-encoded http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common:objectProductionDateGroupList/0/dateEarliestScalarValue >= DATE "1953-12-31" AND collectionobjects_common:objectProductionDateGroupList/0/dateLatestScalarValue <= DATE "1955-01-01"
encoded http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common%3aobjectProductionDateGroupList%2F0%2FdateEarliestScalarValue++>%3D++DATE++%221955-01-01%22++AND++collectionobjects_common%3aobjectProductionDateGroupList%2F0%2FdateLatestScalarValue++<%3D++DATE++%221955-01-01%22
TIMESTAMP
non url-encoded http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common:objectProductionDateGroupList/0/dateEarliestScalarValue >= TIMESTAMP "1953-12-31T19:00:00" AND collectionobjects_common:objectProductionDateGroupList/0/dateLatestScalarValue <= TIMESTAMP "1954-12-31T19:00:00"
url-encoded http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common%3aobjectProductionDateGroupList%2F0%2FdateEarliestScalarValue++%3E%3D++TIMESTAMP++%221953-12-31T19:00:00%22++AND++collectionobjects_common%3aobjectProductionDateGroupList%2F0%2FdateLatestScalarValue++%3C%3D++TIMESTAMP++%221954-12-31T19:00:00%22
Other parameters
Description |
NXQL string |
DB string |
API query string |
Required |
---|---|---|---|---|
is record status completed and publishable? |
collectionobjects_common.recordStatus |
|
|
Y |
is object record deleted? |
|
|
Y |
|
sort by |
|
|
N |
|
show only objects from a specific tenant |
implied |
|
implied |
Y |
Sample URL query
URL encoded query string using the above parameters:
http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects?as=collectionobjects_common%3AdistinguishingFeatures++ILIKE++%27Foo%25%27++AND++collectionobjects_common%3ArecordStatus+%3d+%27completedpublish%27&sortBy=collectionspace_core%3AupdatedAt&wf_deleted=false
Non-encoded URL
http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects ?as=collectionobjects_common:distinguishingFeatures ILIKE 'Foo%' AND collectionobjects_common:recordStatus = 'completedpublish' &sortBy=collectionspace_core:updatedAt &wf_deleted=false
Get referenced authority records
Append authorityrefs
to the API URL for a collectionobject record to get a list of referenced authority records': sourceField
, itemDisplayName
and refName
(in short ID
format).
An example API call for authorityrefs
for a given collectionobject record
http://cspacetest.collectionspace.org:8180/cspace-services/collectionobjects/a7fdba4a-ec23-472c-9c45-47249aa3242d/authorityrefs
REST API query payload columns returned
The following columns are returned from an API query call to the collectionobject service
csid|uri|updatedAt|workflowState|objectNumber|objectName|title|responsibleDepartment|caption
caption
is used for the browser search results listing page. The related thumbnail image requires a separate call to the relationship service. (See below for additional details.)
Finding related procedural records using the Relationship service
The relations service provides the mechanism to find related procedural records of a given type. The syntax for this service API uses subject and object query parameters to denote the relationship direction.
The full list of query terms:
sbj
= used to specify the subject's CSID
sbjType
= used to specify the type of the subject
obj
= used to specify the object's CSID
objType
= used to specify the type of the object
With a specific csid
and a general objType
the API call would be
http://cspacetest.collectionspace.org:8180/cspace-services/relations?sbj={{csid}}&objType={{docType}}
Where the document type, docType
, value is could be one of the following:
- Media -
MediaTenant42
- Movement -
Movement
- Collection object -
CollectionObjectTenant42
Document types with the suffix Tenant42
represent record types with a custom schema extension.
Chaining multiple record calls
The benefit of the relations service is receiving a single payload that contains the CSIDs of all the related records. From here it is necessary to make one API call for every CSID received since no other identifying information is returned for a related record. This can be unwieldy if there are dozens of CSIDs to fetch from. There is a workaround that can be used until the Relations service API can be changed to allow for more information to be returned.
Nuxeo uses a few special properties to identify documents in NXQL. One such property is ecm:name
, which maps to the CSID of a CollectionSpace record. This can be used with OR operators to chain together several CSIDs in a single API call.
For instance, say the following relations API call is made to find all the related media records for a given CollectionObject.
http://cspacetest.collectionspace.org:8180/cspace-services/relations?sbj=117dc667-faa9-4818-a848-133ca5ad3e11&objType=MediaTenant42
The xml list returns something like this abbreviated payload
... <csid>8394599a-70b1-43e4-9fdb-44eb4ef12003</csid> ... <csid>faa2930f-1b27-4165-baf9-a7709f018bab</csid> ... <csid>dcf824ca-cb0a-4129-8440-c79357244f2b</csid> ... <csid>c6ae5232-8036-4f22-aafc-96708137ee57</csid> ...
Then a single API call to the media service will look like this
http://cspacetest.collectionspace.org:8180/cspace-services/media?as=ecm:name='8394599a-70b1-43e4-9fdb-44eb4ef12003' OR ecm:name='faa2930f-1b27-4165-baf9-a7709f018bab' OR ecm:name='dcf824ca-cb0a-4129-8440-c79357244f2b' OR ecm:name='c6ae5232-8036-4f22-aafc-96708137ee57'
The above API call will only return a list type result and not the full record payload for every CSID listed. Using selective list-type columns it will be possible to gather the data needed without making individual calls.
Filtering
Filtering the search results requires the use of the Relationship service in order to access a related record's field value.
Filter by objects on exhibit
The Movement service manages information around the movement of a CollectionObject - an instance of location change. This includes location changes resulting from movements between storage locations, such as between rooms or shelves.
There are a few location areas that represent exhibition areas of MMI. These locations include any currentLocation
authority URN value that contains BTS
, CHX
or AMP
.
BTS
has multiple values and any will match this filter, e.g. BTS:3:8:4
.
AMP
will not match any current records but has the potential to in the future.
To find the current location of a CollectionObject, the following Relation API call can be made
http://cspacetest.collectionspace.org:8180/cspace-services/relations?sbj={{csid}}&objType=Movement
One* or more related movement records will be returned.
Unfortunately, there is no way to request movement record's currentLocation
column value in the Relation service payload, which would aid in quickly filtering by the location authority value. Each movement record returned will need to be examined.
Using the chaining API call listed above, it will be possible to quickly filter by list-type column values.
Additionally, some CollectionObject records may have more than one related movement record. Only the most recent movement record should be used and this is determined by comparing the locationDate
value of each.
* It's possible that there will not be a related movement record returned if in case the physical object cannot be found! This should be a rare occurrence in any collection.
Filter by records with images
This is identical to how thumbnails are retrieved for CollectionObjects.
http://cspacetest.collectionspace.org:8180/cspace-services/relations?sbj={{csid}}&objType=MediaTenant42
Only media records with a mediaStatus
value of display
will be shown for this filter.
Controlled List mapping
Collection category
Controlled list string |
Display string |
---|---|
|
Not yet assigned |
|
Distribution |
|
Exhibition |
|
Industry (as a whole) |
|
Marketing |
|
Merchandising |
|
Production |
|
Reception |
|
Works of art |
Material
Controlled list string |
Display string |
Controlled list string |
Display string |
---|---|---|---|
|
Acetatefilm |
|
Metal |
|
cellophane |
|
Neon |
|
Cellulose nitrate film |
|
Paper |
|
Cement |
|
Photographic negative |
|
Ceramic |
|
Photographic paper |
|
Composition |
|
Photographic paper mounted on textile |
|
Cork |
|
Plaster |
|
Crystal |
|
Plastic |
|
Engineered wood |
|
Polystyrene |
|
Fiberglass |
|
Polyurethane |
|
Foam |
|
Resin |
|
Fur |
|
Rock |
|
Glass |
|
Rubber |
|
Glycerin |
|
Soap |
|
Hair |
|
Textile |
|
Latex |
|
Vinyl |
|
Leather |
|
Wax |
|
|
|
Wood |
Associated organization type / Production role
Controlled list string |
Display string |
---|---|
|
Authority Creator |
|
Authority Designer |
|
Authority Distributor |
|
Authority Licensor |
|
Authority Illustrator |
|
Authority Manufacturer |
|
Authority Producer |
|
Authority Publisher |
|
Authority Owner |
|
Authority author/writer |
|
Authority exhibitor |
|
Authority performer |
|
Authority signitor |
Content entity type
Controlled list string |
Display string |
---|---|
|
Depicts Authority |
|
References Authority |
|
See also Authority |
Associated production type
Controlled list string |
Display string |
---|---|
|
Depicts Authority |
|
References Authority |
|
Is from Authority |
Associated publication type
Controlled list string |
Display string |
---|---|
|
The Object Is an issue of The Authority |
|
The Object _References _The Authority |
Related links
/wiki/spaces/collectionspace/pages/666273449
CollecitonObject RESTful API
Common services RESTful API
Media service RESTful API
Relation service RESTful API