Annotation of nsdl/prototypes/metadata_convert.pl, revision 1.6

1.6     ! harris41    1: # metadata_convert.pl
        !             2: 
        !             3: # This script prototypes the conversion that should be handled
        !             4: # by the NSDL-LONCAPA gateway.
        !             5: 
        !             6: # Scott Harrison 2002
        !             7: 
        !             8: # For nicely viewable documentation, execute the following command:
        !             9: # ./perldoc metadata_convert.pl
        !            10: 
        !            11: # =========================================================== POD documentation
        !            12: 
        !            13: =pod
        !            14: 
        !            15: =head1 NAME
        !            16: 
        !            17: metadata_convert.pl - prototype metadata conversion for NSDL-LONCAPA gateway
        !            18: 
        !            19: =head1 SYNOPSIS
        !            20: 
        !            21: Usage: perl metadata_convert.pl
        !            22: 
        !            23: There is no input to this script.  The output of this script
        !            24: will describe the success or failure of the metadata conversion that happens.
        !            25: 
        !            26: The script is organized into the following sections:
        !            27: 
        !            28: =over 4
        !            29: 
        !            30: =item POD documentation
        !            31: 
        !            32: =item Initial settings for the script
        !            33: 
        !            34: =item Defining test XML metadata input
        !            35: 
        !            36: =item Define XSL stylesheets
        !            37: 
        !            38: =item Define external functions
        !            39: 
        !            40: =item Executing transformations
        !            41: 
        !            42: =item Various subroutines
        !            43: 
        !            44: =back
        !            45: 
        !            46: =head1 DESCRIPTION
        !            47: 
        !            48: This script converts LON-CAPA metadata into NSDL metadata
        !            49: and converts NSDL metadata into LON-CAPA metadata.
        !            50: 
        !            51: Example metadata strings are included in this prototype
        !            52: script--they are named by variables such as
        !            53: I<$LONCAPA_metadata> and I<$NSDL_metadata>.
        !            54: 
        !            55: The XML-processing "engine" for the transformation is B<XML::Xalan>
        !            56: available at http://search.cpan.org/search?dist=XML-Xalan.  This engine
        !            57: takes in XML files of one DTD type and converts them into XML
        !            58: files of another DTD type according to stylesheets.
        !            59: 
        !            60:  alpha.xml      alpha_to_beta.xsl   beta.xml
        !            61:  (alpha.dtd)    ---------------->   (beta.dtd)
        !            62: 
        !            63: LON-CAPA metadata currently consists of 13 different metadata fields
        !            64: (with defined datatypes):
        !            65: abstract, author, copyright, creationdate, dependencies, keywords, language,
        !            66: lastrevisiondate, mime, notes, owner, subject, and title.
        !            67: 
        !            68: For purposes of the gateway implementation, I am defining a qualified LON-CAPA
        !            69: metadata to consist of additional fields (which can be automatically
        !            70: generated from information on the LON-CAPA network):
        !            71: 
        !            72: "uri", which is both the address and unique identifier of the educational
        !            73: resource from the standpoint of LON-CAPA.
        !            74: 
        !            75: "structure", which is derived from the LON-CAPA MIME type of the file
        !            76: 
        !            77: "aggregation", which is derived from the LON-CAPA MIME type of the file
        !            78: 
        !            79: "bytesize", the size of the LON-CAPA resource in bytes (octets)
        !            80: 
        !            81: "version", which comes from information accessed from the LON-CAPA network
        !            82: 
        !            83: "metauri", which comes from the uri (with .meta appended)
        !            84: 
        !            85: In the future, more LON-CAPA metadata fields are expected to be added, and
        !            86: it may also be that several of the fields change, or are removed.
        !            87: 
        !            88: The current viewpoint regarding NSDL is to support unqualified dublin
        !            89: core and IEEE LOM, with IEEE LOM being preferred.  Both are to be
        !            90: supported (dublin core being the minimal and IEEE LOM being the maximal).
        !            91: There are 15 unqualified
        !            92: Dublin Core elements.  For version 6.4 of IEEE LOM (March 4, 2002--this is
        !            93: the version the gateway approach is based off of) there are 77 IEEE LOM
        !            94: category names with 58 IEEE LOM fields which correspond to a subset of
        !            95: the 77 category names.  A complete description of IEEE LOM version 6.4
        !            96: is available at http://ltsc.ieee.org/doc/wg12/LOM_WD6_4.pdf.  Note that
        !            97: the 15 Dublin Core elements correspond to a subset of the 58 IEEE LOM fields.
        !            98: 
        !            99: A summary (for the sake of brevity, with some details omitted) of how
        !           100: IEEE LOM and Dublin Core and LON-CAPA interrelate is described below
        !           101: (column order=LON-CAPA field, IEEE LOM datatype, IEEE LOM field,
        !           102: and Dublin Core Field).
        !           103: Note that an asterisk (*) for the LON-CAPA field indicates that a IEEE
        !           104: LOM field value can probably be generated for
        !           105: the LON-CAPA to NSDL metadata transformation.  Note that a question mark (?)
        !           106: indicates that a LOM field value may in the future be generated for
        !           107: the transformation.  Note that a minus sign (-) indicates that a LOM
        !           108: field value may not be generated for the transformation in the foreseeable
        !           109: future (never say absolutely never though).  The mappings below are not
        !           110: perfectly bidirectional; there are a number of one-to-many and many-to-one
        !           111: mappings that are involved in the metadata conversion.
        !           112: 
        !           113:                       -                1:General
        !           114:                       -                1.1:General.Identifier
        !           115:  lc:*                 CharacterString  1.1.1:General.Identifier.Catalog
        !           116:  lc:uri               CharacterString  1.1.2:General.Identifier.Entry          DC.Identifier
        !           117:  lc:title             LangString       1.2:General.Title                       DC.Title
        !           118:  lc:language          CharacterString  1.3:General.Language                    DC.Language
        !           119:  lc:abstract          LangString       1.4:General.Description                 DC.Description
        !           120:  lc:keywords          LangString       1.5:General.Keyword                     DC.Subject
        !           121:  lc:-                 LangString       1.6:General.Coverage                    DC.Coverage
        !           122:  lc:structure         VocabularyState  1.7:General.Structure
        !           123:  lc:aggregation       VocabularyEnum   1.8:General.AggregationLevel
        !           124:                       -                2:LifeCycle
        !           125:  lc:version           LangString       2.1:LifeCycle.Version
        !           126:  lc:?                 VocabularyState  2.2:LifeCycle.Status
        !           127:                       -                2.3:LifeCycle.Contribute
        !           128:  lc:*                 VocabularyState  2.3.1:LifeCycle.Contribute.Role
        !           129:  lc:author            CharacterString  2.3.2:LifeCycle.Contribute.Entity       DC.Creator DC.OtherContributor DC.Publisher
        !           130:  lc:lastrevisiondate  DateTime         2.3.3:LifeCycle.Contribute.Date         DC.Date
        !           131:                       -                3:MetaMetadata
        !           132:                       -                3.1:MetaMetadata.Identifier
        !           133:  lc:*                 CharacterString  3.1.1:MetaMetadata.Identifier.Catalog
        !           134:  lc:metauri           CharacterString  3.1.2:MetaMetadata.Identifier.Entry
        !           135:                       -                3.2:MetaMetadata.Contribute
        !           136:  lc:?                 VocabularyState  3.2.1:MetaMetadata.Contribute.Role
        !           137:  lc:?                 CharacterString  3.2.2:MetaMetadata.Contribute.Entity
        !           138:  lc:?                 DateTime         3.2.3:MetaMetadata.Contribute.Date
        !           139:  lc:*                 CharacterString  3.3:MetaMetadata.MetadataSchema
        !           140:  lc:*                 CharacterString  3.4:MetaMetadata.Language
        !           141:                       -                4:Technical
        !           142:  lc:mime              CharacterString  4.1:Technical.Format                    DC.Format
        !           143:  lc:bytesize          CharacterString  4.2:Technical.Size
        !           144:  lc:uri               CharacterString  4.3:Technical.Location
        !           145:                       -                4.4:Technical.Requirement
        !           146:                       -                4.4.1:Technical.Requirement.OrComposite
        !           147:  lc:?                 VocabularyState  4.4.1.1:Technical.Requirement.OrComposite.Type
        !           148:  lc:?                 VocabularyState  4.4.1.2:Technical.Requirement.OrComposite.Name
        !           149:  lc:?                 CharacterString  4.4.1.3:Technical.Requirement.OrComposite.MinimumVersion
        !           150:  lc:?                 CharacterString  4.4.1.4:Technical.Requirement.OrComposite.MaximumVersion
        !           151:  lc:?                 LangString       4.5:Technical.InstallationRemarks
        !           152:  lc:*                 LangString       4.6:Technical.OtherPlatformRequirements
        !           153:  lc:?                 Duration         4.7:Technical.Duration
        !           154:                       -                5:Educational
        !           155:  lc:?                 VocabularyState  5.1:Educational.InteractivityType
        !           156:  lc:?                 VocabularyState  5.2:Educational.LearningResourceType    DC.Type
        !           157:  lc:?                 VocabularyEnum   5.3:Educational.InteractivityLevel
        !           158:  lc:?                 VocabularyEnum   5.4:Educational.SemanticDensity
        !           159:  lc:*                 VocabularyState  5.5:Educational.IntendedEndUserRole
        !           160:  lc:?                 VocabularyState  5.6:Educational.Context
        !           161:  lc:?                 LangString       5.7:Educational.TypicalAgeRange
        !           162:  lc:?                 VocabularyEnum   5.8:Educational.Difficulty
        !           163:  lc:?                 Duration         5.9:Educational.TypicalLearningTime
        !           164:  lc:notes             LangString       5.10:Educational.Description
        !           165:  lc:language          CharacterString  5.11:Educational.Language
        !           166:                       -                6:Rights
        !           167:  lc:-                 VocabularyState  6.1:Rights.Cost
        !           168:  lc:copyright         VocabularyState  6.2:Rights.CopyrightandOtherRestrictions
        !           169:  lc:owner             LangString       6.3:Rights.Description                  DC.Rights
        !           170:                       -                7:Relation
        !           171:  lc:?                 VocabularyState  7.1:Relation.Kind
        !           172:                       -                7.2:Relation.Resource                   DC.Source
        !           173:                       -                7.2.1:Relation.Resource.Identifier
        !           174:  lc:?                 CharacterString  7.2.1.1:Relation.Resource.Identifier.Catalog
        !           175:  lc:?                 CharacterString  7.2.1.2:Relation.Resource.Identifier.Entry
        !           176:  lc:?                 LangString       7.2.2:Relation.Resource.Description     DC.Relation
        !           177:                       -                8:Annotation
        !           178:  lc:-                 CharacterString  8.1:Annotation.Entity
        !           179:  lc:-                 DateTime         8.2:Annotation.Date
        !           180:  lc:-                 LangString       8.3:Annotation.Description
        !           181:                       -                9:Classification
        !           182:  lc:?                 VocabularyState  9.1:Classification.Purpose
        !           183:                       -                9.2:Classification.TaxonPath
        !           184:  lc:?                 LangString       9.2.1:Classification.TaxonPath.Source
        !           185:                       -                9.2.2:Classification.TaxonPath.Taxon
        !           186:  lc:?                 CharacterString  9.2.2.1:Classification.TaxonPath.Taxon.Id
        !           187:  lc:?                 LangString       9.2.2.2:Classification.TaxonPath.Taxon.Entry
        !           188:  lc:?                 LangString       9.3:Classification.Description
        !           189:  lc:?                 LangString       9.4:Classification.Keyword
        !           190: 
        !           191: =head1 AUTHOR
        !           192: 
        !           193: Scott Harrison, 2002
        !           194: 
        !           195: =cut
        !           196: 
        !           197: # ============================================= Initial settings for the script
        !           198: 
        !           199: use XML::Xalan; # engine for processing XML transformations
        !           200: use Date::Format;
        !           201: use Date::Parse;
1.1       harris41  202: 
                    203: my $tr = new XML::Xalan::Transformer;
                    204: 
1.6     ! harris41  205: my $namespace='http://nsdl.lon-capa.org/namespace/ExternalFunction/';
        !           206: 
        !           207: # ============================================ Defining test XML metadata input
        !           208: 
        !           209: # -------------------------------------- An example metadata entry for LON-CAPA
1.1       harris41  210: my $LONCAPA_metadata=(<<END);
                    211: <abstract></abstract>
                    212: <author>Felicia Berryman, MSU HHMI First Year Online Biology</author>
                    213: <copyright>default</copyright>
                    214: <creationdate>1011110523</creationdate>
                    215: <dependencies></dependencies>
                    216: <keywords>biomolecules,practice</keywords>
                    217: <language>seniso</language>
                    218: <lastrevisiondate>1011110523</lastrevisiondate>
                    219: <mime>html</mime>
                    220: <notes></notes>
1.2       harris41  221: <owner>bio\@msu, bio\@msu (Michigan State University), bio\@msu (Michigan State University), bio\@msu (Michigan State University)</owner>
1.1       harris41  222: <subject>Bio Information, Large Biomolecules - Intro, Large Biomolecules - Review</subject>
1.2       harris41  223: <title>Test title</title>
1.1       harris41  224: END
                    225: 
1.6     ! harris41  226: # ---------------------------- An example qualified metadata entry for LON-CAPA
        !           227: my $LONCAPA_qualified_metadata=(<<END);
        !           228: <?xml version="1.0"?>
        !           229: <loncapa xmlns="http://nsdl.lon-capa.org/loncapa/elements/1.1/">
        !           230: <abstract>This is an example abstract.</abstract>
        !           231: <author>Felicia Berryman, MSU HHMI First Year Online Biology</author>
        !           232: <copyright>default</copyright>
        !           233: <creationdate>1011110523</creationdate>
        !           234: <dependencies></dependencies>
        !           235: <keywords>biomolecules,practice</keywords>
        !           236: <language>seniso</language>
        !           237: <lastrevisiondate>1011110523</lastrevisiondate>
        !           238: <mime>html</mime>
        !           239: <notes></notes>
        !           240: <owner>bio\@msu, bio\@msu (Michigan State University), bio\@msu (Michigan State University), bio\@msu (Michigan State University)</owner>
        !           241: <subject>Bio Information, Large Biomolecules - Intro, Large Biomolecules - Review</subject>
        !           242: <title>Test title</title>
        !           243: <structure>structure</structure>
        !           244: <aggregation>aggregation</aggregation>
        !           245: <bytesize>10000</bytesize>
        !           246: <version>1</version>
        !           247: <metauri>http://nsdl.lon-capa.org/msu/bio/dir1/res1.html.meta</metauri>
        !           248: <uri>http://nsdl.lon-capa.org/msu/bio/dir1/res1.html</uri>
        !           249: </loncapa>
        !           250: END
1.4       harris41  251: 
1.1       harris41  252: my $NSDL_metadata1=(<<END);
1.2       harris41  253: <?xml version="1.0"?>
1.6     ! harris41  254: <dc xmlns="http://purl.org/dc/elements/1.1/">
1.1       harris41  255: <title>The Cornell Law Quarterly</title>
                    256: <date>1915-1916</date>
                    257: <identifier>http://heinonline.org/HeinOnline/show.pl?
                    258:             handle=hein.journals/clqv1%26id=1%26size=4</identifier>
                    259: <rights>Available by Subscription. See http://www.wshein.com</rights>
                    260: </dc>
                    261: END
