UserPreferences

MetsImsInteropPaper/MetsImsComparison


We compare first structure and then metadata.

Structural comparison

There is a representation of hierarchy in both systems. There are folders that hold other stuff and the items themselves.

We need to work the materials from BrainDumpRickBeaubien into this narrative. That is, we need to go through point-by-point RB's analysis and make sure that we are on the same page. We might need to make reference to the relevant source documents:

Rough mappings:

METS IMS-CP notes
mets manifest root elements
structMap organizations/organization more than one structMap allowed -- but now container for structMap; default organization is indicated
fileSec resources are they roughly equivalent?

From what I can understand, neither IMS-CP nor METS mandate a particular visual representation (after all, they are XML content formats), there probably are implicit visual representations. (I think that this is where the whole notion of profiling comes in -- a possibly huge and messy topic).

IMS-CP supports the notion of a content package, in which the imsmanifest.xml is a table of contents. One can ship the package of materials around. In METS, one can also embed content via the FContent tag (Actually, I think in METS, one can embed content.) (oh -- so that means to do a full METS to IMS-CP translation, we have to unpack FContent tags....I might just say that's out of the scope of this piece of work.)

I should mention SCORM here, which builds upon IMS-CP, IMS-MD + AICC extensions to give some run-time behavior (http://www.adlnet.org/index.cfm?fuseaction=scorm12) METS has behaviors to give some run time behavior [I need to write more about this here) My high level analysis of similarities and differences (A full comparison of the run-time models of METS and SCORM -- do we want to tackle that?)

How these comparisons are expressed in XSLT?

More info at MetsToImsCrossWalk. Let's look at a specific crosswalk and document it:

[

XSLT option disabled!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
        <!ENTITY nbsp "<xsl:text disable-output-escaping=&#34;yes&#34; 
    xmlns:xsl= &#34;http://www.w3.org/1999/XSL/Transform &#34;
    >&amp;nbsp;</xsl:text>">
]>
<xsl:stylesheet version="1.0"  xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:imscp="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/TR/xlink" xmlns:METS="http://www.loc.gov/METS/" >

        <!--output-->
        <xsl:output encoding="UTF-8" method="xml" media-type="text/xml"/>
        
        <!--attributes for namespaces of various IMS CP and MD and METS-->
        <xsl:attribute-set name="manifestNS">
                <xsl:attribute name="xsi:schemaLocation">http://www.imsglobal.org/xsd/imscp_v1p1 http://www.imsglobal.org/xsd/imscp_v1p1p3.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 http://www.imsglobal.org/xsd/imsmd_v1p2p2.xsd http://www.loc.gov/METS/  http://www.loc.gov/standards/mets/mets.xsd</xsl:attribute>
        </xsl:attribute-set>

        <!-- METS:mets -->
        <xsl:template match="METS:mets">
                <xsl:element name="manifest" namespace="http://www.imsglobal.org/xsd/imscp_v1p1"  use-attribute-sets="manifestNS">
                        <xsl:attribute name="identifier">MANIFEST01</xsl:attribute>
                        <metadata />  <!-- blank for now -->
                        
                        <!--organizations (can have multiple organizations) -->
                        <!-- organization is a recursive structure and hence can hold the recursive FileGrp mapping as well as StructMap -->
                                <organizations>
                                        <xsl:attribute name="default">structMap</xsl:attribute>  <!--set StructMap mapping as the default -->
                                        <xsl:apply-templates select="METS:structMap" mode="MapToOrganization" />
                                        <!-- Would be also good to map the fileSec to a secondary Organization (instead of just flattening it out into the Resources -->
                                        <xsl:apply-templates select="METS:fileSec" mode="MapToOrganization" />
                                </organizations>
                                
                        <!--resources -->
                        <resources>
                                <xsl:apply-templates select="METS:fileSec" mode="MapToResources" />
                        </resources>
                </xsl:element>
        </xsl:template>
        
        <!--Generate Organization (from structMap) -->
        <xsl:template match="METS:structMap" mode="MapToOrganization">
                <organization>
                        <xsl:attribute name="identifier">structMap</xsl:attribute>
                        <!-- could put title and metadata here (but I don't know of a mapping for it -->
                        <xsl:apply-templates select="METS:div" mode="MapToItem"/>
                </organization>
        </xsl:template>
        
        <!-- METS:div to IMS:item -->
        <xsl:template match="METS:div" mode="MapToItem">
                <item>
                        <xsl:attribute name="identifier"><xsl:value-of select="generate-id(.)" /></xsl:attribute>
                        <title><xsl:value-of select="@LABEL" /></title>
                        <xsl:apply-templates select="METS:fptr" mode="MapToItem"/>
                        <!--recursive application of div -->
                        <xsl:apply-templates select="METS:div" mode="MapToItem"/>
                </item>
        </xsl:template>
        
        <!--METS:fptr to IMS:item -->
        <xsl:template match="METS:fptr" mode="MapToItem">
                <item>
                        <xsl:attribute name="identifier"><xsl:value-of select="generate-id(.)" /></xsl:attribute>
                        <xsl:attribute name="identifierref"><xsl:value-of select="@FILEID" /></xsl:attribute>
                        <title><xsl:value-of select="../@LABEL"/> (<xsl:value-of select="normalize-space(id(@FILEID)/@MIMETYPE)" />)</title>  <!--subjective mapping -->
                </item>
        </xsl:template>
        
        <!-- Generate Resources -->
        <!--FileGrp is a recursive structure whereas Resource cannot contain another Resource.
        Right now, I will just map out the files (in METS, we can have mptr, so this type of solution is not sufficient for METS
        -->
        
        <xsl:template match="METS:fileSec" mode="MapToResources" >
                <xsl:apply-templates select="METS:fileGrp" mode="MapToResource" />
        </xsl:template>
        
        <xsl:template match="METS:fileGrp" mode="MapToResource">
                <xsl:apply-templates select=".//METS:file" mode="MapToResource" />
        </xsl:template>
        
        <xsl:template match="METS:file" mode="MapToResource">
                <resource> 
                        <xsl:attribute name="identifier"><xsl:value-of select="@ID"/></xsl:attribute>
                        <xsl:attribute name="type">webcontent</xsl:attribute>  <!--webcontent is the only legal type right now -->
                        <xsl:attribute name="href"><xsl:value-of select="normalize-space(METS:FLocat/@xlink:href)" /></xsl:attribute>
                        <!--metadata (blank for now)-->
                        <metadata />
                        <!--for resources with only one file, one can put the file ref right into the href attrib of resource or create a file child element -->
                        <!--I thought that file can be used for remote files  but the LRN viewer did not let me -->
                        <!--so  I need to map it to href of resource -->
                </resource>
        </xsl:template>
        
</xsl:stylesheet>
]

Areas of improvement for this crosswalk -- see [WWW]post on Raymond's blog.

Issues of metadata

There are no metadata standards mandated in either IMS or METS. The best practices for both do recommend metadata frameworks that are appropriate for their respective communities -- and these standards are different. (IEEE-LOM for IMS). (MODS and MIX for METS?)

METS supports more of the idea of different type of metadata: administrative vs descriptive vs structural. The concepts of different type of metadata are different in IMS. LOM has sections in its metadata -- that probably have rough equivalences to the admin/descriptive/structual concept.

METS supports the embedding of non-XML data and metadata (including binaries, encoded in Base64. non-XML data can definitely be part of an IMS-CP content package. I don't think that non-XML metadata is supported in IMS.

If the goal is to support complete to-and-fro lossless translation, I think one will be disappointed. ( It might be possible in that one might be able to wrap an object of one standard in the structure of another but one would not be able to meaningfully use the materials. If one wants to move the content structure from one system into another, the content-packaging ideas are roughly consonant.