On Tue, 16 Dec 2003, Paul Fogel wrote: > Bruce had requested that I post these documents to the list. I hope that > someone may find them useful and I encourage all feedback and criticism. > > These were developed to transform MODS (encoded in METS) into Dublin Core > for internal indexing purposes. While this is not a final version, it is > in production and seems to be doing what it is supposed to. A slightly > modified production version can be viewed at > http://ark.cdlib.org/xslt/extract-dc/OAC-LSTA-MODS2DC.qdc21.xsl. > > I took the DC to MODS mapping stylesheet as a starting point, but as we all > know round-tripping is never the same both ways and I had to make a lot of > logical modification. Also, we are still working with MODS 2.0 so this > will need work when we make the transition. > > I have attached the documents (an .xslt and a .txt) and have also pasted > them below. Again, please let me hear any opinions you may have. > > Paul Fogel > California Digital Library > [log in to unmask] > 510.987.0680 > <xsl:apply-templates mode="makeIsPartOf"/> > </xsl:when> > </xsl:choose> > </xsl:for-each> > </xsl:template> > > <xsl:template match="*" mode="makeIsPartOf"> > <xsl:apply-templates mode="makeIsPartOf"/> > </xsl:template> > > <xsl:template match="text()" mode="makeIsPartOf"> > <xsl:if test="normalize-space(.) != ''"> > <dcterms:isPartOf> > <xsl:value-of select="normalize-space(.)"/> > </dcterms:isPartOf> > </xsl:if> > </xsl:template> > > </xsl:stylesheet> > > > MODS to Dublin Core Mapping > > > > By Dublin Core Element, from MODS Element > > Title: > //mods/titleInfo/title - A conditional IF statement is included to catch > <titleInfo><subTitle> and append it to the title, separated by colon space > (: ). > > Creator: > //mods/name/namePart - when //mods/name/role[. = 'creator'] > //mods/recordInfo/recordContentSource > > Subject: > //mods/subject/topic > //mods/subject/name > //mods/subject/titleInfo/title > > Description: > //mods/abstract > //mods/tableOfContents > //mods/note > //mods/subject/name<description> > > Publisher: > //mods/originInfo/publisher > //mods/publicationInfo/publisher - to accommodate earlier encoding > practices; this usage is outdated > > Contributor: > //mods/name/namePart - when //mods/name/role/text[. = 'contributor'] > > Date: > Mapped from: > //mods/originInfo/dateIssued > //mods/originInfo/dateCreated > //mods/originInfo/dateCaptured > //mods/originInfo/dateOther > //mods/publicationInfo/dateIssued - to accommodate earlier encoding > practices; this usage is outdated > > Type: > //mods/typeOfResource > //mods/genre > > Format: > //mods/physicalDescription/extent > //mods/physicalDescription/form > //mods/physicalDescription/internetMediaType > //mods/physicalDescription/digitalOrigin > //mods/physicalDescription/note > > Identifier: > //mods/identifier - If @TYPE= 'isbn', 'issn', 'lccn', 'doi' or 'uri', then > this value precedes the data, separated by colon space. > Example: <identifier>uri: > http://www.ucpress.edu/books/pages/6178.html&isbn=0520081994</identifier> > If there is no TYPE attribute, or if it is not set to one of these > values, the data is mapped without qualification. > > Source: > //mods/relatedItem[@TYPE='original'] > > Language: > //mods/language > > Relation: > //mods/relatedItem - except when relatedItem[(@TYPE='original') or > (@TYPE='series')] > > Coverage: > Mapped from: > //mods/subject/geographic > //mods/subject/temporal > //mods/subject/hierarchicalGeographic > //mods/subject/cartographic > //mods/classification > The hierarchicalGeographic and cartographic nodes are flattened so > that repeating values as well as sub-elements (and their children) are > strung into one element. > > Rights: > //mods/accessCondition > > DCTerms:Abstract: > //mods/abstract - this data is also mapped (see above) into Description, so > that data is not lost in Unqualified Dublin Core. > > DCTerms:Created > //mods/recordInfo/recordCreationDate. This is also mapped to Date, so that > data is not lost in Unqualified Dublin Core. > > DCTerms:Modified > //mods/recordInfo/recordChangeDate. This is also mapped to Date, so that > data is not lost in Unqualified Dublin Core. > > DCTerms:isPartOf > //mods/relatedItem - when //mods/relatedItem[@TYPE='series']. This is also > mapped to Relation, so that data is not lost in Unqualified Dublin Core. > > > > > > > > By MODS Element, to Dublin Core Element > > ELEMENT MAPPED TO > //mods/titleInfo/title title > //mods/titleInfo/subTitle title > //mods/titleInfo/partNumber ignored > //mods/titleInfo/partName ignored > //mods/titleInfo/nonSort ignored > > //mods/name/namePart creator, contributor (see > above) > //mods/name/displayForm ignored > //mods/name/affiliation ignored > //mods/name/role Used to assign creator and > contributor, otherwise ignored. > //mods/name/description description > > //mods/typeOfResource type > > //mods/genre type > > //mods/originInfo/place ignored > //mods/originInfo/publisher publisher > //mods/originInfo/dateIssued date > //mods/originInfo/dateCreated date, dcterms:created > //mods/originInfo/dateCaptured date > //mods/originInfo/dateOther date > //mods/originInfo/edition ignored > //mods/originInfo/issuance ignored > //mods/originInfo/frequency ignored > > //mods/language language > > //mods/physicalDescription/form format > //mods/physicalDescription/reformattingQuality ignored > //mods/physicalDescription/internetMediaType format > //mods/physicalDescription/extent format > //mods/physicalDescription/digitalOrigin format > //mods/physicalDescription/note format > > //mods/abstract description, dcterms:absctract > > //mods/tableOfContents description > > //mods/targetAudience ignored > > //mods/note description > > //mods/subject/topic subject > //mods/subject/geographical coverage > //mods/subject/temporal coverage > //mods/subject/titleInfo/title subject > (other subelements for titleInfo ignored) > //mods/subject/name<description> subject > (other subelements for name ignored) > //mods/subject/hierarchicalGeographic coverage > (subelements flattened to appear in one string) > //mods/subject/cartographic coverage > (subelements flattened to appear in one string) > //mods/classification coverage > > //mods/relatedItem[@type='original'] source > //mods/relatedItem[@type='series'] dcterms:isPartOf > //mods/relatedItem[@type='*'] relation > (subelements flattened to appear in one string) > > //mods/identifier identifier > (if type is issn, isbn, lccn, uri, or doi, it is applied at > beginning of data string; otherwise data is applied as is) > Ex. <dc:identifier>isbn: 0123456789</dc:identifier> > <dc:identifier>12-34567-8901234-5-67</dc:identifier> > > //mods/location ignored > > //mods/accessCondition rights > > //mods/extension ignored > > //mods/recordInfo/recordContentSource creator, > //mods/recordInfo/recordCreationDate dcterms:created > //mods/recordInfo/recordChangeDate dcterms:modified > //mods/recordInfo/recordIdentifier ignored > //mods/recordInfo/languageOfCataloging ignored > > >