1.2       harris41  262: 
1.1       harris41  263: my $NSDL_metadata2=(<<END);
1.6     ! harris41  264: <dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/">
1.1       harris41  265: <dc:title>Grassmann's space analysis</dc:title> 
                    266: <dc:creator>Hyde, E. W. (Edward Wyllys)</dc:creator>
                    267: <dc:subject>LCSH:Ausdehnungslehre; LCCN QA205.H99</dc:subject>
                    268: <dc:publisher>J. Wiley &amp; Sons</dc:publisher>
                    269: <dc:date>Created: 1906; Available: 1991</dc:date>
                    270: <dc:type>text</dc:type>
                    271: <dc:identifier>http://resolver.library.cornell.edu/math/1796949</dc:identifier>
                    272: <dc:language>eng</dc:language>
                    273: <dc:rights>Public Domain</dc:rights>
                    274: </dc:dc>
                    275: END
                    276: 
1.6     ! harris41  277: open(OUT,'>tmp_dcnsdl.xml');
        !           278: print(OUT <<END);
        !           279: $NSDL_metadata2
        !           280: END
        !           281: close(OUT);
        !           282: 
        !           283: #open(OUT,'>tmp_loncapa.xml');
        !           284: #print(OUT <<END);
        !           285: #<?xml version="1.0"?>
        !           286: #<loncapa>
        !           287: #$LONCAPA_metadata
        !           288: #</loncapa>
        !           289: #END
        !           290: #close(OUT);
        !           291: 
        !           292: open(OUT,'>tmp_loncapa.xml');
1.2       harris41  293: print(OUT <<END);
1.6     ! harris41  294: $LONCAPA_qualified_metadata
        !           295: END
        !           296: close(OUT);
        !           297: 
        !           298: 
        !           299: my $NSDL_metadata3=(<<END);
1.2       harris41  300: <?xml version="1.0"?>
1.6     ! harris41  301: <lom xmlns="http://nsdl.lon-capa.org/lom/elements/6.4/">
        !           302: 
        !           303:   <General>
        !           304:     <Identifier>
        !           305:      <Catalog>ISBN</Catalog>
        !           306:      <Entry>1323-143-d123-23</Entry>
        !           307:     </Identifier>
        !           308:     <Title>("en","House of Cards")</Title>
        !           309:     <Language>en</Language>
        !           310:     <Keyword>("en","Mona Lisa")</Keyword>
        !           311:   </General>
        !           312: 
        !           313:   <LifeCycle>
        !           314:       <Contribute>
        !           315:         <Role>Creator</Role>
        !           316:         <Person>Mary Smith</Person>
        !           317:         <Date>1998-07-20</Date>
        !           318:       </Contribute>
        !           319:   </LifeCycle>
        !           320: 
        !           321:   <Meta-metadata>
        !           322:     <Contribute>
        !           323:       <Date>1998-07-21</Date>
        !           324:       <Person>Joe Smith</Person>
        !           325:       <Organization>ACME Content</Organization>
        !           326:     </Contribute>
        !           327:     <Scheme>Base 1.0, IMS, ARIADNE</Scheme>
        !           328:     <Language>en</Language>
        !           329:   </Meta-metadata>
        !           330: 
        !           331:   <Technical>
        !           332:     <Format>HTML</Format>
        !           333:     <Location>http://www.manta.ieee.org/p1484/somewhere</Location>
        !           334:     <Requirement>
        !           335:       <OrComposite>
        !           336:       <Type>operating system</Type>
        !           337:       <Name>ms-windows</Name>
        !           338:       </OrComposite>
        !           339:     </Requirement>
        !           340:   </Technical>
        !           341: 
        !           342:   <Rights>
        !           343:     <CopyrightandOtherRestrictions>yes</CopyrightandOtherRestrictions>
        !           344:     <Description>("en","Copyright 2002 by A Big Green Elephant")</Description>
        !           345:   </Rights>
        !           346: 
        !           347:   <Classification>
        !           348:       <TaxonPath>
        !           349:         <Source>Standard Architectural Terms</Source>
        !           350:         <Taxon><Id>321</Id>
        !           351:                <Entry>("en","Temporary Shelter")</Entry></Taxon>
        !           352:         <Taxon><Id>322</Id>
        !           353:                <Entry>("en","A Really Small Tent")</Entry></Taxon>
        !           354:       </TaxonPath>
        !           355:   </Classification>
        !           356: 
        !           357: </lom>
        !           358: END
        !           359: 
        !           360: open(OUT,'>tmp_lomnsdl.xml');
        !           361: print(OUT <<END);
        !           362: $NSDL_metadata3
1.2       harris41  363: END
                    364: close(OUT);
                    365: 
1.6     ! harris41  366: # ====================================================== Define XSL stylesheets
        !           367: 
        !           368: # ------------------------------------------------------- dcnsdl_to_loncapa.xsl
        !           369: open(OUT,'>dcnsdl_to_loncapa.xsl');
1.2       harris41  370: print(OUT <<END);
                    371: <?xml version="1.0"?> 
1.6     ! harris41  372: <xsl:stylesheet
        !           373:   xmlns:dc="http://purl.org/dc/elements/1.1/"
        !           374:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        !           375:   xmlns:external="$namespace"
        !           376: >
        !           377: <xsl:template match="/">
        !           378: <loncapa:loncapa
        !           379:  xmlns:loncapa="http://nsdl.lon-capa.org/loncapa/elements/1.1/">
1.2       harris41  380: <xsl:text>
                    381: </xsl:text>
1.6     ! harris41  382: <xsl:apply-templates select="/*/dc:identifier"/>
        !           383: <xsl:apply-templates select="/*/dc:title"/>
        !           384: <xsl:apply-templates select="/*/dc:language"/>
        !           385: <xsl:apply-templates select="/*/dc:description"/>
        !           386: <xsl:apply-templates select="/*/dc:subject"/>
        !           387: <!-- xsl:apply-templates select="/*/dc:coverage"/ -->
        !           388: <xsl:apply-templates select="/*/dc:creator"/>
        !           389: <xsl:apply-templates select="/*/dc:publisher"/>
        !           390: <xsl:apply-templates select="/*/dc:date"/>
        !           391: <xsl:apply-templates select="/*/dc:format"/>
        !           392: <!-- xsl:apply-templates select="/*/dc:type"/ -->
        !           393: <xsl:apply-templates select="/*/dc:rights"/>
        !           394: <!-- xsl:apply-templates select="/*/dc:source"/ -->
        !           395: <!-- xsl:apply-templates select="/*/dc:relation"/ -->
        !           396: </loncapa:loncapa>
1.2       harris41  397: <xsl:text>
                    398: </xsl:text>
1.6     ! harris41  399: </xsl:template>
        !           400: <xsl:template match="dc:identifier">
        !           401: <uri>
        !           402:          <xsl:choose>
        !           403:            <xsl:when 
        !           404:          test="function-available('external:dcnsdl_identifier_to_loncapa_uri')"
        !           405:              >
        !           406:              <xsl:value-of select=
        !           407:                                "external:dcnsdl_identifier_to_loncapa_uri(.)"/>
        !           408:            </xsl:when>
        !           409:            <xsl:otherwise>
        !           410:          Function external:dcnsdl_identifier_to_loncapa_uri() is not available!
        !           411:            </xsl:otherwise>
        !           412:          </xsl:choose>
        !           413: </uri>
1.2       harris41  414: <xsl:text>
                    415: </xsl:text>
1.6     ! harris41  416: </xsl:template>
        !           417: <xsl:template match="dc:title">
        !           418: <title>
        !           419:          <xsl:choose>
        !           420:            <xsl:when
        !           421:             test="function-available('external:dcnsdl_title_to_loncapa_title')"
        !           422:              >
        !           423:              <xsl:value-of select="external:dcnsdl_title_to_loncapa_title(.)"/>
        !           424:            </xsl:when>
        !           425:            <xsl:otherwise>
        !           426:             Function external:dcnsdl_title_to_loncapa_title() is not available!
        !           427:            </xsl:otherwise>
        !           428:          </xsl:choose>
        !           429: </title>
        !           430: <xsl:text>
1.2       harris41  431: </xsl:text>
1.6     ! harris41  432: </xsl:template>
        !           433: <xsl:template match="dc:language">
        !           434: <language>
        !           435:          <xsl:choose>
        !           436:            <xsl:when
        !           437:       test="function-available('external:dcnsdl_language_to_loncapa_language')"
        !           438:              >
        !           439:              <xsl:value-of select=
        !           440:                             "external:dcnsdl_language_to_loncapa_language(.)"/>
        !           441:            </xsl:when>
        !           442:            <xsl:otherwise>
        !           443:       Function external:dcnsdl_language_to_loncapa_language() is not available!
        !           444:            </xsl:otherwise>
        !           445:          </xsl:choose>
        !           446: </language>
1.2       harris41  447: <xsl:text>
                    448: </xsl:text>
1.6     ! harris41  449: </xsl:template>
        !           450: <xsl:template match="dc:description">
        !           451: <abstract>
        !           452:          <xsl:choose>
        !           453:            <xsl:when
        !           454:    test="function-available('external:dcnsdl_description_to_loncapa_abstract')"
        !           455:              >
        !           456:              <xsl:value-of select=
        !           457:                          "external:dcnsdl_description_to_loncapa_abstract(.)"/>
        !           458:            </xsl:when>
        !           459:            <xsl:otherwise>
        !           460:    Function external:dcnsdl_description_to_loncapa_abstract() is not available!
        !           461:            </xsl:otherwise>
        !           462:          </xsl:choose>
        !           463: </abstract>
1.2       harris41  464: <xsl:text>
                    465: </xsl:text>
1.6     ! harris41  466: </xsl:template>
        !           467: <xsl:template match="dc:subject">
        !           468: <subject>
        !           469:          <xsl:choose>
        !           470:            <xsl:when
        !           471:         test="function-available('external:dcnsdl_subject_to_loncapa_subject')"
        !           472:              >
        !           473:              <xsl:value-of select=
        !           474:                               "external:dcnsdl_subject_to_loncapa_subject(.)"/>
        !           475:            </xsl:when>
        !           476:            <xsl:otherwise>
        !           477:         Function external:dcnsdl_subject_to_loncapa_subject() is not available!
        !           478:            </xsl:otherwise>
        !           479:          </xsl:choose>
        !           480: </subject>
1.2       harris41  481: <xsl:text>
                    482: </xsl:text>
1.6     ! harris41  483: </xsl:template>
        !           484: <xsl:template match="dc:creator">
        !           485: <author>
        !           486:          <xsl:choose>
        !           487:            <xsl:when
        !           488:         test="function-available('external:dcnsdl_creator_to_loncapa_author')"
        !           489:              >
        !           490:              <xsl:value-of select=
        !           491:                                "external:dcnsdl_creator_to_loncapa_author(.)"/>
        !           492:            </xsl:when>
        !           493:            <xsl:otherwise>
        !           494:          Function external:dcnsdl_creator_to_loncapa_author() is not available!
        !           495:            </xsl:otherwise>
        !           496:          </xsl:choose>
        !           497: </author>
1.2       harris41  498: <xsl:text>
                    499: </xsl:text>
1.6     ! harris41  500: </xsl:template>
        !           501: <xsl:template match="dc:publisher">
        !           502: <owner>
        !           503:          <xsl:choose>
        !           504:            <xsl:when
        !           505:         test="function-available('external:dcnsdl_publisher_to_loncapa_owner')"
        !           506:              >
        !           507:              <xsl:value-of select=
        !           508:                               "external:dcnsdl_publisher_to_loncapa_owner(.)"/>
        !           509:            </xsl:when>
        !           510:            <xsl:otherwise>
        !           511:         Function external:dcnsdl_publisher_to_loncapa_owner() is not available!
        !           512:            </xsl:otherwise>
        !           513:          </xsl:choose>
        !           514: </owner>
1.2       harris41  515: <xsl:text>
                    516: </xsl:text>
1.6     ! harris41  517: </xsl:template>
        !           518: <xsl:template match="dc:date">
        !           519: <lastrevisiondate>
        !           520:          <xsl:choose>
        !           521:            <xsl:when
        !           522:   test="function-available('external:dcnsdl_date_to_loncapa_lastrevisiondate')"
        !           523:              >
        !           524:              <xsl:value-of select=
        !           525:                         "external:dcnsdl_date_to_loncapa_lastrevisiondate(.)"/>
        !           526:            </xsl:when>
        !           527:            <xsl:otherwise>
        !           528:   Function external:dcnsdl_date_to_loncapa_lastrevisiondate() is not available!
        !           529:            </xsl:otherwise>
        !           530:          </xsl:choose>
        !           531: </lastrevisiondate>
1.2       harris41  532: <xsl:text>
                    533: </xsl:text>
1.6     ! harris41  534: </xsl:template>
        !           535: <xsl:template match="dc:format">
        !           536: <mime>
        !           537:          <xsl:choose>
        !           538:            <xsl:when
        !           539:             test="function-available('external:dcnsdl_format_to_loncapa_mime')"
        !           540:              >
        !           541:              <xsl:value-of select=
        !           542:                                   "external:dcnsdl_format_to_loncapa_mime(.)"/>
        !           543:            </xsl:when>
        !           544:            <xsl:otherwise>
        !           545:             Function external:dcnsdl_format_to_loncapa_mime() is not available!
        !           546:            </xsl:otherwise>
        !           547:          </xsl:choose>
        !           548: </mime>
1.2       harris41  549: <xsl:text>
                    550: </xsl:text>
1.6     ! harris41  551: </xsl:template>
        !           552: <xsl:template match="dc:rights">
        !           553: <copyright>
        !           554:          <xsl:choose>
        !           555:            <xsl:when
        !           556:        test="function-available('external:dcnsdl_rights_to_loncapa_copyright')"
        !           557:              >
        !           558:              <xsl:value-of select=
        !           559:                              "external:dcnsdl_rights_to_loncapa_copyright(.)"/>
        !           560:            </xsl:when>
        !           561:            <xsl:otherwise>
        !           562:        Function external:dcnsdl_rights_to_loncapa_copyright() is not available!
        !           563:            </xsl:otherwise>
        !           564:          </xsl:choose>
        !           565: </copyright>
1.2       harris41  566: <xsl:text>
                    567: </xsl:text>
                    568: </xsl:template>
                    569: </xsl:stylesheet>
                    570: END
                    571: close(OUT);
                    572: 
1.6     ! harris41  573: # ------------------------------------------------------- loncapa_to_dcnsdl.xsl
        !           574: open(OUT,'>loncapa_to_dcnsdl.xsl');
1.2       harris41  575: print(OUT <<END);
                    576: <?xml version="1.0"?> 
1.4       harris41  577: <xsl:stylesheet
1.6     ! harris41  578:   xmlns:loncapa="http://nsdl.lon-capa.org/loncapa/elements/1.1/"
        !           579:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
1.4       harris41  580:   xmlns:external="$namespace"
                    581: >
