curationexperts / alexandria-legacy

Alexandria Digital Research Library - http://alexandria.ucsb.edu
Other
6 stars 1 forks source link

Parse MODS dates to EDM #149

Closed mark-dce closed 9 years ago

mark-dce commented 9 years ago

In order to provide sufficient flexibility to express exact and inexact dates, use the Europeana Data Model Timespan class. Use the 'beginning_is_qualified_by" and "ending_is_qualified_by" predicates to identify

Store the machine readable key date in extendedDate format in DC:date Store the EDM encoded date in the appropriate predicate as follows

MODS Input RDF Predicate Notes
originInfo/dateCreated RDF::DC.created points to edm:TimeSpan
originInfo/dateIssued RDF::DC.issued points to edm:TimeSpan
originInfo/dateModified RDF::DC.modified points to edm:TimeSpan, no sample data
originInfo/copyrightDate RDF::DC.dateCopyrighted points to edm:TimeSpan
originInfo/dateValid RDF::DC.valid points to edm:TimeSpan, no sample data,
N/A RDF::DC.dateAccepted implement to support GUI input, no sample data (skipped)
N/A RDF::DC.dateSubmitted implement to support GUI input, no sample data (skipped)

If the source MODS record has more than one node per date type (created, issued, accepted, copyrighted, submitted), duplicate the respective predicates and build multiple graph nodes.

If the source MODS record has a text node, map it to a skos:prefLabel element

If the source MODS has point="start" map to edm:begin, if the source MODS has a point="end" map to edm:end. If the source MODS does not specify a point, map the date to edm:begin and leave edm:end blank

If the source MODS record has a date qualifier(s), map the date qualifier(s) to cdm:P79F.beginning_is_qualified_by (begin) and cdm:P80F.end_is_qualified_by (end) - expected values are ['approximate', 'inferred', 'questionable']

Ignore key date and use the following algorithm in #153 to determine sort and faceting dates.

EXAMPLE MAPPINGS

EXAMPLE 1

<mods:dateCreated encoding="w3cdtf" keyDate="yes">1984-11-15</mods:dateCreated>

maps to RDF

<objectURI> <DC.created> <dateOb/jaf87d66a>
<dateOb/jaf87d66a> <edm:begin> "1984-11-15"

EXAMPLE 2

<mods:dateIssued encoding="w3cdtf" keyDate="yes">1936</mods:dateIssued>

maps to RDF

<objectURI> <DC.issued> <dateOb/f78823ed1>
<dateOb/f78823ed1> <edm:begin> "1984-11-15"

EXAMPLE 3

<mods:dateOther keyDate="yes">Unknown</mods:dateOther>

maps to RDF

<objectURI> <DC.created> <dateOb/f78823ed1>
<dateOb/f78823ed1> <skos:prefLable> "Unknown"

EXAMPLE 4

<mods:dateCreated>circa 1910s</mods:dateCreated>
<mods:dateCreated encoding="w3cdtf" point="start" qualifier="approximate" keyDate="yes">1910</mods:dateCreated>
<mods:dateCreated encoding="w3cdtf" point="end" qualifier="approximate">1919</mods:dateCreated>

maps to RDF

<objectURI> <DC.issued> <dateOb/aa8845670>
<dateOb/aa8845670> <edm:begin> "1910"
<dateOb/aa8845670> <edm:end> "1919"
<dateOb/aa8845670> <crm:P79F.beginning_is_qualified_by> "approximate"
<dateOb/aa8845670> <crm:P80F.end_is_qualified_by> "approximate"
<dateOb/aa8845670> <skos:prefLable> "circa 1910s"

REFERENCES: EDM Timespan (narrative): http://labs.europeana.eu/api/record/#edm-timespan EDM Timespan (definition): https://github.com/europeana/corelib/wiki/EDMObjectTemplatesProviders#edmTimespan EDM Timespan (example - search for edm:TimeSpan): http://pro.europeana.eu/files/Europeana_Professional/Share_your_data/Technical_requirements/EDM_Documentation/EDM_Mapping_Guidelines_v2.2.pdf Ruby RDF DC vocab: https://github.com/ruby-rdf/rdf/blob/develop/lib/rdf/vocab/dc.rb HYDRA RDF MODS vocab: https://github.com/projecthydra-labs/rdf-vocab/blob/master/lib/rdf-vocab/vocab/mods.rb

mark-dce commented 9 years ago

Blocked until #150 is completed

jcoyne commented 9 years ago

Unblocked. I believe this is all done except copyrightDate, dateValid and dateModified. DC.date is being used for mods:dateOther, so we can't use that for a keyDate. I don't believe there is any reason we need to persist the keyDate.

mark-dce commented 9 years ago

Agreed - we do not need to persist keyDate - I was trying to express that by saying

Ignore key date and use the following algorithm in #153 to determine sort and faceting dates.

The third example was meant to speak to the idea of "unknown" dates being mapped to DC.created with a timeSpan prefLabel. keyDate was thrown in specifically to show that it's being disregarded:

<mods:dateOther keyDate="yes">Unknown</mods:dateOther>