1.2       harris41  582: <xsl:template match="/">
1.6     ! harris41  583: <dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/">
        !           584: <xsl:text>
        !           585: </xsl:text>
        !           586: <!-- xsl:apply-templates select="/*/loncapa:*"/ -->
        !           587: <xsl:apply-templates select="/*/loncapa:title"/>
        !           588: <xsl:apply-templates select="/*/loncapa:author"/>
        !           589: <xsl:apply-templates select="/*/loncapa:owner"/>
        !           590: <xsl:apply-templates select="/*/loncapa:subject"/>
        !           591: <xsl:apply-templates select="/*/loncapa:abstract"/>
        !           592: <xsl:apply-templates select="/*/loncapa:lastrevisiondate"/>
        !           593: <xsl:apply-templates select="/*/loncapa:mime"/>
        !           594: <xsl:apply-templates select="/*/loncapa:uri"/>
        !           595: <xsl:apply-templates select="/*/loncapa:language"/>
        !           596: <xsl:apply-templates select="/*/loncapa:copyright"/>
        !           597: <dc:relation>[unknown]</dc:relation>
        !           598: <xsl:text>
        !           599: </xsl:text>
        !           600: <dc:source>[unknown]</dc:source>
        !           601: <xsl:text>
        !           602: </xsl:text>
        !           603: <dc:coverage>[unknown]</dc:coverage>
        !           604: <xsl:text>
        !           605: </xsl:text>
        !           606: <xsl:apply-templates select="/*/loncapa:copyright"/>
        !           607: </dc:dc>
        !           608: <xsl:text>
        !           609: </xsl:text>
        !           610: </xsl:template>
        !           611: <xsl:template match="loncapa:title">
        !           612: <dc:title>
        !           613:          <xsl:choose>
        !           614:            <xsl:when
        !           615:                  test=
        !           616:                  "function-available('external:loncapa_title_to_dcnsdl_title')"
        !           617:              >
        !           618:              <xsl:value-of select="external:loncapa_title_to_dcnsdl_title(.)"/>
        !           619:            </xsl:when>
        !           620:            <xsl:otherwise>
        !           621:             Function external:loncapa_title_to_dcnsdl_title() is not available!
        !           622:            </xsl:otherwise>
        !           623:          </xsl:choose>
        !           624: </dc:title>
        !           625: <xsl:text>
        !           626: </xsl:text>
        !           627: </xsl:template>
        !           628: <xsl:template match="loncapa:author">
        !           629: <dc:contributor>
        !           630:          <xsl:choose>
        !           631:            <xsl:when
        !           632:                  test=
        !           633:           "function-available('external:loncapa_author_to_dcnsdl_contributor')"
        !           634:              >
        !           635:              <xsl:value-of
        !           636:                     select="external:loncapa_author_to_dcnsdl_contributor(.)"/>
        !           637:            </xsl:when>
        !           638:            <xsl:otherwise>
        !           639:      Function external:loncapa_author_to_dcnsdl_contributor() is not available!
        !           640:            </xsl:otherwise>
        !           641:          </xsl:choose>
        !           642: </dc:contributor>
        !           643: <xsl:text>
        !           644: </xsl:text>
        !           645: <dc:creator>
        !           646:          <xsl:choose>
        !           647:            <xsl:when
        !           648:                  test=
        !           649:               "function-available('external:loncapa_author_to_dcnsdl_creator')"
        !           650:              >
        !           651:              <xsl:value-of
        !           652:                         select="external:loncapa_author_to_dcnsdl_creator(.)"/>
        !           653:            </xsl:when>
        !           654:            <xsl:otherwise>
        !           655:          Function external:loncapa_author_to_dcnsdl_creator() is not available!
        !           656:            </xsl:otherwise>
        !           657:          </xsl:choose>
        !           658: </dc:creator>
        !           659: <xsl:text>
        !           660: </xsl:text>
        !           661: </xsl:template>
        !           662: <xsl:template match="loncapa:owner">
        !           663: <dc:publisher>
        !           664:          <xsl:choose>
        !           665:            <xsl:when
        !           666:                  test=
        !           667:              "function-available('external:loncapa_owner_to_dcnsdl_publisher')"
        !           668:              >
        !           669:              <xsl:value-of
        !           670:                        select="external:loncapa_owner_to_dcnsdl_publisher(.)"/>
        !           671:            </xsl:when>
        !           672:            <xsl:otherwise>
        !           673:         Function external:loncapa_owner_to_dcnsdl_publisher() is not available!
        !           674:            </xsl:otherwise>
        !           675:          </xsl:choose>
        !           676: </dc:publisher>
1.2       harris41  677: <xsl:text>
                    678: </xsl:text>
1.6     ! harris41  679: </xsl:template>
        !           680: <xsl:template match="loncapa:subject">
        !           681: <dc:subject>
        !           682:          <xsl:choose>
        !           683:            <xsl:when
        !           684:                  test=
        !           685:              "function-available('external:loncapa_subject_to_dcnsdl_subject')"
        !           686:              >
        !           687:            <xsl:value-of
        !           688:                        select="external:loncapa_subject_to_dcnsdl_subject(.)"/>
        !           689:            </xsl:when>
        !           690:            <xsl:otherwise>
        !           691:         Function external:loncapa_subject_to_dcnsdl_subject() is not available!
        !           692:            </xsl:otherwise>
        !           693:          </xsl:choose>
        !           694: </dc:subject>
1.2       harris41  695: <xsl:text>
                    696: </xsl:text>
                    697: </xsl:template>
1.6     ! harris41  698: <xsl:template match="loncapa:abstract">
        !           699: <dc:description>
1.4       harris41  700:          <xsl:choose>
1.6     ! harris41  701:            <xsl:when
        !           702:                  test=
        !           703:         "function-available('external:loncapa_abstract_to_dcnsdl_description')"
        !           704:              >
        !           705:              <xsl:value-of
        !           706:                   select="external:loncapa_abstract_to_dcnsdl_description(.)"/>
1.4       harris41  707:            </xsl:when>
                    708:            <xsl:otherwise>
1.6     ! harris41  709:    Function external:loncapa_abstract_to_dcnsdl_description() is not available!
1.4       harris41  710:            </xsl:otherwise>
                    711:          </xsl:choose>
1.6     ! harris41  712: </dc:description>
1.2       harris41  713: <xsl:text>
                    714: </xsl:text>
                    715: </xsl:template>
1.6     ! harris41  716: <xsl:template match="loncapa:lastrevisiondate">
        !           717: <date>
        !           718:          <xsl:choose>
        !           719:            <xsl:when
        !           720:                  test=
        !           721:        "function-available('external:loncapa_lastrevisiondate_to_dcnsdl_date')"
        !           722:              >
        !           723:              <xsl:value-of select=
        !           724:                         "external:loncapa_lastrevisiondate_to_dcnsdl_date(.)"/>
        !           725:            </xsl:when>
        !           726:            <xsl:otherwise>
        !           727:   Function external:loncapa_lastrevisiondate_to_dcnsdl_date() is not available!
        !           728:            </xsl:otherwise>
        !           729:          </xsl:choose>
        !           730: </date>
1.2       harris41  731: <xsl:text>
                    732: </xsl:text>
                    733: </xsl:template>
1.6     ! harris41  734: <xsl:template match="loncapa:mime">
        !           735: <dc:type>
        !           736:          <xsl:choose>
        !           737:            <xsl:when
        !           738:                  test=
        !           739:                    "function-available('external:loncapa_mime_to_dcnsdl_type')"
        !           740:              >
        !           741:              <xsl:value-of select="external:loncapa_mime_to_dcnsdl_type(.)"/>
        !           742:            </xsl:when>
        !           743:            <xsl:otherwise>
        !           744:               Function external:loncapa_mime_to_dcnsdl_type() is not available!
        !           745:            </xsl:otherwise>
        !           746:          </xsl:choose>
        !           747: </dc:type>
        !           748: <xsl:text>
        !           749: </xsl:text>
        !           750: <dc:format>
        !           751:          <xsl:choose>
        !           752:            <xsl:when
        !           753:                  test=
        !           754:                  "function-available('external:loncapa_mime_to_dcnsdl_format')"
        !           755:              >
        !           756:              <xsl:value-of select="external:loncapa_mime_to_dcnsdl_format(.)"/>
        !           757:            </xsl:when>
        !           758:            <xsl:otherwise>
        !           759:             Function external:loncapa_mime_to_dcnsdl_format() is not available!
        !           760:            </xsl:otherwise>
        !           761:          </xsl:choose>
        !           762: </dc:format>
1.2       harris41  763: <xsl:text>
                    764: </xsl:text>
                    765: </xsl:template>
1.6     ! harris41  766: <xsl:template match="loncapa:uri">
        !           767: <dc:identifier>
        !           768:          <xsl:choose>
        !           769:            <xsl:when
        !           770:                  test=
        !           771:               "function-available('external:loncapa_uri_to_dcnsdl_identifier')"
        !           772:              >
        !           773:              <xsl:value-of select=
        !           774:                                "external:loncapa_uri_to_dcnsdl_identifier(.)"/>
        !           775:            </xsl:when>
        !           776:            <xsl:otherwise>
        !           777:          Function external:loncapa_uri_to_dcnsdl_identifier() is not available!
        !           778:            </xsl:otherwise>
        !           779:          </xsl:choose>
        !           780: </dc:identifier>
        !           781: <xsl:text>
        !           782: </xsl:text>
        !           783: </xsl:template>
        !           784: <xsl:template match="loncapa:language">
        !           785: <dc:language>
        !           786:          <xsl:choose>
        !           787:            <xsl:when
        !           788:                  test=
        !           789:            "function-available('external:loncapa_language_to_dcnsdl_language')"
        !           790:              >
        !           791:              <xsl:value-of select=
        !           792:                             "external:loncapa_language_to_dcnsdl_language(.)"/>
        !           793:            </xsl:when>
        !           794:            <xsl:otherwise>
        !           795:       Function external:loncapa_language_to_dcnsdl_language() is not available!
        !           796:            </xsl:otherwise>
        !           797:          </xsl:choose>
        !           798: </dc:language>
        !           799: <xsl:text>
        !           800: </xsl:text>
        !           801: </xsl:template>
        !           802: <xsl:template match="loncapa:copyright">
        !           803: <dc:rights>
        !           804:          <xsl:choose>
        !           805:            <xsl:when
        !           806:                  test=
        !           807:             "function-available('external:loncapa_copyright_to_dcnsdl_rights')"
        !           808:              >
        !           809:              <xsl:value-of select=
        !           810:                             "external:loncapa_copyright_to_dcnsdl_rights(.)"/>
        !           811:            </xsl:when>
        !           812:            <xsl:otherwise>
        !           813:        Function external:loncapa_copyright_to_dcnsdl_rights() is not available!
        !           814:            </xsl:otherwise>
        !           815:          </xsl:choose>
        !           816: </dc:rights>
        !           817: <xsl:text>
        !           818: </xsl:text>
        !           819: </xsl:template>
        !           820: </xsl:stylesheet>
        !           821: END
        !           822: close(OUT);
        !           823: 
        !           824: # ------------------------------------------------------ lomnsdl_to_loncapa.xsl
        !           825: open(OUT,'>lomnsdl_to_loncapa.xsl');
        !           826: print(OUT <<END);
        !           827: <?xml version="1.0"?> 
        !           828: <xsl:stylesheet
        !           829:   xmlns:lom="http://nsdl.lon-capa.org/lom/elements/6.4/"
        !           830:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        !           831:   xmlns:external="$namespace"
        !           832: >
        !           833: <xsl:template match="/">
        !           834: <loncapa:loncapa
        !           835:  xmlns:loncapa="http://nsdl.lon-capa.org/loncapa/elements/1.1/">
        !           836: <xsl:text>
        !           837: </xsl:text>
        !           838: <xsl:apply-templates select="/*/lom:General/lom:Identifier"/>
        !           839: <xsl:apply-templates select="/*/lom:General/lom:Title"/>
        !           840: <xsl:apply-templates select="/*/lom:General/lom:Language"/>
        !           841: <xsl:apply-templates select="/*/lom:General/lom:Description"/>
        !           842: <xsl:apply-templates select="/*/lom:General/lom:Keyword"/>
        !           843: <xsl:apply-templates select="/*/lom:LifeCycle/lom:Contribute"/>
        !           844: <xsl:apply-templates select="/*/lom:Technical/lom:Format"/>
        !           845: <xsl:apply-templates select="/*/lom:Technical/lom:Size"/>
        !           846: <xsl:apply-templates select="/*/lom:Educational/lom:Description"/>
        !           847: <xsl:apply-templates select="/*/lom:Rights/lom:CopyrightandOtherRestrictions"/>
        !           848: <xsl:apply-templates select="/*/lom:Rights/lom:Description"/>
        !           849: </loncapa:loncapa>
        !           850: </xsl:template>
        !           851: <xsl:template match="lom:General/lom:Identifier">
        !           852: <uri>http://nsdl.lon-capa.org/gateres/<xsl:value-of select="lom:Catalog"/>/<xsl:value-of select="lom:Entry"/>
        !           853: </uri>
        !           854: <xsl:text>
        !           855: </xsl:text>
        !           856: </xsl:template>
        !           857: <xsl:template match="lom:General/lom:Title">
        !           858: <title>
        !           859:          <xsl:choose>
        !           860:            <xsl:when 
        !           861:     test="function-available('external:lomnsdl_GeneralTitle_to_loncapa_title')"
        !           862:              >
        !           863:              <xsl:value-of select=
        !           864:                           "external:lomnsdl_GeneralTitle_to_loncapa_title(.)"/>
        !           865:            </xsl:when>
        !           866:            <xsl:otherwise>
        !           867:     Function external:lomnsdl_GeneralTitle_to_loncapa_title() is not available!
        !           868:            </xsl:otherwise>
        !           869:          </xsl:choose>
        !           870: </title>
        !           871: <xsl:text>
        !           872: </xsl:text>
        !           873: </xsl:template>
        !           874: <xsl:template match="lom:General/lom:Language">
        !           875: <language>
        !           876:          <xsl:choose>
        !           877:            <xsl:when
        !           878:                  test=
        !           879:    "function-available('external:lomnsdl_GeneralLanguage_to_loncapa_language')"
        !           880:              >
        !           881:              <xsl:value-of select=
        !           882:                     "external:lomnsdl_GeneralLanguage_to_loncapa_language(.)"/>
        !           883:            </xsl:when>
        !           884:            <xsl:otherwise>
        !           885: Function external:lomnsdl_GeneralLanguage_to_loncapa_language() is not
        !           886: available!
        !           887:            </xsl:otherwise>
        !           888:          </xsl:choose>
        !           889: </language>
        !           890: <xsl:text>
        !           891: </xsl:text>
        !           892: </xsl:template>
        !           893: <xsl:template match="lom:General/lom:Keyword">
        !           894: <keywords>
        !           895:          <xsl:choose>
        !           896:            <xsl:when
        !           897:                  test=
        !           898:     "function-available('external:lomnsdl_GeneralKeyword_to_loncapa_keywords')"
        !           899:              >
        !           900:              <xsl:value-of select=
        !           901:                      "external:lomnsdl_GeneralKeyword_to_loncapa_keywords(.)"/>
        !           902:            </xsl:when>
        !           903:            <xsl:otherwise>
        !           904: Function external:lomnsdl_GeneralKeyword_to_loncapa_keywords() is not
        !           905: available!
        !           906:            </xsl:otherwise>
        !           907:          </xsl:choose>
        !           908: </keywords>
        !           909: <xsl:text>
        !           910: </xsl:text>
        !           911: </xsl:template>
        !           912: <xsl:template match="lom:LifeCycle/lom:Contribute">
        !           913:          <xsl:choose>
        !           914:            <xsl:when
        !           915:                test="function-available('external:lomnsdl_LifeCycleContribute_prepare_converter_INFO')"
        !           916:              >
        !           917:              <xsl:value-of select=
        !           918:         "external:lomnsdl_LifeCycleContribute_prepare_converter_INFO(.)"/>
        !           919:            </xsl:when>
        !           920:            <xsl:otherwise>
        !           921: Function external:lomnsdl_LifeCycleContribute_prepare_converter_INFO()
        !           922: is not available!
        !           923:            </xsl:otherwise>
        !           924:          </xsl:choose>
        !           925: <xsl:apply-templates select="/*/lom:LifeCycle/lom:Contribute/lom:Role"/>
        !           926: <xsl:apply-templates select="/*/lom:LifeCycle/lom:Contribute/lom:Entity"/>
        !           927: <xsl:apply-templates select="/*/lom:LifeCycle/lom:Contribute/lom:Date"/>
        !           928:          <xsl:choose>
        !           929:            <xsl:when
        !           930:                test="function-available('external:converter_INFO_to_loncapa_lastrevisiondate')"
        !           931:              >
        !           932:              <xsl:value-of select=
        !           933:         "external:converter_INFO_to_loncapa_lastrevisiondate(.)"/>
        !           934:            </xsl:when>
        !           935:            <xsl:otherwise>
        !           936: Function external:converter_INFO_to_loncapa_lastrevisiondate()
        !           937: is not available!
        !           938:            </xsl:otherwise>
        !           939:          </xsl:choose>
        !           940:          <xsl:choose>
        !           941:            <xsl:when
        !           942:                test="function-available('external:converter_INFO_to_loncapa_creationdate')"
        !           943:              >
        !           944:              <xsl:value-of select=
        !           945:         "external:converter_INFO_to_loncapa_creationdate(.)"/>
        !           946:            </xsl:when>
        !           947:            <xsl:otherwise>
        !           948: Function external:converter_INFO_to_loncapa_creationdate()
        !           949: is not available!
        !           950:            </xsl:otherwise>
        !           951:          </xsl:choose>
        !           952:          <xsl:choose>
        !           953:            <xsl:when
        !           954:                test="function-available('external:converter_INFO_to_loncapa_author')"
        !           955:              >
        !           956:              <xsl:value-of select=
        !           957:         "external:converter_INFO_to_loncapa_author(.)"/>
        !           958:            </xsl:when>
        !           959:            <xsl:otherwise>
        !           960: Function external:converter_INFO_to_loncapa_author()
        !           961: is not available!
        !           962:            </xsl:otherwise>
        !           963:          </xsl:choose>
        !           964:          <xsl:choose>
        !           965:            <xsl:when
        !           966:                test="function-available('external:converter_INFO_to_loncapa_owner')"
        !           967:              >
        !           968:              <xsl:value-of select=
        !           969:         "external:converter_INFO_to_loncapa_owner(.)"/>
        !           970:            </xsl:when>
        !           971:            <xsl:otherwise>
        !           972: Function external:converter_INFO_to_loncapa_owner()
        !           973: is not available!
        !           974:            </xsl:otherwise>
        !           975:          </xsl:choose>
        !           976: </xsl:template>
        !           977: <xsl:template match="lom:LifeCycle/lom:Contribute/lom:Role">
        !           978:          <xsl:choose>
        !           979:            <xsl:when
        !           980:                test="function-available('external:lomnsdl_LifeCycleContributeRole_to_converter_INFO')"
        !           981:              >
        !           982:              <xsl:value-of select=
        !           983:               "external:lomnsdl_LifeCycleContributeRole_to_converter_INFO(.)"/>
        !           984:            </xsl:when>
        !           985:            <xsl:otherwise>
        !           986: Function external:lomnsdl_LifeCycleContributeRole_to_converter_INFO() is not
        !           987: available!
        !           988:            </xsl:otherwise>
        !           989:          </xsl:choose>
        !           990: </xsl:template>
        !           991: <xsl:template match="lom:LifeCycle/lom:Contribute/lom:Entry">
        !           992:          <xsl:choose>
        !           993:            <xsl:when
        !           994:                test="function-available('external:lomnsdl_LifeCycleContributeEntry_to_converter_INFO')"
        !           995:              >
        !           996:              <xsl:value-of select=
        !           997:              "external:lomnsdl_LifeCycleContributeEntry_to_converter_INFO(.)"/>
        !           998:            </xsl:when>
        !           999:            <xsl:otherwise>
        !          1000: Function external:lomnsdl_LifeCycleContributeEntry_to_converter_INFO() is not
        !          1001: available!
        !          1002:            </xsl:otherwise>
        !          1003:          </xsl:choose>
        !          1004: </xsl:template>
        !          1005: <xsl:template match="lom:LifeCycle/lom:Contribute/lom:Date">
        !          1006:          <xsl:choose>
        !          1007:            <xsl:when
        !          1008:                test="function-available('external:lomnsdl_LifeCycleContributeDate_to_converter_INFO')"
        !          1009:              >
        !          1010:              <xsl:value-of select=
        !          1011:               "external:lomnsdl_LifeCycleContributeDate_to_converter_INFO(.)"/>
        !          1012:            </xsl:when>
        !          1013:            <xsl:otherwise>
        !          1014: Function external:lomnsdl_LifeCycleContributeDate_to_converter_INFO() is not
        !          1015: available!
        !          1016:            </xsl:otherwise>
        !          1017:          </xsl:choose>
        !          1018: </xsl:template>
        !          1019: <xsl:template match="lom:Technical/lom:Format">
        !          1020: <mime>
        !          1021:          <xsl:choose>
        !          1022:            <xsl:when
        !          1023:   test="function-available('external:lomnsdl_TechnicalFormat_to_loncapa_mime')"
        !          1024:              >
        !          1025:              <xsl:value-of select=
        !          1026:                         "external:lomnsdl_TechnicalFormat_to_loncapa_mime(.)"/>
        !          1027:            </xsl:when>
        !          1028:            <xsl:otherwise>
        !          1029:   Function external:lomnsdl_TechnicalFormat_to_loncapa_mime() is not available!
        !          1030:            </xsl:otherwise>
        !          1031:          </xsl:choose>
        !          1032: </mime>
        !          1033: <xsl:text>
        !          1034: </xsl:text>
        !          1035: </xsl:template>
        !          1036: <xsl:template match="lom:Technical/lom:Size">
        !          1037: <bytesize>
        !          1038:          <xsl:choose>
        !          1039:            <xsl:when
        !          1040: test="function-available('external:lomnsdl_TechnicalSize_to_loncapa_bytesize')"
        !          1041:              >
        !          1042:              <xsl:value-of select=
        !          1043:                   "external:lomnsdl_TechnicalSize_to_loncapa_bytesize(.)"/>
        !          1044:            </xsl:when>
        !          1045:            <xsl:otherwise>
        !          1046: Function external:lomnsdl_TechnicalSize_to_loncapa_bytesize() is not available!
        !          1047:            </xsl:otherwise>
        !          1048:          </xsl:choose>
        !          1049: </bytesize>
        !          1050: <xsl:text>
        !          1051: </xsl:text>
        !          1052: </xsl:template>
        !          1053: <xsl:template match="lom:Educational/lom:Description">
        !          1054: <notes>
        !          1055:          <xsl:choose>
        !          1056:            <xsl:when
        !          1057:   test="function-available('external:lomnsdl_EducationalDescription_to_loncapa_notes')"
        !          1058:              >
        !          1059:              <xsl:value-of select=
        !          1060:                         "external:lomnsdl_EducationalDescription_to_loncapa_notes(.)"/>
        !          1061:            </xsl:when>
        !          1062:            <xsl:otherwise>
        !          1063: Function external:lomnsdl_EducationalDescription_to_loncapa_notes() is not
        !          1064: available!
        !          1065:            </xsl:otherwise>
        !          1066:          </xsl:choose>
        !          1067: </notes>
        !          1068: <xsl:text>
        !          1069: </xsl:text>
        !          1070: </xsl:template>
        !          1071: <xsl:template match="lom:Rights">
        !          1072:          <xsl:choose>
        !          1073:            <xsl:when
        !          1074:                test="function-available('external:lomnsdl_Rights_prepare_converter_INFO')"
        !          1075:              >
        !          1076:              <xsl:value-of select=
        !          1077:         "external:lomnsdl_Rights_prepare_converter_INFO(.)"/>
        !          1078:            </xsl:when>
        !          1079:            <xsl:otherwise>
        !          1080:     Function external:lomnsdl_Rights_prepare_converter_INFO() is not available!
        !          1081:            </xsl:otherwise>
        !          1082:          </xsl:choose>
        !          1083: <xsl:apply-templates select="/*/lom:Rights/lom:CopyrightandOtherRestrictions"/>
        !          1084: <xsl:apply-templates select="/*/lom:Rights/lom:Description"/>
        !          1085:          <xsl:choose>
        !          1086:            <xsl:when
        !          1087:                test=
        !          1088:            "function-available('external:converter_INFO_to_loncapa_copyright')"
        !          1089:              >
        !          1090:              <xsl:value-of select=
        !          1091:         "external:converter_INFO_to_loncapa_copyright(.)"/>
        !          1092:            </xsl:when>
        !          1093:            <xsl:otherwise>
        !          1094: Function external:converter_INFO_to_loncapa_copyright() is not available!
        !          1095:            </xsl:otherwise>
        !          1096:          </xsl:choose>
        !          1097: </xsl:template>
        !          1098: <xsl:template match="lom:Rights/lom:CopyrightandOtherRestrictions">
        !          1099:          <xsl:choose>
        !          1100:            <xsl:when
        !          1101:             test="function-available('external:lomnsdl_RightsCopyrightandOtherRestrictions_to_converter_INFO')"
        !          1102:              >
        !          1103:              <xsl:value-of select=
        !          1104:   "external:lomnsdl_RightsCopyrightandOtherRestrictions_to_converter_INFO(.)"/>
        !          1105:            </xsl:when>
        !          1106:            <xsl:otherwise>
        !          1107: Function
        !          1108: external:lomnsdl_RightsCopyrightandOtherRestrictions_to_converter_INFO()
        !          1109: is not available!
        !          1110:            </xsl:otherwise>
        !          1111:          </xsl:choose>
        !          1112: </xsl:template>
        !          1113: <xsl:template match="lom:Rights/lom:Description">
        !          1114:          <xsl:choose>
        !          1115:            <xsl:when
        !          1116:             test="function-available('external:lomnsdl_RightsDescription_to_converter_INFO')"
        !          1117:              >
        !          1118:              <xsl:value-of select=
        !          1119:   "external:lomnsdl_RightsDescription_to_converter_INFO(.)"/>
        !          1120:            </xsl:when>
        !          1121:            <xsl:otherwise>
        !          1122: Function external:lomnsdl_RightsDescription_to_converter_INFO() is not
        !          1123: available!
        !          1124:            </xsl:otherwise>
        !          1125:          </xsl:choose>
        !          1126: </xsl:template>
        !          1127: </xsl:stylesheet>
        !          1128: END
        !          1129: 
        !          1130: # ------------------------------------------------------ loncapa_to_lomnsdl.xsl
        !          1131: open(OUT,'>loncapa_to_lomnsdl.xsl');
        !          1132: print(OUT <<END);
        !          1133: <?xml version="1.0"?> 
        !          1134: <xsl:stylesheet
        !          1135:   xmlns:loncapa="http://nsdl.lon-capa.org/loncapa/elements/1.1/"
        !          1136:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        !          1137:   xmlns:external="$namespace"
        !          1138: >
        !          1139: <xsl:template match="/">
        !          1140: <!-- These values are stored in memory (converter_INFO) -->
        !          1141: <xsl:apply-templates select="/*/loncapa:language"/>
        !          1142: <xsl:apply-templates select="/*/loncapa:author"/>
        !          1143: <xsl:apply-templates select="/*/loncapa:lastrevisiondate"/>
        !          1144: <xsl:apply-templates select="/*/loncapa:metauri"/>
        !          1145: <xsl:apply-templates select="/*/loncapa:copyright"/>
        !          1146: <xsl:apply-templates select="/*/loncapa:owner"/>
        !          1147: <lom:lom xmlns:lom="http://nsdl.lon-capa.org/lom/elements/6.4/">
        !          1148: <xsl:text>
        !          1149: </xsl:text>
        !          1150: <General>
        !          1151:  <Identifier>
        !          1152:   <Catalog>LON</Catalog>
        !          1153:          <xsl:choose>
        !          1154:            <xsl:when
        !          1155:                  test=
        !          1156:          "function-available('external:converter_INFO_to_lomnsdl_GeneralIdentifierEntry')"
        !          1157:              >
        !          1158:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_GeneralIdentifierEntry(.)"/>
        !          1159:            </xsl:when>
        !          1160:            <xsl:otherwise>
        !          1161: Function external:converter_INFO_to_lomnsdl_GeneralIdentifierEntry() is not
        !          1162: available!
        !          1163:            </xsl:otherwise>
        !          1164:          </xsl:choose>
        !          1165:  </Identifier>
        !          1166:  <xsl:apply-templates select="/*/loncapa:title"/>
        !          1167:          <xsl:choose>
        !          1168:            <xsl:when
        !          1169:                  test=
        !          1170:          "function-available('external:converter_INFO_to_lomnsdl_GeneralLanguage')"
        !          1171:              >
        !          1172:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_GeneralLanguage(.)"/>
        !          1173:            </xsl:when>
        !          1174:            <xsl:otherwise>
        !          1175:     Function external:converter_INFO_to_lomnsdl_GeneralLanguage() is not available!
        !          1176:            </xsl:otherwise>
        !          1177:          </xsl:choose>
        !          1178:  <xsl:apply-templates select="/*/loncapa:abstract"/>
        !          1179:  <xsl:apply-templates select="/*/loncapa:keywords"/>
        !          1180:  <xsl:apply-templates select="/*/loncapa:structure"/>
        !          1181:  <xsl:apply-templates select="/*/loncapa:aggregation"/>
        !          1182: </General>
        !          1183: 
        !          1184: <LifeCycle>
        !          1185:  <xsl:apply-templates select="/*/loncapa:version"/>
        !          1186:  <Contribute>
        !          1187:  <Role>author</Role>
        !          1188:  <Entity>
        !          1189:          <xsl:choose>
        !          1190:            <xsl:when
        !          1191:                  test=
        !          1192:       "function-available('external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity')"
        !          1193:              >
        !          1194:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity(.)"/>
        !          1195:            </xsl:when>
        !          1196:            <xsl:otherwise>
        !          1197:     Function external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity() is not available!
        !          1198:            </xsl:otherwise>
        !          1199:          </xsl:choose>
        !          1200:  </Entity>
        !          1201:  <Date>
        !          1202:          <xsl:choose>
        !          1203:            <xsl:when
        !          1204:                  test=
        !          1205:          "function-available('external:converter_INFO_to_lomnsdl_LifeCycleContributeDate')"
        !          1206:              >
        !          1207:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_LifeCycleContributeDate(.)"/>
        !          1208:            </xsl:when>
        !          1209:            <xsl:otherwise>
        !          1210:     Function external:converter_INFO_to_lomnsdl_LifeCycleContributeDate() is not available!
        !          1211:            </xsl:otherwise>
        !          1212:          </xsl:choose>
        !          1213:  </Date>
        !          1214:  </Contribute>
        !          1215: </LifeCycle>
        !          1216: 
        !          1217: <MetaMetadata>
        !          1218:          <xsl:choose>
        !          1219:            <xsl:when
        !          1220:                  test=
        !          1221:         "function-available('external:converter_INFO_to_lomnsdl_MetaMetadata')"
        !          1222:              >
        !          1223:     <xsl:value-of select="external:converter_INFO_to_lomnsdl_MetaMetadata(.)"/>
        !          1224:            </xsl:when>
        !          1225:            <xsl:otherwise>
        !          1226:    Function external:converter_INFO_to_lomnsdl_MetaMetadata() is not available!
        !          1227:            </xsl:otherwise>
        !          1228:          </xsl:choose>
        !          1229: </MetaMetadata>
        !          1230: 
        !          1231: <Technical>
        !          1232:  <xsl:apply-templates select="/*/loncapa:mime"/>
        !          1233:  <xsl:apply-templates select="/*/loncapa:bytesize"/>
        !          1234:  <Location>
        !          1235:          <xsl:choose>
        !          1236:            <xsl:when
        !          1237:                  test=
        !          1238:    "function-available('external:converter_INFO_to_lomnsdl_TechnicalLocation')"
        !          1239:              >
        !          1240:              <xsl:value-of 
        !          1241:              select="external:converter_INFO_to_lomnsdl_TechnicalLocation(.)"/>
        !          1242:            </xsl:when>
        !          1243:            <xsl:otherwise>
        !          1244:    Function external:converter_INFO_to_lomnsdl_TechnicalLocation() is not
        !          1245: available!
        !          1246:            </xsl:otherwise>
        !          1247:          </xsl:choose>
        !          1248:  </Location>
        !          1249:  <Requirement>
        !          1250:          <xsl:choose>
        !          1251:            <xsl:when
        !          1252:                  test=
        !          1253: "function-available('external:converter_INFO_to_lomnsdl_TechnicalRequirement')"
        !          1254:              >
        !          1255:              <xsl:value-of 
        !          1256:           select="external:converter_INFO_to_lomnsdl_TechnicalRequirement(.)"/>
        !          1257:            </xsl:when>
        !          1258:            <xsl:otherwise>
        !          1259:    Function external:converter_INFO_to_lomnsdl_TechnicalRequirement() is not
        !          1260: available!
        !          1261:            </xsl:otherwise>
        !          1262:          </xsl:choose>
        !          1263:  </Requirement>
        !          1264: </Technical>
        !          1265: 
        !          1266: <Educational>
        !          1267:  <xsl:apply-templates select="/*/loncapa:notes"/>
        !          1268:  <Language>
        !          1269:          <xsl:choose>
        !          1270:            <xsl:when
        !          1271:                  test=
        !          1272: "function-available('external:converter_INFO_to_lomnsdl_EducationalLanguage')"
        !          1273:              >
        !          1274:              <xsl:value-of 
        !          1275:           select="external:converter_INFO_to_lomnsdl_EducationalLanguage(.)"/>
        !          1276:            </xsl:when>
        !          1277:            <xsl:otherwise>
        !          1278:    Function external:converter_INFO_to_lomnsdl_EducationalLanguage() is not
        !          1279: available!
        !          1280:            </xsl:otherwise>
        !          1281:          </xsl:choose>
        !          1282:  </Language>
        !          1283: </Educational>
        !          1284: 
        !          1285: <Rights>
        !          1286:  <CopyrightandOtherRestrictions>yes</CopyrightandOtherRestrictions>
        !          1287:  <Description>
        !          1288:          <xsl:choose>
        !          1289:            <xsl:when
        !          1290:                  test=
        !          1291: "function-available('external:converter_INFO_to_lomnsdl_RightsDescription')"
        !          1292:              >
        !          1293:              <xsl:value-of 
        !          1294:           select="external:converter_INFO_to_lomnsdl_RightsDescription(.)"/>
        !          1295:            </xsl:when>
        !          1296:            <xsl:otherwise>
        !          1297:          Function external:converter_INFO_to_lomnsdl_RightsDescription() is not
        !          1298: available!
        !          1299:            </xsl:otherwise>
        !          1300:          </xsl:choose>
        !          1301:  </Description>
        !          1302: </Rights>
        !          1303: <xsl:text>
        !          1304: </xsl:text>
        !          1305: 
        !          1306: </lom:lom>
        !          1307: </xsl:template>
        !          1308: <xsl:template match="loncapa:title">
        !          1309: <Title>
        !          1310:          <xsl:choose>
        !          1311:            <xsl:when
        !          1312:                  test=
        !          1313:          "function-available('external:loncapa_title_to_lomnsdl_GeneralTitle')"
        !          1314:              >
        !          1315:      <xsl:value-of select="external:loncapa_title_to_lomnsdl_GeneralTitle(.)"/>
        !          1316:            </xsl:when>
        !          1317:            <xsl:otherwise>
        !          1318:     Function external:loncapa_title_to_lomnsdl_GeneralTitle() is not available!
        !          1319:            </xsl:otherwise>
        !          1320:          </xsl:choose>
        !          1321: </Title>
        !          1322: <xsl:text>
        !          1323: </xsl:text>
        !          1324: </xsl:template>
        !          1325: <xsl:template match="loncapa:abstract">
        !          1326: <Description>
        !          1327:          <xsl:choose>
        !          1328:            <xsl:when
        !          1329:                  test=
        !          1330: "function-available('external:loncapa_abstract_to_lomnsdl_GeneralDescription')"
        !          1331:              >
        !          1332:      <xsl:value-of select=
        !          1333:                  "external:loncapa_abstract_to_lomnsdl_GeneralDescription(.)"/>
        !          1334:            </xsl:when>
        !          1335:            <xsl:otherwise>
        !          1336:     Function external:loncapa_abstract_to_lomnsdl_GeneralDescription() is not
        !          1337: available!
        !          1338:            </xsl:otherwise>
        !          1339:          </xsl:choose>
        !          1340: </Description>
        !          1341: <xsl:text>
        !          1342: </xsl:text>
        !          1343: </xsl:template>
        !          1344: <xsl:template match="loncapa:keywords">
        !          1345: <Keyword>
        !          1346:          <xsl:choose>
        !          1347:            <xsl:when
        !          1348:                  test=
        !          1349: "function-available('external:loncapa_keywords_to_lomnsdl_GeneralKeyword')"
        !          1350:              >
        !          1351:      <xsl:value-of select=
        !          1352:                  "external:loncapa_keywords_to_lomnsdl_GeneralKeyword(.)"/>
        !          1353:            </xsl:when>
        !          1354:            <xsl:otherwise>
        !          1355:     Function external:loncapa_keywords_to_lomnsdl_GeneralKeyword() is not
        !          1356: available!
        !          1357:            </xsl:otherwise>
        !          1358:          </xsl:choose>
        !          1359: </Keyword>
        !          1360: <xsl:text>
        !          1361: </xsl:text>
        !          1362: </xsl:template>
        !          1363: <xsl:template match="loncapa:structure">
        !          1364: <Structure>
        !          1365:          <xsl:choose>
        !          1366:            <xsl:when
        !          1367:                  test=
        !          1368: "function-available('external:loncapa_structure_to_lomnsdl_GeneralStructure')"
        !          1369:              >
        !          1370:      <xsl:value-of select=
        !          1371:                   "external:loncapa_structure_to_lomnsdl_GeneralStructure(.)"/>
        !          1372:            </xsl:when>
        !          1373:            <xsl:otherwise>
        !          1374:     Function external:loncapa_structure_to_lomnsdl_GeneralStructure() is not
        !          1375: available!
        !          1376:            </xsl:otherwise>
        !          1377:          </xsl:choose>
        !          1378: </Structure>
        !          1379: <xsl:text>
        !          1380: </xsl:text>
        !          1381: </xsl:template>
        !          1382: <xsl:template match="loncapa:aggregation">
        !          1383: <AggregationLevel>
        !          1384:          <xsl:choose>
        !          1385:            <xsl:when
        !          1386:                  test=
        !          1387: "function-available('external:loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel')"
        !          1388:              >
        !          1389:      <xsl:value-of select=
        !          1390:          "external:loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel(.)"/>
        !          1391:            </xsl:when>
        !          1392:            <xsl:otherwise>
        !          1393: Function external:loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel() is
        !          1394: not available!
        !          1395:            </xsl:otherwise>
        !          1396:          </xsl:choose>
        !          1397: </AggregationLevel>
        !          1398: <xsl:text>
        !          1399: </xsl:text>
        !          1400: </xsl:template>
        !          1401: <xsl:template match="loncapa:version">
        !          1402: <Version>
        !          1403:          <xsl:choose>
        !          1404:            <xsl:when
        !          1405:                  test=
        !          1406: "function-available('external:loncapa_version_to_lomnsdl_LifeCycleVersion')"
        !          1407:              >
        !          1408:      <xsl:value-of select=
        !          1409:          "external:loncapa_version_to_lomnsdl_LifeCycleVersion(.)"/>
        !          1410:            </xsl:when>
        !          1411:            <xsl:otherwise>
        !          1412: Function external:loncapa_version_to_lomnsdl_LifeCycleVersion() is
        !          1413: not available!
        !          1414:            </xsl:otherwise>
        !          1415:          </xsl:choose>
        !          1416: </Version>
        !          1417: <xsl:text>
        !          1418: </xsl:text>
        !          1419: </xsl:template>
        !          1420: <xsl:template match="loncapa:mime">
        !          1421: <Format>
        !          1422:          <xsl:choose>
        !          1423:            <xsl:when
        !          1424:                  test=
        !          1425: "function-available('external:loncapa_mime_to_lomnsdl_TechnicalFormat')"
        !          1426:              >
        !          1427:      <xsl:value-of select=
        !          1428:          "external:loncapa_mime_to_lomnsdl_TechnicalFormat(.)"/>
        !          1429:            </xsl:when>
        !          1430:            <xsl:otherwise>
        !          1431: Function external:loncapa_mime_to_lomnsdl_TechnicalFormat() is not available!
        !          1432:            </xsl:otherwise>
        !          1433:          </xsl:choose>
        !          1434: </Format>
        !          1435: <xsl:text>
        !          1436: </xsl:text>
        !          1437: </xsl:template>
        !          1438: <xsl:template match="loncapa:bytesize">
        !          1439: <Size>
        !          1440:          <xsl:choose>
        !          1441:            <xsl:when
        !          1442:                  test=
        !          1443: "function-available('external:loncapa_bytesize_to_lomnsdl_TechnicalSize')"
        !          1444:              >
        !          1445:      <xsl:value-of select=
        !          1446:          "external:loncapa_bytesize_to_lomnsdl_TechnicalSize(.)"/>
        !          1447:            </xsl:when>
        !          1448:            <xsl:otherwise>
        !          1449: Function external:loncapa_bytesize_to_lomnsdl_TechnicalSize() is
        !          1450: not available!
        !          1451:            </xsl:otherwise>
        !          1452:          </xsl:choose>
        !          1453: </Size>
        !          1454: <xsl:text>
        !          1455: </xsl:text>
        !          1456: </xsl:template>
        !          1457: <xsl:template match="loncapa:notes">
        !          1458: <Description>
        !          1459:          <xsl:choose>
        !          1460:            <xsl:when
        !          1461:                  test=
        !          1462: "function-available('external:loncapa_notes_to_lomnsdl_EducationalDescription')"
        !          1463:              >
        !          1464:      <xsl:value-of select=
        !          1465:          "external:loncapa_notes_to_lomnsdl_EducationalDescription(.)"/>
        !          1466:            </xsl:when>
        !          1467:            <xsl:otherwise>
        !          1468: Function external:loncapa_notes_to_lomnsdl_EducationalDescription() is
        !          1469: not available!
        !          1470:            </xsl:otherwise>
        !          1471:          </xsl:choose>
        !          1472: </Description>
        !          1473: <xsl:text>
        !          1474: </xsl:text>
        !          1475: </xsl:template>
        !          1476: <xsl:template match="loncapa:language">
        !          1477:          <xsl:choose>
        !          1478:            <xsl:when
        !          1479:                  test=
        !          1480:           "function-available('external:loncapa_language_to_converter_INFO')"
        !          1481:              >
        !          1482:              <xsl:value-of select=
        !          1483:                            "external:loncapa_language_to_converter_INFO(.)"/>
        !          1484:            </xsl:when>
        !          1485:            <xsl:otherwise>
        !          1486:      Function external:loncapa_language_to_converter_INFO() is not available!
        !          1487:            </xsl:otherwise>
        !          1488:          </xsl:choose>
        !          1489: </xsl:template>
        !          1490: <xsl:template match="loncapa:author">
        !          1491:          <xsl:choose>
        !          1492:            <xsl:when
        !          1493:                  test=
        !          1494:          "function-available('external:loncapa_author_to_converter_INFO')"
        !          1495:              >
        !          1496:              <xsl:value-of
        !          1497:                     select="external:loncapa_author_to_converter_INFO(.)"/>
        !          1498:            </xsl:when>
        !          1499:            <xsl:otherwise>
        !          1500:          Function external:loncapa_author_to_converter_INFO() is not available!
        !          1501:            </xsl:otherwise>
        !          1502:          </xsl:choose>
        !          1503: </xsl:template>
        !          1504: <xsl:template match="loncapa:lastrevisiondate">
        !          1505:          <xsl:choose>
        !          1506:            <xsl:when
        !          1507:                  test=
        !          1508:     "function-available('external:loncapa_lastrevisiondate_to_converter_INFO')"
        !          1509:              >
        !          1510:              <xsl:value-of
        !          1511:               select="external:loncapa_lastrevisiondate_to_converter_INFO(.)"/>
        !          1512:            </xsl:when>
        !          1513:            <xsl:otherwise>
        !          1514:           Function external:loncapa_lastrevisiondate_to_converter_INFO() is not
        !          1515: available!
        !          1516:            </xsl:otherwise>
        !          1517:          </xsl:choose>
        !          1518: </xsl:template>
        !          1519: <xsl:template match="loncapa:metauri">
        !          1520:          <xsl:choose>
        !          1521:            <xsl:when
        !          1522:                  test=
        !          1523:     "function-available('external:loncapa_metauri_to_converter_INFO')"
        !          1524:              >
        !          1525:              <xsl:value-of
        !          1526:               select="external:loncapa_metauri_to_converter_INFO(.)"/>
        !          1527:            </xsl:when>
        !          1528:            <xsl:otherwise>
        !          1529:           Function external:loncapa_metauri_to_converter_INFO() is not
        !          1530: available!
        !          1531:            </xsl:otherwise>
        !          1532:          </xsl:choose>
        !          1533: </xsl:template>
        !          1534: <xsl:template match="loncapa:copyright">
        !          1535:          <xsl:choose>
        !          1536:            <xsl:when
        !          1537:                  test=
        !          1538:     "function-available('external:loncapa_copyright_to_converter_INFO')"
        !          1539:              >
        !          1540:              <xsl:value-of
        !          1541:               select="external:loncapa_copyright_to_converter_INFO(.)"/>
        !          1542:            </xsl:when>
        !          1543:            <xsl:otherwise>
        !          1544:           Function external:loncapa_copyright_to_converter_INFO() is not
        !          1545: available!
        !          1546:            </xsl:otherwise>
        !          1547:          </xsl:choose>
        !          1548: </xsl:template>
        !          1549: <xsl:template match="loncapa:owner">
        !          1550:          <xsl:choose>
        !          1551:            <xsl:when
        !          1552:                  test=
        !          1553:     "function-available('external:loncapa_owner_to_converter_INFO')"
        !          1554:              >
        !          1555:              <xsl:value-of
        !          1556:               select="external:loncapa_owner_to_converter_INFO(.)"/>
        !          1557:            </xsl:when>
        !          1558:            <xsl:otherwise>
        !          1559:           Function external:loncapa_owner_to_converter_INFO() is not
        !          1560: available!
        !          1561:            </xsl:otherwise>
        !          1562:          </xsl:choose>
        !          1563: </xsl:template>
        !          1564: </xsl:stylesheet>
        !          1565: END
        !          1566: 
        !          1567: # ----------------------------------------------------- loncapa_to_lomnsdl.xsl2
        !          1568: open(OUT,'>loncapa_to_lomnsdl.xsl2');
        !          1569: print(OUT <<END);
        !          1570: <?xml version="1.0"?> 
        !          1571: <xsl:stylesheet
        !          1572:   xmlns:loncapa="http://nsdl.lon-capa.org/loncapa/elements/1.1/"
        !          1573:   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        !          1574:   xmlns:external="$namespace"
        !          1575: >
        !          1576: <xsl:template match="/">
        !          1577: <lom:lom xmlns:lom="http://nsdl.lon-capa.org/lom/elements/6.4/">
        !          1578: <xsl:text>
        !          1579: </xsl:text>
        !          1580: <!-- These values are stored in memory (converter_INFO) -->
        !          1581: <xsl:apply-templates select="/*/loncapa:language"/>
        !          1582: <xsl:apply-templates select="/*/loncapa:author"/>
        !          1583: <xsl:apply-templates select="/*/loncapa:lastrevisiondate"/>
        !          1584: <xsl:apply-templates select="/*/loncapa:metauri"/>
        !          1585: <xsl:apply-templates select="/*/loncapa:copyright"/>
        !          1586: <xsl:apply-templates select="/*/loncapa:owner"/>
        !          1587: 
        !          1588: <General>
        !          1589:  <Identifier>
        !          1590:   <Catalog>LON</Catalog>
        !          1591:   <Entry><!-- call mem --></Entry>
        !          1592:  </Identifier>
        !          1593:  <xsl:apply-templates select="/*/loncapa:title"/>
        !          1594:          <xsl:choose>
        !          1595:            <xsl:when
        !          1596:                  test=
        !          1597:          "function-available('external:converter_INFO_to_lomnsdl_GeneralLanguage')"
        !          1598:              >
        !          1599:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_GeneralLanguage(.)"/>
        !          1600:            </xsl:when>
        !          1601:            <xsl:otherwise>
        !          1602:     Function external:converter_INFO_to_lomnsdl_GeneralLanguage() is not available!
        !          1603:            </xsl:otherwise>
        !          1604:          </xsl:choose>
        !          1605:  <xsl:apply-templates select="/*/loncapa:abstract"/>
        !          1606:  <xsl:apply-templates select="/*/loncapa:keywords"/>
        !          1607:  <xsl:apply-templates select="/*/loncapa:structure"/>
        !          1608:  <xsl:apply-templates select="/*/loncapa:aggregation"/>
        !          1609: </General>
        !          1610: 
        !          1611: <LifeCycle>
        !          1612:  <xsl:apply-templates select="/*/loncapa:version"/>
        !          1613:  <Contribute>
        !          1614:  <Role>Creator</Role>
        !          1615:  <Entity>
        !          1616:          <xsl:choose>
        !          1617:            <xsl:when
        !          1618:                  test=
        !          1619:       "function-available('external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity')"
        !          1620:              >
        !          1621:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity(.)"/>
        !          1622:            </xsl:when>
        !          1623:            <xsl:otherwise>
        !          1624:     Function external:converter_INFO_to_lomnsdl_LifeCycleContributeEntity() is not available!
        !          1625:            </xsl:otherwise>
        !          1626:          </xsl:choose>
        !          1627:  </Entity>
        !          1628:  <Date>
        !          1629:          <xsl:choose>
        !          1630:            <xsl:when
        !          1631:                  test=
        !          1632:          "function-available('external:converter_INFO_to_lomnsdl_LifeCycleContributeDate')"
        !          1633:              >
        !          1634:      <xsl:value-of select="external:converter_INFO_to_lomnsdl_LifeCycleContributeDate(.)"/>
        !          1635:            </xsl:when>
        !          1636:            <xsl:otherwise>
        !          1637:     Function external:converter_INFO_to_lomnsdl_LifeCycleContributeDate() is not available!
        !          1638:            </xsl:otherwise>
        !          1639:          </xsl:choose>
        !          1640:  </Date>
        !          1641:  </Contribute>
        !          1642: </LifeCycle>
        !          1643: 
        !          1644: <MetaMetadata>
        !          1645:          <xsl:choose>
        !          1646:            <xsl:when
        !          1647:                  test=
        !          1648:         "function-available('external:converter_INFO_to_lomnsdl_MetaMetadata')"
        !          1649:              >
        !          1650:     <xsl:value-of select="external:converter_INFO_to_lomnsdl_MetaMetadata(.)"/>
        !          1651:            </xsl:when>
        !          1652:            <xsl:otherwise>
        !          1653:    Function external:converter_INFO_to_lomnsdl_MetaMetadata() is not available!
        !          1654:            </xsl:otherwise>
        !          1655:          </xsl:choose>
        !          1656: </MetaMetadata>
        !          1657: 
        !          1658: <Technical>
        !          1659:  <xsl:apply-templates select="/*/loncapa:mime"/>
        !          1660:  <xsl:apply-templates select="/*/loncapa:bytesize"/>
        !          1661:  <Location>
        !          1662:          <xsl:choose>
        !          1663:            <xsl:when
        !          1664:                  test=
        !          1665:    "function-available('external:converter_INFO_to_lomnsdl_TechnicalLocation')"
        !          1666:              >
        !          1667:              <xsl:value-of 
        !          1668:              select="external:converter_INFO_to_lomnsdl_TechnicalLocation(.)"/>
        !          1669:            </xsl:when>
        !          1670:            <xsl:otherwise>
        !          1671:    Function external:converter_INFO_to_lomnsdl_TechnicalLocation() is not
        !          1672: available!
        !          1673:            </xsl:otherwise>
        !          1674:          </xsl:choose>
        !          1675:  </Location>
        !          1676:  <Requirement>
        !          1677:          <xsl:choose>
        !          1678:            <xsl:when
        !          1679:                  test=
        !          1680: "function-available('external:converter_INFO_to_lomnsdl_TechnicalRequirement')"
        !          1681:              >
        !          1682:              <xsl:value-of 
        !          1683:           select="external:converter_INFO_to_lomnsdl_TechnicalRequirement(.)"/>
        !          1684:            </xsl:when>
        !          1685:            <xsl:otherwise>
        !          1686:    Function external:converter_INFO_to_lomnsdl_TechnicalRequirement() is not
        !          1687: available!
        !          1688:            </xsl:otherwise>
        !          1689:          </xsl:choose>
        !          1690:  </Requirement>
        !          1691: </Technical>
        !          1692: 
        !          1693: <Educational>
        !          1694:  <xsl:apply-templates select="/*/loncapa:notes"/>
        !          1695:  <Language>
        !          1696:          <xsl:choose>
        !          1697:            <xsl:when
        !          1698:                  test=
        !          1699: "function-available('external:converter_INFO_to_lomnsdl_EducationalLanguage')"
        !          1700:              >
        !          1701:              <xsl:value-of 
        !          1702:           select="external:converter_INFO_to_lomnsdl_EducationalLanguage(.)"/>
        !          1703:            </xsl:when>
        !          1704:            <xsl:otherwise>
        !          1705:    Function external:converter_INFO_to_lomnsdl_EducationalLanguage() is not
        !          1706: available!
        !          1707:            </xsl:otherwise>
        !          1708:          </xsl:choose>
        !          1709:  </Language>
        !          1710: </Educational>
        !          1711: 
        !          1712: <Rights>
        !          1713:  <CopyrightandOtherRestrictions>yes</CopyrightandOtherRestrictions>
        !          1714:  <Description>
        !          1715:          <xsl:choose>
        !          1716:            <xsl:when
        !          1717:                  test=
        !          1718: "function-available('external:converter_INFO_to_lomnsdl_RightsDescription')"
        !          1719:              >
        !          1720:              <xsl:value-of 
        !          1721:           select="external:converter_INFO_to_lomnsdl_RightsDescription(.)"/>
        !          1722:            </xsl:when>
        !          1723:            <xsl:otherwise>
        !          1724:          Function external:converter_INFO_to_lomnsdl_RightsDescription() is not
        !          1725: available!
        !          1726:            </xsl:otherwise>
        !          1727:          </xsl:choose>
        !          1728:  </Description>
        !          1729: </Rights>
        !          1730: <xsl:text>
        !          1731: </xsl:text>
        !          1732: </lom:lom>
        !          1733: <xsl:text>
        !          1734: </xsl:text>
        !          1735: </xsl:template>
        !          1736: 
        !          1737: <xsl:template match="loncapa:title">
        !          1738: <Title>
        !          1739:          <xsl:choose>
        !          1740:            <xsl:when
        !          1741:                  test=
        !          1742:          "function-available('external:loncapa_title_to_lomnsdl_GeneralTitle')"
        !          1743:              >
        !          1744:      <xsl:value-of select="external:loncapa_title_to_lomnsdl_GeneralTitle(.)"/>
        !          1745:            </xsl:when>
        !          1746:            <xsl:otherwise>
        !          1747:     Function external:loncapa_title_to_lomnsdl_GeneralTitle() is not available!
        !          1748:            </xsl:otherwise>
        !          1749:          </xsl:choose>
        !          1750: </Title>
        !          1751: <xsl:text>
        !          1752: </xsl:text>
        !          1753: </xsl:template>
        !          1754: 
        !          1755: <xsl:template match="loncapa:abstract">
        !          1756: <Description>
        !          1757:          <xsl:choose>
        !          1758:            <xsl:when
        !          1759:                  test=
        !          1760: "function-available('external:loncapa_abstract_to_lomnsdl_GeneralDescription')"
        !          1761:              >
        !          1762:              <xsl:value-of
        !          1763:            select="external:loncapa_abstract_to_lomsdl_GeneralDescription(.)"/>
        !          1764:            </xsl:when>
        !          1765:            <xsl:otherwise>
        !          1766:    Function external:loncapa_abstract_to_lomnsdl_GeneralDescription() is not available!
        !          1767:            </xsl:otherwise>
        !          1768:          </xsl:choose>
        !          1769: </Description>
        !          1770: <xsl:text>
        !          1771: </xsl:text>
        !          1772: </xsl:template>
        !          1773: 
        !          1774: <xsl:template match="loncapa:keywords">
        !          1775: <Keyword>
        !          1776:          <xsl:choose>
        !          1777:            <xsl:when
        !          1778:                  test=
        !          1779: "function-available('external:loncapa_keywords_to_lomnsdl_GeneralKeyword')"
        !          1780:              >
        !          1781:              <xsl:value-of
        !          1782:            select="external:loncapa_keywords_to_lomsdl_GeneralKeyword(.)"/>
        !          1783:            </xsl:when>
        !          1784:            <xsl:otherwise>
        !          1785:    Function external:loncapa_keywords_to_lomnsdl_GeneralKeyword() is not available!
        !          1786:            </xsl:otherwise>
        !          1787:          </xsl:choose>
        !          1788: </Keyword>
        !          1789: <xsl:text>
        !          1790: </xsl:text>
        !          1791: </xsl:template>
        !          1792: 
        !          1793: <xsl:template match="loncapa:structure">
        !          1794: <Structure>
        !          1795:          <xsl:choose>
        !          1796:            <xsl:when
        !          1797:                  test=
        !          1798: "function-available('external:loncapa_structure_to_lomnsdl_GeneralStructure')"
        !          1799:              >
        !          1800:              <xsl:value-of
        !          1801:            select="external:loncapa_structure_to_lomsdl_GeneralStructure(.)"/>
        !          1802:            </xsl:when>
        !          1803:            <xsl:otherwise>
        !          1804:    Function external:loncapa_structure_to_lomnsdl_GeneralStructure() is not
        !          1805:    available!
        !          1806:            </xsl:otherwise>
        !          1807:          </xsl:choose>
        !          1808: </Structure>
        !          1809: <xsl:text>
        !          1810: </xsl:text>
        !          1811: </xsl:template>
        !          1812: 
        !          1813: <xsl:template match="loncapa:aggregation">
        !          1814: <AggregationLevel>
        !          1815:          <xsl:choose>
        !          1816:            <xsl:when
        !          1817:                  test=
        !          1818: "function-available('external:loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel')"
        !          1819:              >
        !          1820:              <xsl:value-of
        !          1821:            select="external:loncapa_aggregation_to_lomsdl_GeneralAggregationLevel(.)"/>
        !          1822:            </xsl:when>
        !          1823:            <xsl:otherwise>
        !          1824:    Function external:loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel()
        !          1825:    is not available!
        !          1826:            </xsl:otherwise>
        !          1827:          </xsl:choose>
        !          1828: </AggregationLevel>
        !          1829: <xsl:text>
        !          1830: </xsl:text>
        !          1831: </xsl:template>
        !          1832: 
        !          1833: <xsl:template match="loncapa:version">
        !          1834: <Version>
        !          1835:          <xsl:choose>
        !          1836:            <xsl:when
        !          1837:                  test=
        !          1838:    "function-available('external:loncapa_version_to_lomnsdl_LifeCycleVersion')"
        !          1839:              >
        !          1840:              <xsl:value-of
        !          1841:               select="external:loncapa_version_to_lomsdl_LifeCycleVersion(.)"/>
        !          1842:            </xsl:when>
        !          1843:            <xsl:otherwise>
        !          1844:         Function external:loncapa_version_to_lomnsdl_LifeCycleVersion() is not
        !          1845:         available!
        !          1846:            </xsl:otherwise>
        !          1847:          </xsl:choose>
        !          1848: </Version>
        !          1849: <xsl:text>
        !          1850: </xsl:text>
        !          1851: </xsl:template>
        !          1852: 
        !          1853: <xsl:template match="loncapa:mime">
        !          1854: <Format>
        !          1855:          <xsl:choose>
        !          1856:            <xsl:when
        !          1857:                  test=
        !          1858:    "function-available('external:loncapa_mime_to_lomnsdl_Format')"
        !          1859:              >
        !          1860:              <xsl:value-of
        !          1861:                     select="external:loncapa_mime_to_lomsdl_Format(.)"/>
        !          1862:            </xsl:when>
        !          1863:            <xsl:otherwise>
        !          1864:     Function external:loncapa_mime_to_lomnsdl_Format() is not available!
        !          1865:            </xsl:otherwise>
        !          1866:          </xsl:choose>
        !          1867: </Format>
        !          1868: <xsl:text>
        !          1869: </xsl:text>
        !          1870: </xsl:template>
        !          1871: 
        !          1872: <xsl:template match="loncapa:bytesize">
        !          1873: <Size>
        !          1874:          <xsl:choose>
        !          1875:            <xsl:when
        !          1876:                  test=
        !          1877:    "function-available('external:loncapa_mime_to_lomnsdl_TechnicalSize')"
        !          1878:              >
        !          1879:              <xsl:value-of
        !          1880:                     select="external:loncapa_mime_to_lomsdl_TechnicalSize(.)"/>
        !          1881:            </xsl:when>
        !          1882:            <xsl:otherwise>
        !          1883:     Function external:loncapa_mime_to_lomnsdl_TechnicalSize() is not available!
        !          1884:            </xsl:otherwise>
        !          1885:          </xsl:choose>
        !          1886: </Size>
        !          1887: <xsl:text>
        !          1888: </xsl:text>
        !          1889: </xsl:template>
        !          1890: 
        !          1891: <xsl:template match="loncapa:author">
        !          1892: <dc:contributor>
        !          1893:          <xsl:choose>
        !          1894:            <xsl:when
        !          1895:                  test=
        !          1896:           "function-available('external:loncapa_author_to_lomnsdl_contributor')"
        !          1897:              >
        !          1898:              <xsl:value-of
        !          1899:                     select="external:loncapa_author_to_dcnsdl_contributor(.)"/>
        !          1900:            </xsl:when>
        !          1901:            <xsl:otherwise>
        !          1902:      Function external:loncapa_author_to_dcnsdl_contributor() is not available!
        !          1903:            </xsl:otherwise>
        !          1904:          </xsl:choose>
        !          1905: </dc:contributor>
        !          1906: <xsl:text>
        !          1907: </xsl:text>
        !          1908: <dc:creator>
        !          1909:          <xsl:choose>
        !          1910:            <xsl:when
        !          1911:                  test=
        !          1912:               "function-available('external:loncapa_author_to_dcnsdl_creator')"
        !          1913:              >
        !          1914:              <xsl:value-of
        !          1915:                         select="external:loncapa_author_to_dcnsdl_creator(.)"/>
        !          1916:            </xsl:when>
        !          1917:            <xsl:otherwise>
        !          1918:          Function external:loncapa_author_to_dcnsdl_creator() is not available!
        !          1919:            </xsl:otherwise>
        !          1920:          </xsl:choose>
        !          1921: </dc:creator>
        !          1922: <xsl:text>
        !          1923: </xsl:text>
        !          1924: </xsl:template>
        !          1925: <xsl:template match="loncapa:owner">
        !          1926: <dc:publisher>
        !          1927:          <xsl:choose>
        !          1928:            <xsl:when
        !          1929:                  test=
        !          1930:              "function-available('external:loncapa_owner_to_dcnsdl_publisher')"
        !          1931:              >
        !          1932:              <xsl:value-of
        !          1933:                        select="external:loncapa_owner_to_dcnsdl_publisher(.)"/>
        !          1934:            </xsl:when>
        !          1935:            <xsl:otherwise>
        !          1936:         Function external:loncapa_owner_to_dcnsdl_publisher() is not available!
        !          1937:            </xsl:otherwise>
        !          1938:          </xsl:choose>
        !          1939: </dc:publisher>
        !          1940: <xsl:text>
        !          1941: </xsl:text>
        !          1942: </xsl:template>
        !          1943: <xsl:template match="loncapa:subject">
        !          1944: <dc:subject>
        !          1945:          <xsl:choose>
        !          1946:            <xsl:when
        !          1947:                  test=
        !          1948:              "function-available('external:loncapa_subject_to_dcnsdl_subject')"
        !          1949:              >
        !          1950:            <xsl:value-of
        !          1951:                        select="external:loncapa_subject_to_dcnsdl_subject(.)"/>
        !          1952:            </xsl:when>
        !          1953:            <xsl:otherwise>
        !          1954:         Function external:loncapa_subject_to_dcnsdl_subject() is not available!
        !          1955:            </xsl:otherwise>
        !          1956:          </xsl:choose>
        !          1957: </dc:subject>
        !          1958: <xsl:text>
        !          1959: </xsl:text>
        !          1960: </xsl:template>
        !          1961: <xsl:template match="loncapa:lastrevisiondate">
        !          1962: <dc:date>
        !          1963:          <xsl:choose>
        !          1964:            <xsl:when
        !          1965:                  test=
        !          1966:        "function-available('external:loncapa_lastrevisiondate_to_dcnsdl_date')"
        !          1967:              >
        !          1968:              <xsl:value-of select=
        !          1969:                         "external:loncapa_lastrevisiondate_to_dcnsdl_date(.)"/>
        !          1970:            </xsl:when>
        !          1971:            <xsl:otherwise>
        !          1972:   Function external:loncapa_lastrevisiondate_to_dcnsdl_date() is not available!
        !          1973:            </xsl:otherwise>
        !          1974:          </xsl:choose>
        !          1975: </dc:date>
        !          1976: <xsl:text>
        !          1977: </xsl:text>
        !          1978: </xsl:template>
        !          1979: <xsl:template match="loncapa:mime">
        !          1980: <dc:type>
        !          1981:          <xsl:choose>
        !          1982:            <xsl:when
        !          1983:                  test=
        !          1984:                    "function-available('external:loncapa_mime_to_dcnsdl_type')"
        !          1985:              >
        !          1986:              <xsl:value-of select="external:loncapa_mime_to_dcnsdl_type(.)"/>
        !          1987:            </xsl:when>
        !          1988:            <xsl:otherwise>
        !          1989:               Function external:loncapa_mime_to_dcnsdl_type() is not available!
        !          1990:            </xsl:otherwise>
        !          1991:          </xsl:choose>
        !          1992: </dc:type>
        !          1993: <xsl:text>
        !          1994: </xsl:text>
        !          1995: <dc:format>
        !          1996:          <xsl:choose>
        !          1997:            <xsl:when
        !          1998:                  test=
        !          1999:                  "function-available('external:loncapa_mime_to_dcnsdl_format')"
        !          2000:              >
        !          2001:              <xsl:value-of select="external:loncapa_mime_to_dcnsdl_format(.)"/>
        !          2002:            </xsl:when>
        !          2003:            <xsl:otherwise>
        !          2004:             Function external:loncapa_mime_to_dcnsdl_format() is not available!
        !          2005:            </xsl:otherwise>
        !          2006:          </xsl:choose>
        !          2007: </dc:format>
        !          2008: <xsl:text>
        !          2009: </xsl:text>
        !          2010: </xsl:template>
        !          2011: <xsl:template match="loncapa:uri">
        !          2012: <dc:identifier>
        !          2013:          <xsl:choose>
        !          2014:            <xsl:when
        !          2015:                  test=
        !          2016:               "function-available('external:loncapa_uri_to_dcnsdl_identifier')"
        !          2017:              >
        !          2018:              <xsl:value-of select=
        !          2019:                                "external:loncapa_uri_to_dcnsdl_identifier(.)"/>
        !          2020:            </xsl:when>
        !          2021:            <xsl:otherwise>
        !          2022:          Function external:loncapa_uri_to_dcnsdl_identifier() is not available!
        !          2023:            </xsl:otherwise>
        !          2024:          </xsl:choose>
        !          2025: </dc:identifier>
        !          2026: <xsl:text>
        !          2027: </xsl:text>
        !          2028: </xsl:template>
        !          2029: <xsl:template match="loncapa:language">
        !          2030: <dc:language>
        !          2031:          <xsl:choose>
        !          2032:            <xsl:when
        !          2033:                  test=
        !          2034:            "function-available('external:loncapa_language_to_dcnsdl_language')"
        !          2035:              >
        !          2036:              <xsl:value-of select=
        !          2037:                             "external:loncapa_language_to_dcnsdl_language(.)"/>
        !          2038:            </xsl:when>
        !          2039:            <xsl:otherwise>
        !          2040:       Function external:loncapa_language_to_dcnsdl_language() is not available!
        !          2041:            </xsl:otherwise>
        !          2042:          </xsl:choose>
        !          2043: </dc:language>
        !          2044: <xsl:text>
        !          2045: </xsl:text>
        !          2046: </xsl:template>
        !          2047: <xsl:template match="loncapa:copyright">
        !          2048: <dc:rights>
        !          2049:          <xsl:choose>
        !          2050:            <xsl:when
        !          2051:                  test=
        !          2052:             "function-available('external:loncapa_copyright_to_dcnsdl_rights')"
        !          2053:              >
        !          2054:              <xsl:value-of select=
        !          2055:                             "external:loncapa_copyright_to_dcnsdl_rights(.)"/>
        !          2056:            </xsl:when>
        !          2057:            <xsl:otherwise>
        !          2058:        Function external:loncapa_copyright_to_dcnsdl_rights() is not available!
        !          2059:            </xsl:otherwise>
        !          2060:          </xsl:choose>
        !          2061: </dc:rights>
1.2       harris41 2062: <xsl:text>
                   2063: </xsl:text>
                   2064: </xsl:template>
                   2065: </xsl:stylesheet>
                   2066: END
                   2067: close(OUT);
                   2068: 
1.6     ! harris41 2069: # =================================================== Define external functions
        !          2070: 
        !          2071: my $func = sub {
        !          2072:     my $text = shift;
        !          2073:     return uc($text);
        !          2074: };
        !          2075: 
        !          2076: my %ci=(
        !          2077:   'lomnsdl_LifeCycleContributeRole' => '',
        !          2078:   'lomnsdl_LifeCycleContributeEntity' => '',
        !          2079:   'lomnsdl_LifeCycleContributeDate' => '',
        !          2080:   'lomnsdl_LifeCycleContributeAuthor' => '',
        !          2081:   'lomnsdl_LifeCycleContributeLastAuthorDate' => '',
        !          2082:   'lomnsdl_TechnicalLocation' => '',
        !          2083:   'lomnsdl_RightsCopyrightandOtherRestrictions' => '',
        !          2084:   'lomnsdl_RightsDescription' => '',
        !          2085:   'loncapa_uri' => '',
        !          2086:   'loncapa_language' => '',
        !          2087:   'loncapa_author' => '',
        !          2088:   'loncapa_lastrevisiondate' => '',
        !          2089:   'loncapa_metauri' => '',
        !          2090:   'loncapa_copyright' => '',
        !          2091:   'loncapa_owner' => '',
        !          2092: );
        !          2093: 
        !          2094: my %xslfunctions=(
        !          2095: 
        !          2096: loncapa_title_to_dcnsdl_title => sub
        !          2097:  { my $text=shift; return $text; },
        !          2098: loncapa_author_to_dcnsdl_contributor => sub
        !          2099:  { my $text=shift; return ''; }, # This is where co-authors should be someday.
        !          2100: loncapa_author_to_dcnsdl_creator => sub
        !          2101:  { my $text=shift; return $text; },
        !          2102: loncapa_owner_to_dcnsdl_publisher => sub
        !          2103:  { my $text=shift; return $text; },
        !          2104: loncapa_subject_to_dcnsdl_subject => sub
        !          2105:  { my $text=shift; return $text; },
        !          2106: loncapa_abstract_to_dcnsdl_description => sub
        !          2107:  { my $text=shift; return $text; },
        !          2108: loncapa_lastrevisiondate_to_dcnsdl_date => sub
        !          2109:  { my $text=shift; return &loncapa_to_rfc_Date($text); },
        !          2110: loncapa_mime_to_dcnsdl_type => sub
        !          2111:  { my $text=shift; return "[unofficial: $text]"; }, # unclear conversion
        !          2112: loncapa_mime_to_dcnsdl_format => sub
        !          2113:  { my $text=shift; return "[unofficial: $text]"; }, # for now, mime suffices
        !          2114: loncapa_uri_to_dcnsdl_identifier => sub
        !          2115:  { my $text=shift; return 'LONCAPA:'.$text; }, # URI or gateway URL here?
        !          2116: loncapa_language_to_dcnsdl_language => sub
        !          2117:  { my $text=shift; return loncapa_to_ISO_language_convert($text); },
        !          2118: loncapa_copyright_to_dcnsdl_rights => sub
        !          2119:  { my $text=shift; return 'LONCAPA:'.$text; },
        !          2120: 
        !          2121: dcnsdl_title_to_loncapa_title => sub
        !          2122:  { my $text=shift; return $text; },
        !          2123: #dcnsdl_contributor_to_loncapa_author => sub    <--- contributor should go
        !          2124: # { my $text=shift; return "[notdefined: $text]"; },  <--- somewhere someday
        !          2125: dcnsdl_creator_to_loncapa_author => sub
        !          2126:  { my $text=shift; return $text; }, # should maybe have contributor as well?
        !          2127: dcnsdl_publisher_to_loncapa_owner => sub
        !          2128:  { my $text=shift; return $text; }, # assume publisher is owner
        !          2129: dcnsdl_subject_to_loncapa_subject => sub
        !          2130:  { my $text=shift; return $text; }, # DC, however, includes keywords in subject
        !          2131: dcnsdl_description_to_loncapa_abstract => sub
        !          2132:  { my $text=shift; return $text; },
        !          2133: dcnsdl_date_to_loncapa_lastrevisiondate => sub
        !          2134:  { my $text=shift; return &rfc_to_loncapa_Date($text); },
        !          2135: dcnsdl_type_to_loncapa_mime => sub
        !          2136:  { my $text=shift; return "[notdefined: $text]"; },
        !          2137: dcnsdl_format_to_loncapa_mime => sub
        !          2138:  { my $text=shift; return "[notdefined: $text]"; },
        !          2139: dcnsdl_identifier_to_loncapa_uri => sub
        !          2140:  { my $text=shift; return build_gateway_uri_pointer($text); }, # build pointer
        !          2141: dcnsdl_language_to_loncapa_language => sub
        !          2142:  { my $text=shift; return ISO_to_loncapa_language_convert($text); },
        !          2143: dcnsdl_rights_to_loncapa_copyright => sub
        !          2144:  { my $text=shift; return $text; },
        !          2145: 
        !          2146: lomnsdl_LifeCycleContribute_prepare_converter_INFO => sub
        !          2147:  {
        !          2148:    if ($ci{'lomnsdl_LifeCycleContributeRole'} eq 'author') {
        !          2149:      $ci{'lomnsdl_LifeCycleContributeAuthor'}.=
        !          2150:         $ci{'lomnsdl_LifeCycleContributeEntity'};
        !          2151:      $ci{'lomnsdl_LifeCycleContributeLastAuthorDate'}=
        !          2152:         $ci{'lomnsdl_LifeCycleContributeDate'};
        !          2153:    }
        !          2154:    $ci{'lomnsdl_LifeCycleContributeRole'}='';
        !          2155:    $ci{'lomnsdl_LifeCycleContributeEntity'}='';
        !          2156:    $ci{'lomnsdl_LifeCycleContributeDate'}='';
        !          2157:  },
        !          2158: lomnsdl_GeneralIdentifier_to_loncapa_uri => sub
        !          2159:  { my $text=shift; return build_gateway_uri_pointer($text); }, # build pointer
        !          2160: lomnsdl_GeneralTitle_to_loncapa_title => sub
        !          2161:  { my $text=shift; return $text; },
        !          2162: lomnsdl_GeneralLanguage_to_loncapa_language => sub
        !          2163:  { my $text=shift; return ISO_to_loncapa_language_convert($text); },
        !          2164: lomnsdl_GeneralDescription_to_loncapa_abstract => sub
        !          2165:  { my $text=shift; return $text; },
        !          2166: lomnsdl_GeneralKeyword_to_loncapa_keywords => sub
        !          2167:  { my $text=shift; return $text; },
        !          2168: lomnsdl_GeneralStructure_to_loncapa_structure => sub
        !          2169:  { my $text=shift; return "[unofficial: $text]"; },
        !          2170: lomnsdl_GeneralAggregationLevel_to_loncapa_aggregation => sub
        !          2171:  { my $text=shift; return "[unofficial: $text]"; },
        !          2172: lomnsdl_LifeCycleVersion_to_loncapa_version => sub
        !          2173:  { my $text=shift; return $text; },
        !          2174: lomnsdl_LifeCycleContributeRole_to_converter_INFO => sub
        !          2175:  { my $text=shift; $ci{'LifeCycleContributeRole'}=$text; return ''; },
        !          2176: lomnsdl_LifeCycleContributeEntity_to_converter_INFO => sub
        !          2177:  { my $text=shift; $ci{'LifeCycleContributeEntity'}=$text; return ''; },
        !          2178: lomnsdl_LifeCycleContributeDate_to_converter_INFO => sub
        !          2179:  { my $text=shift; $ci{'LifeCycleContributeDate'}; return ''; },
        !          2180: converter_INFO_to_loncapa_author => sub
        !          2181:  { return $ci{'lomnsdl_LifeCycleContributeAuthor'}; },
        !          2182: converter_INFO_to_loncapa_owner => sub
        !          2183:  { return $ci{'lomnsdl_RightsDescription'}; },
        !          2184: converter_INFO_to_loncapa_lastrevisiondate => sub
        !          2185:  { my $text=shift; return $ci{'lomnsdl_LifeCycleContributeLastAuthorDate'}; },
        !          2186: converter_INFO_to_loncapa_creationdate => sub
        !          2187:  { return ''; },
        !          2188: lomnsdl_MetaMetadataIdentifierCatalog_to_converterINFO => sub
        !          2189:  { my $text=shift; return "[notdefined: $text]"; },
        !          2190: lomnsdl_MetaMetadataIdentifierEntry_to_converterINFO => sub
        !          2191:  { my $text=shift; return "[notdefined: $text]"; },
        !          2192: lomnsdl_TechnicalFormat_to_loncapa_mime => sub
        !          2193:  { my $text=shift; return mimeIANA_to_mimeSuffix($text); },
        !          2194: lomnsdl_TechnicalSize_to_loncapa_bytesize => sub
        !          2195:  { my $text=shift; return $text; },
        !          2196: lomnsdl_Technical_prepare_converter_INFO => sub
        !          2197:  { $ci{'lomnsdl_TechnicalLocation'}=''; },
        !          2198: lomnsdl_TechnicalLocation_to_converter_INFO => sub
        !          2199:  { my $text=shift; return '';}, # need to store techloc with uri in server
        !          2200: lomnsdl_EducationalDescription_to_loncapa_notes => sub
        !          2201:  { my $text=shift; return $text; },
        !          2202: lomnsdl_Rights_prepare_converter_INFO => sub
        !          2203:  { $ci{'RightsCopyrightandOtherRestrictions'}='';
        !          2204:    $ci{'RightsDescription'}='';
        !          2205:  },
        !          2206: lomnsdl_RightsCopyrightandOtherRestrictions_to_converter_INFO => sub
        !          2207:  { my $text=shift; $ci{'RightsCopyrightandOtherRestrictions'}=$text;
        !          2208:    return ''; },
        !          2209: lomnsdl_RightsDescription_to_converter_INFO => sub
        !          2210:  { my $text=shift; $ci{'RightsDescription'}=$text; return ''; },
        !          2211: converter_INFO_to_loncapa_copyright => sub
        !          2212:  { if ($ci{'RightsCopyrightandOtherRestrictions'} eq 'yes') {
        !          2213:      return $ci{'RightsDescription'};
        !          2214:    }
        !          2215:    else {
        !          2216:      return '';
        !          2217:    }
        !          2218:  },
        !          2219: loncapa_uri_to_converter_INFO => sub
        !          2220:  { my $text=shift; $ci{'loncapa_uri'}=$text; return ''; },
        !          2221: converter_INFO_to_lomnsdl_GeneralIdentifier => sub
        !          2222:  { return $ci{'loncapa_uri'}; },
        !          2223: loncapa_title_to_lomnsdl_GeneralTitle => sub
        !          2224:  { my $text=shift; return $text; },
        !          2225: loncapa_language_to_converter_INFO => sub
        !          2226:  { my $text=shift; $ci{'loncapa_language'}=$text; return ''; },
        !          2227: converter_INFO_to_lomnsdl_GeneralLanguage => sub
        !          2228:  { return loncapa_to_ISO_language_convert($ci{'loncapa_language'}); },
        !          2229: loncapa_abstract_to_lomnsdl_GeneralDescription => sub
        !          2230:  { my $text=shift; return $text; },
        !          2231: loncapa_keywords_to_lomnsdl_GeneralKeyword => sub
        !          2232:  { my $text=shift; return $text; },
        !          2233: loncapa_structure_to_lomnsdl_GeneralStructure => sub
        !          2234:  { my $text=shift; return "[unofficial: $text]"; },
        !          2235: loncapa_aggregation_to_lomnsdl_GeneralAggregationLevel => sub
        !          2236:  { my $text=shift; return "[unofficial: $text]"; },
        !          2237: loncapa_version_to_lomnsdl_LifeCycleVersion => sub
        !          2238:  { my $text=shift; return $text; },
        !          2239: loncapa_author_to_converter_INFO => sub
        !          2240:  { my $text=shift; $ci{'loncapa_author'}=$text; return ''; },
        !          2241: loncapa_lastrevisiondate_to_converter_INFO => sub
        !          2242:  { my $text=shift; $ci{'loncapa_lastrevisiondate'}=$text; return ''; },
        !          2243: converter_INFO_to_lomnsdl_LifeCycleContributeEntity => sub
        !          2244:  { return $ci{'loncapa_author'}; },
        !          2245: converter_INFO_to_lomnsdl_LifeCycleContributeDate => sub
        !          2246:  { return $ci{'loncapa_lastrevisiondate'}; },
        !          2247: loncapa_metauri_to_converter_INFO => sub
        !          2248:  { my $text=shift; return "[notdefined: $text]";},
        !          2249: converter_INFO_to_lomnsdl_MetaMetadata => sub
        !          2250:  { my $text=shift; return "[notdefined: $text]"; },
        !          2251: loncapa_mime_to_lomnsdl_TechnicalFormat => sub
        !          2252:  { my $text=shift; return mimeSuffix_to_mimeIANA($text); },
        !          2253: loncapa_bytesize_to_lomnsdl_TechnicalSize => sub
        !          2254:  { my $text=shift; return $text; },
        !          2255: converter_INFO_to_lomnsdl_TechnicalLocation => sub
        !          2256:  { my $text=shift; return "[notdefined: $text]"; },
        !          2257: converter_INFO_to_lomnsdl_TechnicalRequirement => sub
        !          2258:  { my $text=shift; return "[notdefined: $text]"; },
        !          2259: converter_INFO_to_lomnsdl_TechnicalInstallationRemarks => sub
        !          2260:  { my $text=shift; return "[notdefined: $text]"; },
        !          2261: loncapa_notes_to_lomnsdl_EducationalDescription => sub
        !          2262:  { my $text=shift; return $text; },
        !          2263: converter_INFO_to_lomnsdl_EducationalLanguage => sub
        !          2264:  { my $text=shift; return "[notdefined: $text]"; },
        !          2265: loncapa_copyright_to_converter_INFO => sub
        !          2266:  { my $text=shift; return "[notdefined: $text]"; },
        !          2267: loncapa_owner_to_converter_INFO => sub
        !          2268:  { my $text=shift; return "[notdefined: $text]"; },
        !          2269: converter_INFO_to_lomnsdl_RightsDescription => sub
        !          2270:  { my $text=shift; return "[notdefined: $text]"; },
        !          2271: 
        !          2272: );
        !          2273: 
        !          2274: foreach my $fname (keys %xslfunctions) {
        !          2275:   $tr->install_function($namespace,$fname,$xslfunctions{$fname});
        !          2276: }
        !          2277: 
        !          2278: # =================================================== Executing transformations
        !          2279: 
        !          2280: my $compiled; my $parsed; my $dest_file;
        !          2281: 
        !          2282: # ---------------------------------- LON-CAPA to NSDL (Dublic Core format)
        !          2283: &query('LON-CAPA to NSDL (Dublic Core format)');
        !          2284: $compiled = $tr->compile_stylesheet_file("loncapa_to_dcnsdl.xsl");
        !          2285: $parsed = $tr->parse_file("tmp_loncapa.xml");
        !          2286: $dest_file="loncapa_to_dcnsdl.xml";
        !          2287: $tr->transform_to_file($parsed, $compiled, $dest_file)
        !          2288:     or die $tr->errstr;
        !          2289: 
        !          2290: # ---------------------------------- NSDL (Dublic Core format) to LON-CAPA
        !          2291: &query('NSDL (Dublic Core format) to LON-CAPA');
        !          2292: $compiled = $tr->compile_stylesheet_file('dcnsdl_to_loncapa.xsl');
        !          2293: $parsed = $tr->parse_file("tmp_dcnsdl.xml");
        !          2294: $dest_file="dcnsdl_to_loncapa.xml";
1.2       harris41 2295: $tr->transform_to_file($parsed, $compiled, $dest_file)
                   2296:     or die $tr->errstr;
                   2297: 
1.6     ! harris41 2298: # ---------------------------------- LON-CAPA to NSDL (IEEE LOM format)
        !          2299: &query('LON-CAPA to NSDL (IEEE LOM format)');
        !          2300: $compiled = $tr->compile_stylesheet_file("loncapa_to_lomnsdl.xsl");
        !          2301: $parsed = $tr->parse_file("tmp_loncapa.xml");
        !          2302: $dest_file="loncapa_to_lomnsdl.xml";
1.2       harris41 2303: $tr->transform_to_file($parsed, $compiled, $dest_file)
                   2304:     or die $tr->errstr;
1.1       harris41 2305: 
1.6     ! harris41 2306: # ---------------------------------- NSDL (IEEE LOM format) to LON-CAPA
        !          2307: &query('NSDL (IEEE LOM format) to LON-CAPA');
        !          2308: $compiled = $tr->compile_stylesheet_file('lomnsdl_to_loncapa.xsl');
        !          2309: $parsed = $tr->parse_file("tmp_lomnsdl.xml");
        !          2310: $dest_file="lomnsdl_to_loncapa.xml";
1.1       harris41 2311: $tr->transform_to_file($parsed, $compiled, $dest_file)
                   2312:     or die $tr->errstr;
1.6     ! harris41 2313: 
        !          2314: # ========================================================= Various subroutines
        !          2315: 
        !          2316: sub query {
        !          2317:     my ($prompt)=@_;
        !          2318:     print $prompt."\n";
        !          2319: #    my $a=<>;
        !          2320:     return;
        !          2321: }
        !          2322: 
        !          2323: sub build_gateway_uri_pointer {
        !          2324:     my ($string)=@_;
        !          2325:     return 'longatewayptr://'.$string;
        !          2326: }
        !          2327: 
        !          2328: sub loncapa_to_rfc_Date {
        !          2329:     my ($val)=@_;
        !          2330:     my $responseDate=Date::Format::time2str("%Y-%m-%dT%T%z",$val);
        !          2331:     $responseDate=~s/(..)$/\:$1/;
        !          2332:     return $responseDate;
        !          2333: }
        !          2334: 
        !          2335: sub rfc_to_loncapa_Date {
        !          2336:     my ($date)=@_;
        !          2337:     $date=~s/\:(..)$/$1/;
        !          2338:     $time = Date::Parse::str2time($date);
        !          2339:     return $time;
        !          2340: }
        !          2341: 
        !          2342: sub loncapa_to_ISO_language_convert {
        !          2343:     my ($loncapa_language)=@_;
        !          2344:     my %lhash=(
        !          2345: 	       'notset' => '  ', # Not set
        !          2346: 	       'notxxx' => '  ', # Not applicable
        !          2347: 	       'sariso' => 'AR', # Arabic - ISO
        !          2348: 	       'sarwin' => 'AR', # Arabic - Windows
        !          2349: 	       'scsiso' => 'CS', # Czech - ISO
        !          2350: 	       'scswin' => 'CS', # Czech - Windows
        !          2351: 	       'sdaiso' => 'DA', # Danish
        !          2352: 	       'sgeiso' => 'DE', # German
        !          2353: 	       'sgriso' => 'EL', # Greek - ISO
        !          2354: 	       'sgrwin' => 'EL', # Greek - Windows
        !          2355: 	       'seniso' => 'EN', # English
        !          2356: 	       'sspiso' => 'ES', # Spanish
        !          2357: 	       'setiso' => 'ET', # Estonian - ISO
        !          2358: 	       'setwin' => 'ET', # Estonian - Windows
        !          2359: 	       'sfiiso' => 'FI', # Finnish
        !          2360: 	       'sfriso' => 'FR', # French
        !          2361: 	       'scriso' => 'HR', # Croatian - ISO
        !          2362: 	       'scrwin' => 'HR', # Croatian - Windows
        !          2363: 	       'shuiso' => 'HU', # Hungarian - ISO
        !          2364: 	       'shuwin' => 'HU', # Hungarian - Windows
        !          2365: 	       'sisiso' => 'IS', # Icelandic
        !          2366: 	       'sitiso' => 'IT', # Italian
        !          2367: 	       'shebiso' => 'HE', # Hebrew - ISO
        !          2368: 	       'shebwin' => 'HE', # Hebrew - Windows
        !          2369: 	       'sjasjis' => 'JA', # Japanese - SJIS
        !          2370: 	       'sjaeuc' => 'JA', # Japanese - EUC
        !          2371: 	       'skoeuc' => 'KO', # Korean
        !          2372: 	       'sltiso' => 'LT', # Lithuanian - ISO
        !          2373: 	       'sltwin' => 'LT', # Lithuanian - Windows
        !          2374: 	       'slviso' => 'LV', # Latvian - ISO
        !          2375: 	       'slvwin' => 'LV', # Latvian - Windows
        !          2376: 	       'sduiso' => 'NL', # Dutch
        !          2377: 	       'snoiso' => 'NO', # Norwegian
        !          2378: 	       'spliso' => 'PL', # Polish - ISO
        !          2379: 	       'splwin' => 'PL', # Polish - Windows
        !          2380: 	       'sptiso' => 'PT', # Portuguese
        !          2381: 	       'sroiso' => 'RO', # Romanian - ISO
        !          2382: 	       'srowin' => 'RO', # Romanian - Windows
        !          2383: 	       'sruiso' => 'RU', # Russian - ISO
        !          2384: 	       'sruwin' => 'RU', # Russian - Windows
        !          2385: 	       'srukoi' => 'RU', # Russian - KOI
        !          2386: 	       'sskiso' => 'SK', # Slovak - ISO
        !          2387: 	       'sskwin' => 'SK', # Slovak - Windows
        !          2388: 	       'ssliso' => 'SL', # Slovenian - ISO
        !          2389: 	       'sslwin' => 'SL', # Slovenian - Windows
        !          2390: 	       'ssviso' => 'SV', # Swedish
        !          2391: 	       'striso' => 'TR', # Turkish - ISO
        !          2392: 	       'strwin' => 'TR', # Turkish - Windows
        !          2393: 	       'schbig5' => 'ZH', # Chinese - BIG5
        !          2394: 	       'scheuc' => 'ZH', Chinese - GB
        !          2395: 	       );
        !          2396:     my $iso_language=$lhash{$loncapa_language};
        !          2397:     return $iso_language;
        !          2398: }
        !          2399: 
        !          2400: sub mimeIANA_to_mimeSuffix {
        !          2401:     my ($text)=@_;
        !          2402:     return "[unofficial: $text]";
        !          2403: }
        !          2404: 
        !          2405: sub mimeSuffix_to_mimeIANA {
        !          2406:     my ($text)=@_;
        !          2407:     return "[unofficial: $text]";
        !          2408: }
        !          2409: 
        !          2410: sub ISO_to_loncapa_language_convert {
        !          2411:     my ($iso_language)=@_;
        !          2412:     my %lhash=(
        !          2413: 	       '  ' => 'notset', # Not set
        !          2414: 	       'AR' => 'sariso', # Arabic - ISO
        !          2415: 	       'CS' => 'scsiso', # Czech - ISO
        !          2416: 	       'DA' => 'sdaiso', # Danish
        !          2417: 	       'DE' => 'sgeiso', # German
        !          2418: 	       'EL' => 'sgriso', # Greek - ISO
        !          2419: 	       'EN' => 'seniso', # English
        !          2420: 	       'ES' => 'sspiso', # Spanish
        !          2421: 	       'ET' => 'setiso', # Estonian - ISO
        !          2422: 	       'FI' => 'sfiiso', # Finnish
        !          2423: 	       'FR' => 'sfriso', # French
        !          2424: 	       'HR' => 'scriso', # Croatian - ISO
        !          2425: 	       'HU' => 'shuiso', # Hungarian - ISO
        !          2426: 	       'IS' => 'sisiso', # Icelandic
        !          2427: 	       'IT' => 'sitiso', # Italian
        !          2428: 	       'HE' => 'shebiso', # Hebrew - ISO
        !          2429: 	       'JA' => 'sjasjis', # Japanese - SJIS
        !          2430: 	       'KO' => 'skoeuc', # Korean
        !          2431: 	       'LT' => 'sltiso', # Lithuanian - ISO
        !          2432: 	       'LV' => 'slviso', # Latvian - ISO
        !          2433: 	       'NL' => 'sduiso', # Dutch
        !          2434: 	       'NO' => 'snoiso', # Norwegian
        !          2435: 	       'PL' => 'spliso', # Polish - ISO
        !          2436: 	       'PT' => 'sptiso', # Portuguese
        !          2437: 	       'RO' => 'sroiso', # Romanian - ISO
        !          2438: 	       'RU' => 'sruiso', # Russian - ISO
        !          2439: 	       'RU' => 'srukoi', # Russian - KOI
        !          2440: 	       'SK' => 'sskiso', # Slovak - ISO
        !          2441: 	       'SL' => 'ssliso', # Slovenian - ISO
        !          2442: 	       'SV' => 'ssviso', # Swedish
        !          2443: 	       'TR' => 'striso', # Turkish - ISO
        !          2444: 	       'ZH' => 'schbig5', # Chinese - BIG5
        !          2445: 	       );
        !          2446:     my $loncapa_language=$lhash{uc($iso_language)};
        !          2447:     if (!length($loncapa_language)) {$loncapa_language='notset';}
        !          2448:     return $loncapa_language;
        !          2449: }
        !          2450: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>