Index: openacs-4/packages/lors/tcl/lors-imsmd-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lors/tcl/lors-imsmd-procs.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/lors/tcl/lors-imsmd-procs.tcl 17 Oct 2008 10:35:28 -0000 1.10 +++ openacs-4/packages/lors/tcl/lors-imsmd-procs.tcl 17 Nov 2008 13:35:03 -0000 1.11 @@ -29,7 +29,6 @@ @param doc Document @param attr_name Attribute we want to fetch - } { if {[$doc hasAttribute $attr_name] == 1} { $doc getAttribute $attr_name @@ -38,6 +37,7 @@ } } + ad_proc -public HasPrefix { {tree} } { @@ -49,14 +49,15 @@ } { set prefix [$tree prefix] return $prefix - } - + } + + ad_proc -public hasMetadata { {tree} } { Checks if the XML node contains a metadata element returns 1 if true; 0 if false. - Later addition: checks also if the metadata record has + Later addition: checks also if the metadata record has child nodes } { if { ![empty_string_p [$tree child all metadata]] } { @@ -69,7 +70,8 @@ return 0 } } - + + ad_proc -public getMDNode { {tree} } { @@ -81,6 +83,7 @@ return [$tree child all metadata] } + ad_proc -public getMDSchema { {tree} } { @@ -97,15 +100,17 @@ if { ![empty_string_p [$tree child all schema]] } { lappend retlist [getElement [$tree child all schema] asXML] } + if { ![empty_string_p [$tree child all schemaversion]] } { - lappend retlist [getElement [$tree child all schemaversion]] + lappend retlist [getElement [$tree child all schemaversion]] } return $retlist } else { return [list 0 0] } } + ad_proc -public getLOM { {tree} {dir} @@ -125,24 +130,30 @@ set var_lom "lom" set prefix "" set lom [$tree child all $var_lom] + } elseif { ![empty_string_p [$tree child all imsmd:lom]] } { set var_lom "imsmd:lom" set prefix [[$tree child all imsmd:lom] prefix] set lom [$tree child all $var_lom] + } elseif { ![empty_string_p [$tree child all record]] } { - # used mostly for IMS Metadata + # used mostly for IMS Metadata set var_lom "record" set prefix "" set lom [$tree child all $var_lom] + } elseif { ![empty_string_p [$tree child all imsmd:record]] } { - # used mostly for IMS Metadata + # used mostly for IMS Metadata set var_lom "imsmd:record" set prefix [[$tree child all imsmd:record] prefix] set lom [$tree child all $var_lom] + } elseif { ![empty_string_p [$tree child all adlcp:location]] } { - set doc [dom parse [::tDOM::xmlReadFile $dir/[ns_urldecode [[$tree child all adlcp:location] text]]]] - set lom [$doc documentElement] + set doc [dom parse [::tDOM::xmlReadFile $dir/[ns_urldecode \ + [[$tree child all adlcp:location] text]]]] + set lom [$doc documentElement] set prefix [$lom prefix] + } else { set lom 0 set prefix 0 @@ -152,7 +163,8 @@ return 0 } } - + + # xmlExtractor extras ad_proc -public xmlExtractor { {element} @@ -163,7 +175,7 @@ } { XML Metadata extractor This is the key MD extractor. - + It uses some different datatypes to extract MD: datatype1 = langstrings @@ -177,7 +189,7 @@ @param element @param tree @param prefix - @param datatype + @param datatype @param att @author Ernie Ghiglione (ErnieG@mm.st) @@ -187,6 +199,7 @@ } else { set md_g_title [$tree child all $prefix:$element] } + if { ![empty_string_p $md_g_title] } { set retlist [list] if {$datatype == 1} { @@ -195,36 +208,42 @@ set retlist "$retlist [getLangStr $one $prefix]" } return $retlist + } elseif {$datatype == 2} { foreach one $md_g_title { #get sources and values set retlist "$retlist [getSourceValue $one $prefix]" } return $retlist + } elseif {$datatype == 3} { foreach one $md_g_title { #get catalogentry set retlist "$retlist [getCatalogEntry $one $prefix]" } return $retlist + } elseif {$datatype == 4} { foreach one $md_g_title { #get date set retlist "$retlist [getDate $one $prefix]" } return $retlist + } elseif {$datatype == 5} { foreach one $md_g_title { #get person / Vcard set retlist "$retlist [getVcard $one $prefix]" } return $retlist + } elseif {$datatype == 6} { foreach one $md_g_title { #get element attribute only. set retlist "$retlist [getAtt $one $att]" } return $retlist + } else { foreach one $md_g_title { #get simple element @@ -233,12 +252,10 @@ return $retlist } } - } ### Datatypes ad_procedures - ad_proc -public getLangStr { {tree} {prefix {}} @@ -255,6 +272,7 @@ } else { set var "langstring" } + set aa [list] set ab [list] set mult 0 @@ -265,13 +283,15 @@ lappend ab $aa incr mult } + if { $mult > 1} { return $ab } else { return $ab } } + ad_proc -public getSourceValue { {tree} {prefix {}} @@ -286,16 +306,19 @@ if { ![empty_string_p $prefix] } { set var_source "$prefix:source" set var_value "$prefix:value" + } else { set var_source "source" set var_value "value" } + set source [$tree child all $var_source] set sv [list] if { ![empty_string_p $source] } { #Gets all the langstrings set sv "$sv [getLangStr $source $prefix]" } + set value [$tree child all $var_value] if { ![empty_string_p $value] } { #Gets all the langstrings @@ -306,8 +329,8 @@ ad_proc -public getCatalogEntry { - {tree} - {prefix {}} + {tree} + {prefix {}} } { Datatype CatalogEntry extractor @@ -319,16 +342,19 @@ if { ![empty_string_p $prefix] } { set var_catalog "$prefix:catalog" set var_entry "$prefix:entry" + } else { set var_catalog "catalog" set var_entry "entry" } + set catalog [$tree child all $var_catalog] set ce [list] if { ![empty_string_p $catalog] } { #Gets all the langstrings set ce "$ce [getElement $catalog $prefix]" } + set entry [$tree child all $var_entry] if { ![empty_string_p $entry] } { #Gets all the langstrings @@ -337,9 +363,10 @@ return [list $ce] } + ad_proc -public getDate { - {tree} - {prefix {}} + {tree} + {prefix {}} } { Datatype Date @@ -351,16 +378,19 @@ if { ![empty_string_p $prefix] } { set var_datetime "$prefix:datetime" set var_description "$prefix:description" + } else { set var_datetime "datetime" set var_description "description" } + set datetime [$tree descendant all $var_datetime] set dt "" if { ![empty_string_p $datetime] } { #Gets all the langstrings set dt [getElement $datetime $prefix] } + set description [$tree descendant all $var_description] if { ![empty_string_p $description] } { #Gets all the langstrings @@ -370,11 +400,10 @@ } - ad_proc -public getElement { - {tree} - {prefix {}} - {att {}} + {tree} + {prefix {}} + {att {}} } { Datatype Element extractor @@ -408,13 +437,14 @@ } else { set var_vcard "vcard" } - + foreach child [$tree child all $var_vcard] { set aa "[$child text]" } return [list $aa] } - + + ## Special Datatypes ad_procedures ad_proc -public getTaxon { {tree} @@ -428,28 +458,26 @@ } { if { ![empty_string_p $prefix] } { set var_taxon $prefix:taxon - } else { set var_taxon taxon } - + set taxon [$tree child all $var_taxon] - if { ![empty_string_p $taxon]} { set taxons $taxon foreach one $taxon { if { ![empty_string_p [$one descendant all $var_taxon]] } { set taxons "$taxons [getTaxon $one $prefix]" - } + } return $taxons } } } ad_proc -public getContribute { - {tree} - {prefix {}} + {tree} + {prefix {}} } { Special extraction of Contributors @@ -463,12 +491,14 @@ set var_role "$prefix:role" set var_centity "$prefix:centity" set var_date "$prefix:date" + } else { set var_contribute "contribute" set var_role "role" set var_centity "centity" set var_date "date" } + set lom_lc_contribute [$tree child all $var_contribute] if { ![empty_string_p $lom_lc_contribute] } { set cont_list [list] @@ -477,6 +507,7 @@ if { ![empty_string_p $role] } { set cont_x [xmlExtractor role $contribute $prefix 2] } + set centity [$contribute child all $var_centity] if { ![empty_string_p $centity] } { set cc [list] @@ -485,6 +516,7 @@ } set cont_x "$cont_x [list $cc]" } + set date [$contribute child all $var_date] if { ![empty_string_p $date] } { set cont_x "$cont_x [list [xmlExtractor date $contribute $prefix 4]]" @@ -495,9 +527,10 @@ } } + ad_proc -public getRequirement { - {tree} - {prefix {}} + {tree} + {prefix {}} } { Gets requirements @@ -511,7 +544,7 @@ } else { set var_requirement "requirement" } - + set lom_te_req [$tree child all $var_requirement] if { ![empty_string_p $lom_te_req] } { # there could be multiple req @@ -527,6 +560,7 @@ } } + ad_proc -public namechild { {a} } { @@ -535,27 +569,26 @@ } { set lix {} foreach node $a { - foreach child [$node child all] {lappend lix [$child localName] [$child prefix]} + foreach child [$node child all] { + lappend lix [$child localName] [$child prefix] + } } return $lix } - ## Metadata extractor function - - ad_proc -public mdGeneral { {-element:required} {-node:required} {-prefix {}} {-att {}} - } { + } { General Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -566,42 +599,43 @@ } else { set lom_g [$node child all general] } + if { ![empty_string_p $lom_g] } { set retlist [list] switch $element { title { #gets title set retlist [xmlExtractor title $lom_g $prefix 1] - } - catalogentry { + + } catalogentry { #gets catalogentry set retlist [xmlExtractor catalogentry $lom_g $prefix 3] - } - language { + + } language { #gets language set retlist [xmlExtractor language $lom_g $prefix] - } - description { + + } description { #gets description set retlist [xmlExtractor description $lom_g $prefix 1] - } - keyword { + + } keyword { #gets keyword set retlist [xmlExtractor keyword $lom_g $prefix 1] - } - coverage { + + } coverage { #gets coverage set retlist [xmlExtractor coverage $lom_g $prefix 1] - } - structure { + + } structure { #gets structure set retlist [xmlExtractor structure $lom_g $prefix 2] - } - aggregationlevel { + + } aggregationlevel { #gets aggregationlevel set retlist [xmlExtractor aggregationlevel $lom_g $prefix 2] - } - default { + + } default { return 0 } } @@ -610,18 +644,19 @@ return 0 } + ad_proc -public mdLifeCycle { {-element:required} {-node:required} {-prefix {}} {-att {}} - } { + } { Life Cycle Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -632,22 +667,23 @@ } else { set lom_lc [$node child all lifecycle] } + if { ![empty_string_p $lom_lc] } { set retlist [list] switch $element { version { #gets version set retlist [xmlExtractor version $lom_lc $prefix 1] - } - status { + + } status { #gets status set retlist [xmlExtractor status $lom_lc $prefix 2] - } - contribute { + + } contribute { #gets contribute set retlist [getContribute $lom_lc $prefix] - } - default { + + } default { return 0 } } @@ -656,25 +692,26 @@ return 0 } + ad_proc -public mdMetadata { {-element:required} {-node:required} {-prefix {}} {-att {}} - } { + } { Meta Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) } { if { ![empty_string_p $prefix] } { - set lom_md [$node child all $prefix:metametadata] + set lom_md [$node child all $prefix:metametadata] } else { set lom_md [$node child all metametadata] } @@ -684,16 +721,16 @@ contribute { #gets contribute set retlist [getContribute $lom_md $prefix] - } - catalogentry { + + } catalogentry { #get catalogentry set retlist [xmlExtractor catalogentry $lom_md $prefix 3] - } - metadatascheme { + + } metadatascheme { #get metadatascheme set retlist [xmlExtractor metadatascheme $lom_md $prefix] - } - language { + + } language { #get language set retlist [xmlExtractor language $lom_md $prefix] } @@ -709,13 +746,13 @@ {-node:required} {-prefix {}} {-att {}} - } { + } { Technical Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -732,32 +769,32 @@ format { #gets format set retlist [xmlExtractor format $lom_te $prefix] - } - location { + + } location { #gets location set retlist [xmlExtractor location $lom_te $prefix 0 type] - } - requirement { + + } requirement { #gets requiremets set retlist [getRequirement $lom_te $prefix] - } - size { + + } size { #gets size set retlist [xmlExtractor size $lom_te $prefix 0] - } - installationremarks { + + } installationremarks { #gets installationremarks set retlist [xmlExtractor installationremarks $lom_te $prefix 1] - } - otherplatformrequirements { + + } otherplatformrequirements { #gets otherplatformrequirements set retlist [xmlExtractor otherplatformrequirements $lom_te $prefix 1] - } - duration { + + } duration { #gets duration set retlist [xmlExtractor duration $lom_te $prefix 4] - } - default { + + } default { return 0 } } @@ -772,13 +809,13 @@ {-node:required} {-prefix {}} {-att {}} - } { + } { Educational Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -794,70 +831,74 @@ switch $element { interactivitytype { #gets format - set retlist [xmlExtractor interactivitytype $lom_ed $prefix 2] - } - learningresourcetype { + set retlist [xmlExtractor interactivitytype \ + $lom_ed $prefix 2] + + } learningresourcetype { #gets learningresourcetype - set retlist [xmlExtractor learningresourcetype $lom_ed $prefix 2] - } - interactivitylevel { + set retlist [xmlExtractor learningresourcetype \ + $lom_ed $prefix 2] + + } interactivitylevel { #gets interactivitylevel - set retlist [xmlExtractor interactivitylevel $lom_ed $prefix 2] - } - semanticdensity { + set retlist [xmlExtractor interactivitylevel \ + $lom_ed $prefix 2] + + } semanticdensity { #gets semanticdensity set retlist [xmlExtractor semanticdensity $lom_ed $prefix 2] - } - intendedenduserrole { + + } intendedenduserrole { #gets intendedenduserrole - set retlist [xmlExtractor intendedenduserrole $lom_ed $prefix 2] - } - context { + set retlist [xmlExtractor intendedenduserrole \ + $lom_ed $prefix 2] + + } context { #gets context set retlist [xmlExtractor context $lom_ed $prefix 2] - } - typicalagerange { + + } typicalagerange { #gets typicalagerange set retlist [xmlExtractor typicalagerange $lom_ed $prefix 1] - } - difficulty { + + } difficulty { #gets difficulty set retlist [xmlExtractor difficulty $lom_ed $prefix 2] - } - typicallearningtime { + + } typicallearningtime { #gets typicallearningtime set retlist [xmlExtractor typicallearningtime $lom_ed $prefix 4] - } - description { + + } description { #gets description set retlist [xmlExtractor description $lom_ed $prefix 1] - } - language { + + } language { #gets language set retlist [xmlExtractor language $lom_ed $prefix] - } - default { + + } default { return 0 } } return $retlist } return 0 } - + ad_proc -public mdRights { {-element:required} {-node:required} {-prefix {}} {-att {}} - } { + } { Rights Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 @param element element to retrieve - @param node Node + @param node Node @param prefix Prefix @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -868,40 +909,42 @@ } else { set lom_ri [$node child all rights] } + if { ![empty_string_p $lom_ri] } { set retlist [list] switch $element { cost { #gets cost set retlist [xmlExtractor cost $lom_ri $prefix 2] - } - copyrightandotherrestrictions { + + } copyrightandotherrestrictions { #gets copyrightandotherrestrictions - set retlist [xmlExtractor copyrightandotherrestrictions $lom_ri $prefix 2] - } - description { + set retlist [xmlExtractor copyrightandotherrestrictions \ + $lom_ri $prefix 2] + + } description { #gets description set retlist [xmlExtractor description $lom_ri $prefix 1] - } - default { + + } default { return 0 } } return $retlist } return 0 } - + ad_proc -public mdRelation { {-node:required} {-prefix {}} - } { + } { Relation Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 - @param node Node + @param node Node @param prefix Prefix @author Ernie Ghiglione (ErnieG@mm.st) @@ -911,6 +954,7 @@ } else { set lom_re [$node child all relation] } + if { ![empty_string_p $lom_re] } { set retlist [list] foreach relation $lom_re { @@ -923,16 +967,19 @@ } else { set resource [$relation child all resource] } + #printx "Resource ([llength $resource]) " $resource foreach res $resource { # gets resource description - set aa "$aa {[lors::imsmd::xmlExtractor description $res $prefix 1]}" + set aa "$aa {[lors::imsmd::xmlExtractor description + $res $prefix 1]}" # gets resource catalogentry - set aa "$aa {[lors::imsmd::xmlExtractor catalogentry $res $prefix 3]}" + set aa "$aa {[lors::imsmd::xmlExtractor catalogentry + $res $prefix 3]}" } lappend retlist $aa } - return $retlist + return $retlist } return 0 } @@ -941,12 +988,12 @@ ad_proc -public mdAnnotation { {-node:required} {-prefix {}} - } { + } { Annotation Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 - @param node Node + @param node Node @param prefix Prefix @author Ernie Ghiglione (ErnieG@mm.st) @@ -956,6 +1003,7 @@ } else { set lom_an [$node child all annotation] } + if { ![empty_string_p $lom_an] } { set retlist [list] foreach annotation $lom_an { @@ -967,24 +1015,23 @@ set aa "$aa {[lors::imsmd::xmlExtractor description $annotation $prefix 1]}" lappend retlist $aa } - return $retlist + return $retlist } return 0 } - + ad_proc -public mdClassification { {-node:required} {-prefix {}} - } { + } { Classification Metadata extractor returns a list with the attributes and elements if it doesn't exists returns 0 - @param node Node + @param node Node @param prefix Prefix @author Ernie Ghiglione (ErnieG@mm.st) - } { if { ![empty_string_p $prefix] } { set lom_cl [$node child all $prefix:classification] @@ -997,20 +1044,21 @@ foreach classification $lom_cl { #gets purpose set aa "{[lors::imsmd::xmlExtractor purpose $classification $prefix 2]}" - + #gets description set aa "$aa {[lors::imsmd::xmlExtractor description $classification $prefix 1]}" - + #gets taxonpath if { ![empty_string_p $prefix] } { set tax [$classification child all $prefix:taxonpath] } else { set tax [$classification child all taxonpath] } + foreach taxonpath $tax { # gets source set bb [lors::imsmd::xmlExtractor source $taxonpath $prefix 1] - + # gets taxons if { ![empty_string_p [lors::imsmd::getTaxon $taxonpath $prefix]] } { set hierarchy 0 @@ -1027,16 +1075,15 @@ } # gets keywords set dd "{[lors::imsmd::xmlExtractor keyword $classification $prefix 1]}" - + lappend retlist "{$aa [list $bbcc] $dd}" } - return $retlist + return $retlist } return 0 } - ad_proc -public getResource { {-node:required} {-att:required} @@ -1045,7 +1092,7 @@ -node the XML node -att the attribute to be extracted - @param node Node + @param node Node @param att Attribute @author Ernie Ghiglione (ErnieG@mm.st) @@ -1054,25 +1101,26 @@ scormtype { # gets the type of resource return [string tolower [lors::imsmd::getAtt $node adlcp:scormtype]] - } - identifier { + + } identifier { # gets identifier return [lors::imsmd::getAtt $node identifier] - } - type { + + } type { # gets type return [lors::imsmd::getAtt $node type] - } - href { + + } href { # gets href return [lors::imsmd::getAtt $node href] - } - files { + + } files { set files [list] # gets files set filex [$node child all file] if { ![empty_string_p $filex] } { foreach file $filex { + # checks for file metadata set file_hasmetadata [lors::imsmd::hasMetadata $file] if {$file_hasmetadata == 1} { @@ -1082,12 +1130,15 @@ #otherwise, just pass 0 (No metadata found) set file_hasmetadata 0 } - lappend files [list [lors::imsmd::getAtt $file href] $file_hasmetadata] + + lappend files [list \ + [lors::imsmd::getAtt $file href] \ + $file_hasmetadata] } } return $files - } - dependencies { + + } dependencies { set dependencies [list] # gets dependencies set depende [$node child all dependency] @@ -1097,42 +1148,40 @@ } } return $dependencies - } - default { + + } default { return [lors::imsmd::getAtt $node $att] } } } - - - + + ad_proc -public getItem { - {tree} + {tree} } { Extracts data from resource\item - @param tree Node + @param tree Node @author Ernie Ghiglione (ErnieG@mm.st) } { set itemx [$tree child all item] - + if { ![empty_string_p $itemx] } { set items [list] foreach itemx [$tree child all item] { - # gets item identifier printx "item identifier: " [getAtt $itemx identifier] - + # gets item identifierref printx "item identifierref: " [getAtt $itemx identifierref] - + # gets item isvisible ? printx "item isvisible: " [getAtt $itemx isvisible] - + # gets item title printx "item title: " [getElement [$itemx child all title]] - + set itemxx [$itemx child all item] if { ![empty_string_p $itemxx] } { printx "
" " "
@@ -1145,1108 +1194,1148 @@
ad_proc -public addLOM {
- {-lom:required}
- {-prefix}
- {-acs_object:required}
- {-dir {}}
+ {-lom:required}
+ {-prefix}
+ {-acs_object:required}
+ {-dir {}}
} {
- Adds LOM metadata for a learning resource.
- This is the master function for adding metadata.
- This is the MD mama function for entering LOM into the db.
+ Adds LOM metadata for a learning resource.
+ This is the master function for adding metadata.
+ This is the MD mama function for entering LOM into the db.
- @param lom the LOM node (XML) for the learning resource
- @param acs_object acs object for resource (element) that contains metadata
- @param dir dir directory where the imsmanifest.xml file is located. This is use in the case the metadata is in a different file location (adlcp:location).
- @author Ernie Ghiglione (ErnieG@mm.st)
+ @param lom the LOM node (XML) for the learning resource
+ @param acs_object acs object for resource (element) that contains metadata
+ @param dir dir directory where the imsmanifest.xml file is located. \
+ This is use in the case the metadata is in a different file \
+ location (adlcp:location).
+ @author Ernie Ghiglione (ErnieG@mm.st)
} {
- set p_ims_md_id $acs_object
- set path_to_file $dir
+ set p_ims_md_id $acs_object
+ set path_to_file $dir
-# db_transaction {
- # General
+ # General
- # Title
- set titles [lors::imsmd::mdGeneral -element title -node $lom -prefix $prefix]
+ # Title
+ set titles [lors::imsmd::mdGeneral -element title -node $lom -prefix $prefix]
- # Structure
- set structure_s [lindex [lindex [lindex [lors::imsmd::mdGeneral -element structure -node $lom -prefix $prefix] 0] 0] 1]
- set structure_v [lindex [lindex [lindex [lors::imsmd::mdGeneral -element structure -node $lom -prefix $prefix] 0] 1] 1]
+ # Structure
+ set structure_s [lindex \
+ [lindex \
+ [lindex [lors::imsmd::mdGeneral \
+ -element structure \
+ -node $lom \
+ -prefix $prefix] 0] 0] 1]
+ set structure_v [lindex \
+ [lindex \
+ [lindex [lors::imsmd::mdGeneral \
+ -element structure \
+ -node $lom \
+ -prefix $prefix] 0] 1] 1]
- # Aggregation level
- set agg_level_s [lindex [lindex [lindex [lors::imsmd::mdGeneral -element aggregationlevel -node $lom -prefix $prefix] 0] 0] 1]
- set agg_level_v [lindex [lindex [lindex [lors::imsmd::mdGeneral -element aggregationlevel -node $lom -prefix $prefix] 0] 1] 1]
+ # Aggregation level
+ set agg_level_s [lindex \
+ [lindex \
+ [lindex [lors::imsmd::mdGeneral \
+ -element aggregationlevel \
+ -node $lom \
+ -prefix $prefix] 0] 0] 1]
- # Catalogentry
- set catalogentries [lors::imsmd::mdGeneral -element catalogentry -node $lom -prefix $prefix]
+ set agg_level_v [lindex \
+ [lindex \
+ [lindex [lors::imsmd::mdGeneral \
+ -element aggregationlevel \
+ -node $lom \
+ -prefix $prefix] 0] 1] 1]
- # Languages
- set languages [lors::imsmd::mdGeneral -element language -node $lom -prefix $prefix]
-
- # Descriptions
- set descriptions [lors::imsmd::mdGeneral -element description -node $lom -prefix $prefix]
+ # Catalogentry
+ set catalogentries [lors::imsmd::mdGeneral \
+ -element catalogentry \
+ -node $lom \
+ -prefix $prefix]
- # Keywords
- set keywords [lors::imsmd::mdGeneral -element keyword -node $lom -prefix $prefix]
+ # Languages
+ set languages [lors::imsmd::mdGeneral \
+ -element language \
+ -node $lom \
+ -prefix $prefix]
- # Coverages
- set coverages [lors::imsmd::mdGeneral -element coverage -node $lom -prefix $prefix]
+ # Descriptions
+ set descriptions [lors::imsmd::mdGeneral \
+ -element description \
+ -node $lom \
+ -prefix $prefix]
- # Now we insert the values into the DB
- db_dml add_new_general {
- insert into ims_md_general (ims_md_id, structure_s, structure_v, agg_level_s, agg_level_v)
- values
- (:p_ims_md_id, :structure_s, :structure_v, :agg_level_s, :agg_level_v)
- }
+ # Keywords
+ set keywords [lors::imsmd::mdGeneral \
+ -element keyword \
+ -node $lom \
+ -prefix $prefix]
+ # Coverages
+ set coverages [lors::imsmd::mdGeneral \
+ -element coverage \
+ -node $lom \
+ -prefix $prefix]
- # Adds General Titles
+ # Now we insert the values into the DB
+ db_dml add_new_general {
+ insert into ims_md_general (ims_md_id, structure_s, structure_v, agg_level_s, agg_level_v)
+ values (:p_ims_md_id, :structure_s, :structure_v, :agg_level_s, :agg_level_v)
+ }
- foreach title $titles {
- set p_ims_md_ge_ti_id [db_nextval ims_md_general_title_seq]
- set p_title_l [lindex $title 0]
- set p_title_s [lindex $title 1]
-
- db_dml add_new_general_titles {
- insert into ims_md_general_title (ims_md_ge_ti_id, ims_md_id, title_l, title_s)
- values
- (:p_ims_md_ge_ti_id, :p_ims_md_id, :p_title_l, :p_title_s)
- }
- }
+ # Adds General Titles
- # Adds General Catalog Entries
- foreach catalogentry $catalogentries {
- set p_ims_md_ge_cata_id [db_nextval ims_md_general_cata_seq]
- set p_catalog [lindex $catalogentry 0]
- set p_entry_l [lindex [lindex $catalogentry 1] 0]
- set p_entry_s [lindex [lindex $catalogentry 1] 1]
-
- db_dml add_new_general_catalogentries {
-
- insert into ims_md_general_cata (ims_md_ge_cata_id, ims_md_id, catalog, entry_l, entry_s)
- values
- (:p_ims_md_ge_cata_id, :p_ims_md_id, :p_catalog, :p_entry_l, :p_entry_s)
- }
- }
+ foreach title $titles {
+ set p_ims_md_ge_ti_id [db_nextval ims_md_general_title_seq]
+ set p_title_l [lindex $title 0]
+ set p_title_s [lindex $title 1]
- # Adds General Languages
- foreach language $languages {
- set p_ims_md_ge_lang_id [db_nextval ims_md_general_lang_seq]
+ db_dml add_new_general_titles {
+ insert into ims_md_general_title (ims_md_ge_ti_id, ims_md_id, title_l, title_s)
+ values (:p_ims_md_ge_ti_id, :p_ims_md_id, :p_title_l, :p_title_s)
+ }
- db_dml add_new_general_language {
- insert into ims_md_general_lang (ims_md_ge_lang_id, ims_md_id, language)
- values
- (:p_ims_md_ge_lang_id, :p_ims_md_id, :language)
- }
- }
+ }
- # Adds General Description
- foreach description $descriptions {
- set p_ims_md_ge_desc_id [db_nextval ims_md_general_desc_seq]
- set p_descrip_l [lindex $description 0]
- set p_descrip_s [lindex $description 1]
-
- db_dml add_new_general_description {
- insert into ims_md_general_desc (ims_md_ge_desc_id, ims_md_id, descrip_l, descrip_s)
- values
- (:p_ims_md_ge_desc_id, :p_ims_md_id, :p_descrip_l, :p_descrip_s)
- }
- }
-
- # Adds General Keywords
- foreach keyword $keywords {
- set p_ims_md_ge_key_id [db_nextval ims_md_general_key_seq]
- set p_keyword_l [lindex $keyword 0]
- set p_keyword_s [lindex $keyword 1]
-
- db_dml add_new_general_keyword {
- insert into ims_md_general_key (ims_md_ge_key_id, ims_md_id, keyword_l, keyword_s)
- values
- (:p_ims_md_ge_key_id, :p_ims_md_id, :p_keyword_l, :p_keyword_s)
- }
- }
+ # Adds General Catalog Entries
+ foreach catalogentry $catalogentries {
+ set p_ims_md_ge_cata_id [db_nextval ims_md_general_cata_seq]
+ set p_catalog [lindex $catalogentry 0]
+ set p_entry_l [lindex [lindex $catalogentry 1] 0]
+ set p_entry_s [lindex [lindex $catalogentry 1] 1]
- # Adds General Coverage
- foreach coverage $coverages {
- set p_ims_md_ge_cove_id [db_nextval ims_md_general_cover_seq]
- set p_cover_l [lindex $coverage 0]
- set p_cover_s [lindex $coverage 1]
-
- db_dml add_new_general_coverage {
- insert into ims_md_general_cover (ims_md_ge_cove_id, ims_md_id, cover_l, cover_s)
- values
- (:p_ims_md_ge_cove_id, :p_ims_md_id, :p_cover_l, :p_cover_s)
- }
- }
+ db_dml add_new_general_catalogentries {
+ insert into ims_md_general_cata (ims_md_ge_cata_id, ims_md_id, catalog, entry_l, entry_s)
+ values (:p_ims_md_ge_cata_id, :p_ims_md_id, :p_catalog, :p_entry_l, :p_entry_s)
+ }
+ }
- # Lifecycle
+ # Adds General Languages
+ foreach language $languages {
+ set p_ims_md_ge_lang_id [db_nextval ims_md_general_lang_seq]
- # Version
- set version [lors::imsmd::mdLifeCycle -element version -node $lom -prefix $prefix]
- set version_l [lindex [lindex $version 0] 0]
- set version_s [lindex [lindex $version 0] 1]
-
- # Status
- set status [lors::imsmd::mdLifeCycle -element status -node $lom -prefix $prefix]
- set status_s [lindex [lindex [lindex $status 0] 0] 1]
- set status_v [lindex [lindex [lindex $status 0] 1] 1]
-
- # Contribute
- set contributes [lors::imsmd::mdLifeCycle -element contribute -node $lom -prefix $prefix]
-
- # Adds Lifecycle Version and Status
- db_dml add_new_lifecycle {
- insert into ims_md_life_cycle (ims_md_id, version_l, version_s, status_s, status_v)
- values
- (:p_ims_md_id, :version_l, :version_s, :status_s, :status_v)
- }
+ db_dml add_new_general_language {
+ insert into ims_md_general_lang (ims_md_ge_lang_id, ims_md_id, language)
+ values (:p_ims_md_ge_lang_id, :p_ims_md_id, :language)
+ }
+ }
- # Adds Lifecycle Contributes
- foreach contribute $contributes {
- set p_ims_md_lf_cont_id [db_nextval ims_md_life_cycle_contrib_seq]
- set p_role_s [lindex [lindex [lindex $contribute 0] 0] 1]
- set p_role_v [lindex [lindex [lindex $contribute 0] 1] 1]
- set p_cont_date [lindex [lindex $contribute 2] 0]
- set p_cont_date_l [lindex [lindex [lindex $contribute 2] 1] 0]
- set p_cont_date_s [lindex [lindex [lindex $contribute 2] 1] 1]
-
- set p_entities [lindex $contribute 1]
-
- db_dml add_new_lifecycle_contrib {
- insert into ims_md_life_cycle_contrib (ims_md_lf_cont_id, ims_md_id, role_s, role_v, cont_date, cont_date_l, cont_date_s)
- values
- (:p_ims_md_lf_cont_id, :p_ims_md_id, :p_role_s, :p_role_v, :p_cont_date, :p_cont_date_l, :p_cont_date_s)
- }
+ # Adds General Description
+ foreach description $descriptions {
+ set p_ims_md_ge_desc_id [db_nextval ims_md_general_desc_seq]
+ set p_descrip_l [lindex $description 0]
+ set p_descrip_s [lindex $description 1]
+ db_dml add_new_general_description {
+ insert into ims_md_general_desc (ims_md_ge_desc_id, ims_md_id, descrip_l, descrip_s)
+ values (:p_ims_md_ge_desc_id, :p_ims_md_id, :p_descrip_l, :p_descrip_s)
+ }
+ }
- foreach entity $p_entities {
- set p_ims_md_lf_cont_enti_id [db_nextval ims_md_life_cycle_contrib_entity_seq]
- set p_entity $entity
-
- db_dml add_new_lifecycle_contrib_entity {
- insert into ims_md_life_cycle_contrib_entity (ims_md_lf_cont_enti_id, ims_md_lf_cont_id, entity)
- values
- (:p_ims_md_lf_cont_enti_id, :p_ims_md_lf_cont_id, :p_entity)
- }
- }
-
- }
-
- # Metadata
+ # Adds General Keywords
+ foreach keyword $keywords {
+ set p_ims_md_ge_key_id [db_nextval ims_md_general_key_seq]
+ set p_keyword_l [lindex $keyword 0]
+ set p_keyword_s [lindex $keyword 1]
- # Language
- set p_language [lors::imsmd::mdMetadata -element language -node $lom -prefix $prefix]
-
- # Catalogentry
- set catalogentries [lors::imsmd::mdMetadata -element catalogentry -node $lom -prefix $prefix]
-
- # Contribute
- set contributes [lors::imsmd::mdMetadata -element contribute -node $lom -prefix $prefix]
-
- # Metadatascheme
- set metadataschemes [lors::imsmd::mdMetadata -element metadatascheme -node $lom -prefix $prefix]
+ db_dml add_new_general_keyword {
+ insert into ims_md_general_key (ims_md_ge_key_id, ims_md_id, keyword_l, keyword_s)
+ values (:p_ims_md_ge_key_id, :p_ims_md_id, :p_keyword_l, :p_keyword_s)
+ }
+ }
- # Adds Metadata Language
- db_dml add_new_metadata {
- insert into ims_md_metadata (ims_md_id, language)
- values
- (:p_ims_md_id, :p_language)
- }
+ # Adds General Coverage
+ foreach coverage $coverages {
+ set p_ims_md_ge_cove_id [db_nextval ims_md_general_cover_seq]
+ set p_cover_l [lindex $coverage 0]
+ set p_cover_s [lindex $coverage 1]
- # Adds Catalogentry
- foreach catalogentry $catalogentries {
- set p_ims_md_md_cata_id [db_nextval ims_md_metadata_cata_seq]
- set p_catalog [lindex $catalogentry 0]
- set p_entry_l [lindex [lindex $catalogentry 1] 0]
- set p_entry_s [lindex [lindex $catalogentry 1] 1]
+ db_dml add_new_general_coverage {
+ insert into ims_md_general_cover (ims_md_ge_cove_id, ims_md_id, cover_l, cover_s)
+ values (:p_ims_md_ge_cove_id, :p_ims_md_id, :p_cover_l, :p_cover_s)
+ }
+ }
- db_dml add_new_metadata_catalogentries {
- insert into ims_md_metadata_cata (ims_md_md_cata_id, ims_md_id, catalog, entry_l, entry_s)
- values
- (:p_ims_md_md_cata_id, :p_ims_md_id, :p_catalog, :p_entry_l, :p_entry_s)
- }
- }
+ # Lifecycle
- # Adds Lifecycle Contributes
- foreach contribute $contributes {
- set p_ims_md_md_cont_id [db_nextval ims_md_metadata_contrib_seq]
- set p_role_s [lindex [lindex [lindex $contribute 0] 0] 1]
- set p_role_v [lindex [lindex [lindex $contribute 0] 1] 1]
- set p_cont_date [lindex [lindex $contribute 2] 0]
- set p_cont_date_l [lindex [lindex [lindex $contribute 2] 1] 0]
- set p_cont_date_s [lindex [lindex [lindex $contribute 2] 1] 1]
+ # Version
+ set version [lors::imsmd::mdLifeCycle \
+ -element version \
+ -node $lom \
+ -prefix $prefix]
+ set version_l [lindex [lindex $version 0] 0]
+ set version_s [lindex [lindex $version 0] 1]
- set p_ims_md_md_cont_enti_id [db_nextval ims_md_metadata_contrib_entity_seq]
- set p_entity [lindex [lindex $contribute 1] 0]
+ # Status
+ set status [lors::imsmd::mdLifeCycle \
+ -element status \
+ -node $lom \
+ -prefix $prefix]
+ set status_s [lindex [lindex [lindex $status 0] 0] 1]
+ set status_v [lindex [lindex [lindex $status 0] 1] 1]
- db_dml add_new_metadata_contrib {
- insert into ims_md_metadata_contrib (ims_md_md_cont_id, ims_md_id, role_s, role_v, cont_date, cont_date_l, cont_date_s)
- values
- (:p_ims_md_md_cont_id, :p_ims_md_id, :p_role_s, :p_role_v, :p_cont_date, :p_cont_date_l, :p_cont_date_s)
- }
+ # Contribute
+ set contributes [lors::imsmd::mdLifeCycle \
+ -element contribute \
+ -node $lom \
+ -prefix $prefix]
- db_dml add_new_metadata_contrib_entity {
- insert into ims_md_metadata_contrib_entity (ims_md_md_cont_enti_id, ims_md_md_cont_id, entity)
- values
- (:p_ims_md_md_cont_enti_id, :p_ims_md_md_cont_id, :p_entity)
- }
+ # Adds Lifecycle Version and Status
+ db_dml add_new_lifecycle {
+ insert into ims_md_life_cycle (ims_md_id, version_l, version_s, status_s, status_v)
+ values (:p_ims_md_id, :version_l, :version_s, :status_s, :status_v)
+ }
- }
+ # Adds Lifecycle Contributes
+ foreach contribute $contributes {
+ set p_ims_md_lf_cont_id [db_nextval ims_md_life_cycle_contrib_seq]
+ set p_role_s [lindex [lindex [lindex $contribute 0] 0] 1]
+ set p_role_v [lindex [lindex [lindex $contribute 0] 1] 1]
+ set p_cont_date [lindex [lindex $contribute 2] 0]
+ set p_cont_date_l [lindex [lindex [lindex $contribute 2] 1] 0]
+ set p_cont_date_s [lindex [lindex [lindex $contribute 2] 1] 1]
- # Adds Metadata Schemes
- foreach metadatascheme $metadataschemes {
- set p_ims_md_md_sch_id [db_nextval ims_md_metadata_scheme_seq]
- set p_scheme $metadatascheme
-
- db_dml add_new_metadata_metadatascheme {
- insert into ims_md_metadata_scheme (ims_md_md_sch_id, ims_md_id, scheme)
- values
- (:p_ims_md_md_sch_id, :p_ims_md_id, :p_scheme)
- }
- }
+ set p_entities [lindex $contribute 1]
- # Technical
+ db_dml add_new_lifecycle_contrib {
+ insert into ims_md_life_cycle_contrib (ims_md_lf_cont_id, ims_md_id, role_s, role_v, cont_date, cont_date_l, cont_date_s)
+ values (:p_ims_md_lf_cont_id, :p_ims_md_id, :p_role_s, :p_role_v, :p_cont_date, :p_cont_date_l, :p_cont_date_s)
+ }
- # format
- set formats [lors::imsmd::mdTechnical -element format -node $lom -prefix $prefix]
-
- # location
- set locations [lors::imsmd::mdTechnical -element location -node $lom -prefix $prefix]
- # size, installation remarks, otherplatformrequirements, duration
- set p_size [lors::imsmd::mdTechnical -element size -node $lom -prefix $prefix]
- set p_instl_rmks [lors::imsmd::mdTechnical -element installationremarks -node $lom -prefix $prefix]
- set p_instl_rmks_l [lindex [lindex $p_instl_rmks 0] 0]
- set p_instl_rmks_s [lindex [lindex $p_instl_rmks 0] 1]
- set p_otr_plt [lors::imsmd::mdTechnical -element otherplatformrequirements -node $lom -prefix $prefix]
- set p_otr_plt_l [lindex [lindex $p_otr_plt 0] 0]
- set p_otr_plt_s [lindex [lindex $p_otr_plt 0] 1]
- set p_durat [lors::imsmd::mdTechnical -element duration -node $lom -prefix $prefix]
- set p_duration [lindex $p_durat 0]
- set p_duration_l [lindex [lindex $p_durat 1] 0]
- set p_duration_s [lindex [lindex $p_durat 1] 1]
+ foreach entity $p_entities {
+ set p_ims_md_lf_cont_enti_id [db_nextval ims_md_life_cycle_contrib_entity_seq]
+ set p_entity $entity
- # requirement
- set requirements [lors::imsmd::mdTechnical -element requirement -node $lom -prefix $prefix]
+ db_dml add_new_lifecycle_contrib_entity {
+ insert into ims_md_life_cycle_contrib_entity (ims_md_lf_cont_enti_id, ims_md_lf_cont_id, entity)
+ values (:p_ims_md_lf_cont_enti_id, :p_ims_md_lf_cont_id, :p_entity)
+ }
+ }
+ }
- # Adds Technical size, installation remarks, otherplatformrequirements, duration
- db_dml add_new_technical {
- insert into ims_md_technical (ims_md_id, t_size, instl_rmrks_l, instl_rmrks_s, otr_plt_l, otr_plt_s, duration, duration_l, duration_s)
- values
- (:p_ims_md_id, :p_size, :p_instl_rmks_l, :p_instl_rmks_s, :p_otr_plt_l, :p_otr_plt_s, :p_duration, :p_duration_l, :p_duration_s)
- }
+ # Metadata
- # Adds Technical Format
+ # Language
+ set p_language [lors::imsmd::mdMetadata \
+ -element language \
+ -node $lom \
+ -prefix $prefix]
- foreach format $formats {
- set p_ims_md_te_fo_id [db_nextval ims_md_technical_format_seq]
- set p_format $format
-
- db_dml add_new_technical_format {
- insert into ims_md_technical_format (ims_md_te_fo_id, ims_md_id, format)
- values
- (:p_ims_md_te_fo_id, :p_ims_md_id, :p_format)
- }
- }
-
- # Adds Technical Location
-
- foreach location $locations {
- set p_ims_md_te_lo_id [db_nextval ims_md_technical_location_seq]
- set p_type [lindex $location 1]
- set p_location [lindex $location 0]
+ # Catalogentry
+ set catalogentries [lors::imsmd::mdMetadata \
+ -element catalogentry \
+ -node $lom \
+ -prefix $prefix]
- db_dml add_new_technical_location {
- insert into ims_md_technical_location (ims_md_te_lo_id, ims_md_id, type, location)
- values
- (:p_ims_md_te_lo_id, :p_ims_md_id, :p_type, :p_location)
- }
- }
+ # Contribute
+ set contributes [lors::imsmd::mdMetadata \
+ -element contribute \
+ -node $lom \
+ -prefix $prefix]
- # Adds Technical Requirements
+ # Metadatascheme
+ set metadataschemes [lors::imsmd::mdMetadata \
+ -element metadatascheme \
+ -node $lom \
+ -prefix $prefix]
- foreach requirement $requirements {
- set p_ims_md_te_rq_id [db_nextval ims_md_technical_requirement_seq]
- set p_type_s [lindex [lindex [lindex $requirement 0] 0] 1]
- set p_type_v [lindex [lindex [lindex $requirement 0] 1] 1]
- set p_name_s [lindex [lindex [lindex $requirement 1] 0] 1]
- set p_name_v [lindex [lindex [lindex $requirement 1] 1] 1]
- set p_min_version [lindex $requirement 2]
- set p_max_version [lindex $requirement 3]
+ # Adds Metadata Language
+ db_dml add_new_metadata {
+ insert into ims_md_metadata (ims_md_id, language)
+ values (:p_ims_md_id, :p_language)
+ }
- db_dml add_new_technical_requirement {
- insert into ims_md_technical_requirement (ims_md_te_rq_id, ims_md_id, type_s, type_v, name_s, name_v, min_version, max_version)
- values
- (:p_ims_md_te_rq_id, :p_ims_md_id, :p_type_s, :p_type_v, :p_name_s, :p_name_v, :p_min_version, :p_max_version)
- }
- }
+ # Adds Catalogentry
+ foreach catalogentry $catalogentries {
+ set p_ims_md_md_cata_id [db_nextval ims_md_metadata_cata_seq]
+ set p_catalog [lindex $catalogentry 0]
+ set p_entry_l [lindex [lindex $catalogentry 1] 0]
+ set p_entry_s [lindex [lindex $catalogentry 1] 1]
+ db_dml add_new_metadata_catalogentries {
+ insert into ims_md_metadata_cata (ims_md_md_cata_id, ims_md_id, catalog, entry_l, entry_s)
+ values (:p_ims_md_md_cata_id, :p_ims_md_id, :p_catalog, :p_entry_l, :p_entry_s)
+ }
+ }
- # Educational
+ # Adds Lifecycle Contributes
+ foreach contribute $contributes {
+ set p_ims_md_md_cont_id [db_nextval ims_md_metadata_contrib_seq]
+ set p_role_s [lindex [lindex [lindex $contribute 0] 0] 1]
+ set p_role_v [lindex [lindex [lindex $contribute 0] 1] 1]
+ set p_cont_date [lindex [lindex $contribute 2] 0]
+ set p_cont_date_l [lindex [lindex [lindex $contribute 2] 1] 0]
+ set p_cont_date_s [lindex [lindex [lindex $contribute 2] 1] 1]
- # interactivitytype, interactivitylevel, semanticdensity, difficulty, typical_learning_time, description
- set p_int_type [lors::imsmd::mdEducational -element interactivitytype -node $lom -prefix $prefix]
- set p_int_type_s [lindex [lindex [lindex $p_int_type 0] 0] 1]
- set p_int_type_v [lindex [lindex [lindex $p_int_type 0] 1] 1]
- set p_int_level [lors::imsmd::mdEducational -element interactivitylevel -node $lom -prefix $prefix]
- set p_int_level_s [lindex [lindex [lindex $p_int_level 0] 0] 1]
- set p_int_level_v [lindex [lindex [lindex $p_int_level 0] 1] 1]
- set p_sem_density [lors::imsmd::mdEducational -element semanticdensity -node $lom -prefix $prefix]
- set p_sem_density_s [lindex [lindex [lindex $p_sem_density 0] 0] 1]
- set p_sem_density_v [lindex [lindex [lindex $p_sem_density 0] 1] 1]
- set p_difficulty [lors::imsmd::mdEducational -element difficulty -node $lom -prefix $prefix]
- set p_difficulty_s [lindex [lindex [lindex $p_difficulty 0] 0] 1]
- set p_difficulty_v [lindex [lindex [lindex $p_difficulty 0] 1] 1]
- set p_type_lrn_tim [lors::imsmd::mdEducational -element typicallearningtime -node $lom -prefix $prefix]
- set p_type_lrn_time [lindex $p_type_lrn_tim 0]
- set p_type_lrn_time_l [lindex [lindex $p_type_lrn_tim 1] 0]
- set p_type_lrn_time_s [lindex [lindex $p_type_lrn_tim 1] 1]
- set descrips [lors::imsmd::mdEducational -element description -node $lom -prefix $prefix]
+ set p_ims_md_md_cont_enti_id [db_nextval ims_md_metadata_contrib_entity_seq]
+ set p_entity [lindex [lindex $contribute 1] 0]
- # learningresourcetype
- set learningresourcetypes [lors::imsmd::mdEducational -element learningresourcetype -node $lom -prefix $prefix]
+ db_dml add_new_metadata_contrib {
+ insert into ims_md_metadata_contrib (ims_md_md_cont_id, ims_md_id, role_s, role_v, cont_date, cont_date_l, cont_date_s)
+ values (:p_ims_md_md_cont_id, :p_ims_md_id, :p_role_s, :p_role_v, :p_cont_date, :p_cont_date_l, :p_cont_date_s)
+ }
+ db_dml add_new_metadata_contrib_entity {
+ insert into ims_md_metadata_contrib_entity (ims_md_md_cont_enti_id, ims_md_md_cont_id, entity)
+ values (:p_ims_md_md_cont_enti_id, :p_ims_md_md_cont_id, :p_entity)
+ }
+ }
- # intendedenduserrole
- set intendedenduserroles [lors::imsmd::mdEducational -element intendedenduserrole -node $lom -prefix $prefix]
+ # Adds Metadata Schemes
+ foreach metadatascheme $metadataschemes {
+ set p_ims_md_md_sch_id [db_nextval ims_md_metadata_scheme_seq]
+ set p_scheme $metadatascheme
- # context
- set contexts [lors::imsmd::mdEducational -element context -node $lom -prefix $prefix]
+ db_dml add_new_metadata_metadatascheme {
+ insert into ims_md_metadata_scheme (ims_md_md_sch_id, ims_md_id, scheme)
+ values (:p_ims_md_md_sch_id, :p_ims_md_id, :p_scheme)
+ }
+ }
- # typicalagerange
- set typicalageranges [lors::imsmd::mdEducational -element typicalagerange -node $lom -prefix $prefix]
+ # Technical
- # language
- set languages [lors::imsmd::mdEducational -element language -node $lom -prefix $prefix]
+ # format
+ set formats [lors::imsmd::mdTechnical \
+ -element format \
+ -node $lom \
+ -prefix $prefix]
+ # location
+ set locations [lors::imsmd::mdTechnical \
+ -element location \
+ -node $lom \
+ -prefix $prefix]
- # Adds Educational interactivitytype, interactivitylevel, semanticdensity, difficulty, typical_learning_time
- db_dml add_new_educational {
- insert into ims_md_educational (ims_md_id, int_type_s, int_type_v, int_level_s, int_level_v, sem_density_s, sem_density_v, difficulty_s, difficulty_v, type_lrn_time, type_lrn_time_l, type_lrn_time_s)
- values
- (:p_ims_md_id, :p_int_type_s, :p_int_type_v, :p_int_level_s, :p_int_level_v, :p_sem_density_s, :p_sem_density_v, :p_difficulty_s, :p_difficulty_v, :p_type_lrn_time, :p_type_lrn_time_l, :p_type_lrn_time_s)
- }
+ # size, installation remarks, otherplatformrequirements, duration
+ set p_size [lors::imsmd::mdTechnical -element size \
+ -node $lom \
+ -prefix $prefix]
- # Adds descriptions
- foreach descrip $descrips {
- set p_ims_md_ed_de_id [db_nextval ims_md_educational_descrip_seq]
- set p_descrip_l [lindex $descrip 0]
- set p_descrip_s [lindex $descrip 1]
+ set p_instl_rmks [lors::imsmd::mdTechnical \
+ -element installationremarks \
+ -node $lom \
+ -prefix $prefix]
- db_dml add_new_descriptions {
- insert into ims_md_educational_descrip (ims_md_ed_de_id, ims_md_id, descrip_l, descrip_s)
- values
- (:p_ims_md_ed_de_id, :p_ims_md_id, :p_descrip_l, :p_descrip_s)
- }
- }
+ set p_instl_rmks_l [lindex [lindex $p_instl_rmks 0] 0]
+ set p_instl_rmks_s [lindex [lindex $p_instl_rmks 0] 1]
+ set p_otr_plt [lors::imsmd::mdTechnical \
+ -element otherplatformrequirements \
+ -node $lom \
+ -prefix $prefix]
- # Adds learningresourcetype
- foreach lrt $learningresourcetypes {
- set p_ims_md_ed_lr_id [db_nextval ims_md_educational_lrt_seq]
- set p_lrt_s [lindex [lindex $lrt 0] 1]
- set p_lrt_v [lindex [lindex $lrt 1] 1]
-
- db_dml add_new_learningresourcetypes {
- insert into ims_md_educational_lrt (ims_md_ed_lr_id, ims_md_id, lrt_s, lrt_v)
- values
- (:p_ims_md_ed_lr_id, :p_ims_md_id, :p_lrt_s, :p_lrt_v)
- }
- }
+ set p_otr_plt_l [lindex [lindex $p_otr_plt 0] 0]
+ set p_otr_plt_s [lindex [lindex $p_otr_plt 0] 1]
+ set p_durat [lors::imsmd::mdTechnical \
+ -element duration \
+ -node $lom \
+ -prefix $prefix]
- # Adds intendedenduserrole
- foreach ieur $intendedenduserroles {
- set p_ims_md_ed_ie_id [db_nextval ims_md_educational_ieur_seq]
- set p_ieur_s [lindex [lindex $ieur 0] 1]
- set p_ieur_v [lindex [lindex $ieur 1] 1]
+ set p_duration [lindex $p_durat 0]
+ set p_duration_l [lindex [lindex $p_durat 1] 0]
+ set p_duration_s [lindex [lindex $p_durat 1] 1]
- db_dml add_new_intendedenduserroles {
- insert into ims_md_educational_ieur (ims_md_ed_ie_id, ims_md_id, ieur_s, ieur_v)
- values
- (:p_ims_md_ed_ie_id, :p_ims_md_id, :p_ieur_s, :p_ieur_v)
- }
- }
+ # requirement
+ set requirements [lors::imsmd::mdTechnical \
+ -element requirement \
+ -node $lom \
+ -prefix $prefix]
- # Adds context
- foreach context $contexts {
- set p_ims_md_ed_co_id [db_nextval ims_md_educational_context_seq]
- set p_context_s [lindex [lindex $context 0] 1]
- set p_context_v [lindex [lindex $context 1] 1]
-
- db_dml add_new_context {
- insert into ims_md_educational_context (ims_md_ed_co_id, ims_md_id, context_s, context_v)
- values
- (:p_ims_md_ed_co_id, :p_ims_md_id, :p_context_s, :p_context_v)
- }
- }
+ # Adds Technical size, installation remarks, otherplatformrequirements, duration
+ db_dml add_new_technical {
+ insert into ims_md_technical (ims_md_id, t_size, instl_rmrks_l, instl_rmrks_s, otr_plt_l, otr_plt_s, duration, duration_l, duration_s)
+ values (:p_ims_md_id, :p_size, :p_instl_rmks_l, :p_instl_rmks_s, :p_otr_plt_l, :p_otr_plt_s, :p_duration, :p_duration_l, :p_duration_s)
+ }
- # Adds typicalagerange
- foreach tar $typicalageranges {
- set p_ims_md_ed_ta_id [db_nextval ims_md_educational_tar_seq]
- set p_tar_l [lindex $tar 0]
- set p_tar_s [lindex $tar 1]
+ # Adds Technical Format
- db_dml add_new_typicalagerange {
- insert into ims_md_educational_tar (ims_md_ed_ta_id, ims_md_id, tar_l, tar_s)
- values
- (:p_ims_md_ed_ta_id, :p_ims_md_id, :p_tar_l, :p_tar_s)
- }
- }
+ foreach format $formats {
+ set p_ims_md_te_fo_id [db_nextval ims_md_technical_format_seq]
+ set p_format $format
- # Adds Languages
- foreach lang $languages {
- set p_ims_md_ed_la_id [db_nextval ims_md_educational_lang_seq]
- set p_language $lang
-
- db_dml add_new_language {
- insert into ims_md_educational_lang (ims_md_ed_la_id, ims_md_id, language)
- values
- (:p_ims_md_ed_la_id, :p_ims_md_id, :p_language)
- }
- }
+ db_dml add_new_technical_format {
+ insert into ims_md_technical_format (ims_md_te_fo_id, ims_md_id, format)
+ values (:p_ims_md_te_fo_id, :p_ims_md_id, :p_format)
+ }
+ }
- # Rights
- # cost, copyrightsandotherrights, description
- set p_cost [lors::imsmd::mdRights -element cost -node $lom -prefix $prefix]
- set p_caor [lors::imsmd::mdRights -element copyrightandotherrestrictions -node $lom -prefix $prefix]
- set p_descrip [lors::imsmd::mdRights -element description -node $lom -prefix $prefix]
-
- set p_cost_s [lindex [lindex [lindex $p_cost 0] 0] 1]
- set p_cost_v [lindex [lindex [lindex $p_cost 0] 1] 1]
+ # Adds Technical Location
- set p_caor_s [lindex [lindex [lindex $p_caor 0] 0] 1]
- set p_caor_v [lindex [lindex [lindex $p_caor 0] 1] 1]
+ foreach location $locations {
+ set p_ims_md_te_lo_id [db_nextval ims_md_technical_location_seq]
+ set p_type [lindex $location 1]
+ set p_location [lindex $location 0]
- set p_descrip_l [lindex [lindex $p_descrip 0] 0]
- set p_descrip_s [lindex [lindex $p_descrip 0] 1]
+ db_dml add_new_technical_location {
+ insert into ims_md_technical_location (ims_md_te_lo_id, ims_md_id, type, location)
+ values (:p_ims_md_te_lo_id, :p_ims_md_id, :p_type, :p_location)
+ }
+ }
- db_dml add_new_rights {
- insert into ims_md_rights (ims_md_id, cost_s, cost_v, caor_s, caor_v, descrip_l, descrip_s)
- values
- (:p_ims_md_id, :p_cost_s, :p_cost_v, :p_caor_s, :p_caor_v, :p_descrip_l, :p_descrip_s)
- }
+ # Adds Technical Requirements
- # Relation
+ foreach requirement $requirements {
+ set p_ims_md_te_rq_id [db_nextval ims_md_technical_requirement_seq]
+ set p_type_s [lindex [lindex [lindex $requirement 0] 0] 1]
+ set p_type_v [lindex [lindex [lindex $requirement 0] 1] 1]
+ set p_name_s [lindex [lindex [lindex $requirement 1] 0] 1]
+ set p_name_v [lindex [lindex [lindex $requirement 1] 1] 1]
+ set p_min_version [lindex $requirement 2]
+ set p_max_version [lindex $requirement 3]
- # Relation returns all in one large list
- set relations [lors::imsmd::mdRelation -node $lom -prefix $prefix]
-
- foreach relation $relations {
-
- set p_ims_md_re_id [db_nextval ims_md_relation_seq]
- set p_kind_s [lindex [lindex [lindex [lindex $relation 0] 0] 0] 1]
- set p_kind_v [lindex [lindex [lindex [lindex $relation 0] 0] 1] 1]
-
- # Adds kind
- db_dml add_new_relation {
- insert into ims_md_relation (ims_md_re_id, ims_md_id, kind_s, kind_v)
- values
- (:p_ims_md_re_id, :p_ims_md_id, :p_kind_s, :p_kind_v)
- }
-
- set p_ims_md_re_re_id [db_nextval ims_md_relation_resource_seq]
- set p_descrip_l [lindex [lindex [lindex $relation 1] 0] 0]
- set p_descrip_s [lindex [lindex [lindex $relation 1] 0] 1]
+ db_dml add_new_technical_requirement {
+ insert into ims_md_technical_requirement (ims_md_te_rq_id, ims_md_id, type_s, type_v, name_s, name_v, min_version, max_version)
+ values (:p_ims_md_te_rq_id, :p_ims_md_id, :p_type_s, :p_type_v, :p_name_s, :p_name_v, :p_min_version, :p_max_version)
+ }
+ }
- # adds description to resource
- db_dml add_new_relation_descrip {
- insert into ims_md_relation_resource (ims_md_re_re_id, ims_md_re_id, identifier, descrip_l, descrip_s)
- values
- (:p_ims_md_re_re_id, :p_ims_md_re_id, null, :p_descrip_l, :p_descrip_s)
- }
+ # Educational
- # catalogentries
- set catalogentries [lindex $relation 2]
+ # interactivitytype, interactivitylevel, semanticdensity, difficulty, typical_learning_time, description
+ set p_int_type [lors::imsmd::mdEducational \
+ -element interactivitytype \
+ -node $lom \
+ -prefix $prefix]
- # adds catalogentries
- foreach catalogentry $catalogentries {
+ set p_int_type_s [lindex [lindex [lindex $p_int_type 0] 0] 1]
+ set p_int_type_v [lindex [lindex [lindex $p_int_type 0] 1] 1]
+ set p_int_level [lors::imsmd::mdEducational \
+ -element interactivitylevel \
+ -node $lom \
+ -prefix $prefix]
- set p_ims_md_re_re_ca_id [db_nextval ims_md_relation_resource_catalog_seq]
- set p_catalog [lindex $catalogentry 0]
- set p_entry_l [lindex [lindex $catalogentry 1] 0]
- set p_entry_s [lindex [lindex $catalogentry 1] 1]
-
- db_dml add_new_catalogentry {
-
- insert into ims_md_relation_resource_catalog (ims_md_re_re_ca_id, ims_md_re_re_id, catalog, entry_l, entry_s)
- values
- (:p_ims_md_re_re_ca_id, :p_ims_md_re_re_id, :p_catalog, :p_entry_l, :p_entry_s)
- }
- }
+ set p_int_level_s [lindex [lindex [lindex $p_int_level 0] 0] 1]
+ set p_int_level_v [lindex [lindex [lindex $p_int_level 0] 1] 1]
+ set p_sem_density [lors::imsmd::mdEducational \
+ -element semanticdensity \
+ -node $lom \
+ -prefix $prefix]
- }
+ set p_sem_density_s [lindex [lindex [lindex $p_sem_density 0] 0] 1]
+ set p_sem_density_v [lindex [lindex [lindex $p_sem_density 0] 1] 1]
+ set p_difficulty [lors::imsmd::mdEducational \
+ -element difficulty \
+ -node $lom \
+ -prefix $prefix]
- # Annotation
-
- set annotations [lors::imsmd::mdAnnotation -node $lom -prefix $prefix]
+ set p_difficulty_s [lindex [lindex [lindex $p_difficulty 0] 0] 1]
+ set p_difficulty_v [lindex [lindex [lindex $p_difficulty 0] 1] 1]
+ set p_type_lrn_tim [lors::imsmd::mdEducational \
+ -element typicallearningtime \
+ -node $lom \
+ -prefix $prefix]
- foreach annotation $annotations {
- set p_ims_md_an_id [db_nextval ims_md_annotation_seq]
- set p_entity [lindex [lindex $annotation 0] 0]
- set p_date [lindex [lindex $annotation 1] 0]
- set p_date_l [lindex [lindex [lindex $annotation 1] 1] 0]
- set p_date_s [lindex [lindex [lindex $annotation 1] 1] 1]
+ set p_type_lrn_time [lindex $p_type_lrn_tim 0]
+ set p_type_lrn_time_l [lindex [lindex $p_type_lrn_tim 1] 0]
+ set p_type_lrn_time_s [lindex [lindex $p_type_lrn_tim 1] 1]
+ set descrips [lors::imsmd::mdEducational \
+ -element description \
+ -node $lom \
+ -prefix $prefix]
- set p_descriptions [lindex $annotation 2]
+ # learningresourcetype
+ set learningresourcetypes [lors::imsmd::mdEducational \
+ -element learningresourcetype \
+ -node $lom \
+ -prefix $prefix]
- db_dml add_new_annotation {
- insert into ims_md_annotation (ims_md_an_id, ims_md_id, entity, date, date_l, date_s)
- values
- (:p_ims_md_an_id, :p_ims_md_id, :p_entity, :p_date, :p_date_l, :p_date_s)
- }
+ # intendedenduserrole
+ set intendedenduserroles [lors::imsmd::mdEducational \
+ -element intendedenduserrole \
+ -node $lom \
+ -prefix $prefix]
- foreach description $p_descriptions {
+ # context
+ set contexts [lors::imsmd::mdEducational \
+ -element context \
+ -node $lom \
+ -prefix $prefix]
- set p_ims_md_an_de_id [db_nextval ims_md_annotation_descrip_seq]
- set p_descrip_l [lindex $description 0]
- set p_descrip_s [lindex $description 1]
-
- db_dml add_new_ann_descriptions {
- insert into ims_md_annotation_descrip (ims_md_an_de_id, ims_md_an_id, descrip_l, descrip_s)
- values
- (:p_ims_md_an_de_id, :p_ims_md_an_id, :p_descrip_l, :p_descrip_s)
- }
+ # typicalagerange
+ set typicalageranges [lors::imsmd::mdEducational \
+ -element typicalagerange \
+ -node $lom \
+ -prefix $prefix]
- }
+ # language
+ set languages [lors::imsmd::mdEducational \
+ -element language \
+ -node $lom \
+ -prefix $prefix]
- }
+ # Adds Educational interactivitytype, interactivitylevel, semanticdensity, difficulty, typical_learning_time
+ db_dml add_new_educational {
+ insert into ims_md_educational (ims_md_id, int_type_s, int_type_v, int_level_s, int_level_v, sem_density_s, sem_density_v, difficulty_s, difficulty_v, type_lrn_time, type_lrn_time_l, type_lrn_time_s)
+ values (:p_ims_md_id, :p_int_type_s, :p_int_type_v, :p_int_level_s, :p_int_level_v, :p_sem_density_s, :p_sem_density_v, :p_difficulty_s, :p_difficulty_v, :p_type_lrn_time, :p_type_lrn_time_l, :p_type_lrn_time_s)
+ }
- # Classification
+ # Adds descriptions
+ foreach descrip $descrips {
+ set p_ims_md_ed_de_id [db_nextval ims_md_educational_descrip_seq]
+ set p_descrip_l [lindex $descrip 0]
+ set p_descrip_s [lindex $descrip 1]
- set classifications [lors::imsmd::mdClassification -node $lom -prefix $prefix]
+ db_dml add_new_descriptions {
+ insert into ims_md_educational_descrip (ims_md_ed_de_id, ims_md_id, descrip_l, descrip_s)
+ values (:p_ims_md_ed_de_id, :p_ims_md_id, :p_descrip_l, :p_descrip_s)
+ }
+ }
- foreach class $classifications {
+ # Adds learningresourcetype
+ foreach lrt $learningresourcetypes {
+ set p_ims_md_ed_lr_id [db_nextval ims_md_educational_lrt_seq]
+ set p_lrt_s [lindex [lindex $lrt 0] 1]
+ set p_lrt_v [lindex [lindex $lrt 1] 1]
- # purpose
- set p_ims_md_cl_id [db_nextval ims_md_classification_seq]
- set p_purpose_s [lindex [lindex [lindex [lindex [lindex $class 0] 0] 0] 0] 1]
- set p_purpose_v [lindex [lindex [lindex [lindex [lindex $class 0] 0] 0] 1] 1]
-
- db_dml add_new_classification {
- insert into ims_md_classification (ims_md_cl_id, ims_md_id, purpose_s, purpose_v)
- values
- (:p_ims_md_cl_id, :p_ims_md_id, :p_purpose_s, :p_purpose_v)
- }
+ db_dml add_new_learningresourcetypes {
+ insert into ims_md_educational_lrt (ims_md_ed_lr_id, ims_md_id, lrt_s, lrt_v)
+ values (:p_ims_md_ed_lr_id, :p_ims_md_id, :p_lrt_s, :p_lrt_v)
+ }
+ }
- # description
- set descriptions [lindex [lindex $class 0] 1]
+ # Adds intendedenduserrole
+ foreach ieur $intendedenduserroles {
+ set p_ims_md_ed_ie_id [db_nextval ims_md_educational_ieur_seq]
+ set p_ieur_s [lindex [lindex $ieur 0] 1]
+ set p_ieur_v [lindex [lindex $ieur 1] 1]
- foreach desc $descriptions {
- set p_ims_md_cl_de_id [db_nextval ims_md_classification_desc_seq]
- set p_descrip_l [lindex $desc 0]
- set p_descrip_s [lindex $desc 1]
-
- db_dml add_new_description {
- insert into ims_md_classification_descrip (ims_md_cl_de_id, ims_md_cl_id, descrip_l, descrip_s)
- values
- (:p_ims_md_cl_de_id, :p_ims_md_cl_id, :p_descrip_l, :p_descrip_s)
- }
- }
+ db_dml add_new_intendedenduserroles {
+ insert into ims_md_educational_ieur (ims_md_ed_ie_id, ims_md_id, ieur_s, ieur_v)
+ values (:p_ims_md_ed_ie_id, :p_ims_md_id, :p_ieur_s, :p_ieur_v)
+ }
+ }
- # taxonpath
- set taxonpaths [lindex [lindex $class 0] 2]
+ # Adds context
+ foreach context $contexts {
+ set p_ims_md_ed_co_id [db_nextval ims_md_educational_context_seq]
+ set p_context_s [lindex [lindex $context 0] 1]
+ set p_context_v [lindex [lindex $context 1] 1]
- foreach taxonpath $taxonpaths {
-
- set p_source [lindex $taxonpath 0]
-
- set p_source_l [lindex [lindex $p_source 0] 0]
- set p_source_s [lindex [lindex $p_source 0] 1]
- set p_ims_md_cl_ta_id [db_nextval ims_md_classification_taxpath_seq]
+ db_dml add_new_context {
+ insert into ims_md_educational_context (ims_md_ed_co_id, ims_md_id, context_s, context_v)
+ values (:p_ims_md_ed_co_id, :p_ims_md_id, :p_context_s, :p_context_v)
+ }
+ }
- set taxons [lindex $taxonpath 1]
+ # Adds typicalagerange
+ foreach tar $typicalageranges {
+ set p_ims_md_ed_ta_id [db_nextval ims_md_educational_tar_seq]
+ set p_tar_l [lindex $tar 0]
+ set p_tar_s [lindex $tar 1]
- db_dml add_new_taxonpaths {
- insert into ims_md_classification_taxpath (ims_md_cl_ta_id, ims_md_cl_id, source_l, source_v)
- values
- (:p_ims_md_cl_ta_id, :p_ims_md_cl_id, :p_source_l, :p_source_s)
- }
+ db_dml add_new_typicalagerange {
+ insert into ims_md_educational_tar (ims_md_ed_ta_id, ims_md_id, tar_l, tar_s)
+ values (:p_ims_md_ed_ta_id, :p_ims_md_id, :p_tar_l, :p_tar_s)
+ }
+ }
- foreach taxon $taxons {
+ # Adds Languages
+ foreach lang $languages {
+ set p_ims_md_ed_la_id [db_nextval ims_md_educational_lang_seq]
+ set p_language $lang
- set p_ims_md_cl_ta_ta_id [db_nextval ims_md_classification_taxpath_taxon_seq]
- set p_hierarchy [lindex $taxon 0]
- set p_identifier [lindex $taxon 1]
- set p_entry_l [lindex [lindex $taxon 2] 0]
- set p_entry_s [lindex [lindex $taxon 2] 1]
-
- db_dml add_new_taxons {
- insert into ims_md_classification_taxpath_taxon (ims_md_cl_ta_ta_id, ims_md_cl_ta_id, hierarchy, identifier, entry_l, entry_s)
- values
- (:p_ims_md_cl_ta_ta_id, :p_ims_md_cl_ta_id, :p_hierarchy, :p_identifier, :p_entry_l, :p_entry_s)
- }
+ db_dml add_new_language {
+ insert into ims_md_educational_lang (ims_md_ed_la_id, ims_md_id, language)
+ values (:p_ims_md_ed_la_id, :p_ims_md_id, :p_language)
+ }
+ }
- }
- }
+ # Rights
+ # cost, copyrightsandotherrights, description
+ set p_cost [lors::imsmd::mdRights \
+ -element cost \
+ -node $lom \
+ -prefix $prefix]
- # keywords
- set keywords [lindex [lindex $class 0] 3]
-
- foreach keyword $keywords {
- set p_ims_md_cl_ke_id [db_nextval ims_md_classification_keyword_seq]
- set p_keyword_l [lindex $keyword 0]
- set p_keyword_s [lindex $keyword 1]
-
- db_dml add_new_keywords {
- insert into ims_md_classification_keyword (ims_md_cl_ke_id, ims_md_cl_id, keyword_l, keyword_s)
- values
- (:p_ims_md_cl_ke_id, :p_ims_md_cl_id, :p_keyword_l, :p_keyword_s)
- }
- }
- }
-# } on_error {
-# ad_return_error "[_ lors.lt_Transaction_Error_in_]" "[_ lors._The] $errmsg"
-# }
-#
-# }
+ set p_caor [lors::imsmd::mdRights \
+ -element copyrightandotherrestrictions \
+ -node $lom \
+ -prefix $prefix]
+ set p_descrip [lors::imsmd::mdRights \
+ -element description \
+ -node $lom \
+ -prefix $prefix]
- ad_proc -public addMetadata {
- {-acs_object:required}
- {-node:required}
- {-dir {}}
- } {
- Adds metadata for a learning resource.
-
- @option acs_object acs object for resource (element) that contains metadata.
- @option node XML node that contains the metadata
- @option dir directory where the imsmanifest.xml file is located. This is use in the case the metadata is in a different file location (adlcp:location).
- @author Ernie Ghiglione (ErnieG@mm.st).
+ set p_cost_s [lindex [lindex [lindex $p_cost 0] 0] 1]
+ set p_cost_v [lindex [lindex [lindex $p_cost 0] 1] 1]
- } {
- set p_ims_md_id $acs_object
- set mdnode $node
- set path_to_file $dir
- #[lors::imsmd::getMDNode $manifest]
-
- set p_schema [lindex [lindex [lors::imsmd::getMDSchema $mdnode] 0] 0]
- set p_schemaversion [lindex [lors::imsmd::getMDSchema $mdnode] 1]
+ set p_caor_s [lindex [lindex [lindex $p_caor 0] 0] 1]
+ set p_caor_v [lindex [lindex [lindex $p_caor 0] 1] 1]
- set lom [lindex [lors::imsmd::getLOM $mdnode $path_to_file] 0]
- set prefix [lindex [lors::imsmd::getLOM $mdnode $path_to_file] 1]
+ set p_descrip_l [lindex [lindex $p_descrip 0] 0]
+ set p_descrip_s [lindex [lindex $p_descrip 0] 1]
-
- # inserts into db
-# db_transaction {
+ db_dml add_new_rights {
+ insert into ims_md_rights (ims_md_id, cost_s, cost_v, caor_s, caor_v, descrip_l, descrip_s)
+ values (:p_ims_md_id, :p_cost_s, :p_cost_v, :p_caor_s, :p_caor_v, :p_descrip_l, :p_descrip_s)
+ }
- # Checks if there's a LOM record
- if {$lom != 0} {
+ # Relation
- # Adds new MD record to ims_md
-
- lors::imsmd::addMDSchemaVersion -acs_object $p_ims_md_id -schema $p_schema -schemaversion $p_schemaversion
+ # Relation returns all in one large list
+ set relations [lors::imsmd::mdRelation -node $lom -prefix $prefix]
- lors::imsmd::addLOM -lom $lom -prefix $prefix -acs_object $p_ims_md_id -dir $path_to_file
+ foreach relation $relations {
- }
-# } on_error {
-# ad_return_error "[_ lors.lt_Transaction_Error_whi]" "[_ lors.The_error_was] $errmsg"
-# }
- return 1
- }
-
+ set p_ims_md_re_id [db_nextval ims_md_relation_seq]
+ set p_kind_s [lindex [lindex [lindex [lindex $relation 0] 0] 0] 1]
+ set p_kind_v [lindex [lindex [lindex [lindex $relation 0] 0] 1] 1]
- ad_proc -public addMDSchemaVersion {
- {-acs_object:required}
- {-schema:required}
- {-schemaversion:required}
+ # Adds kind
+ db_dml add_new_relation {
+ insert into ims_md_relation (ims_md_re_id, ims_md_id, kind_s, kind_v)
+ values (:p_ims_md_re_id, :p_ims_md_id, :p_kind_s, :p_kind_v)
+ }
- } {
- Adds MD schema and schema version to db
- If the metedata record already exists, then it deletes it
- and creates a new one.
+ set p_ims_md_re_re_id [db_nextval ims_md_relation_resource_seq]
+ set p_descrip_l [lindex [lindex [lindex $relation 1] 0] 0]
+ set p_descrip_s [lindex [lindex [lindex $relation 1] 0] 1]
- @param acs_object acs object for resource (element) that contains metadata.
- @param schema MD schema used for the learning resource.
- @param schemaversion MD schemaversion used for the learning resource.
- @author Ernie Ghiglione (ErnieG@mm.st)
- } {
- set p_ims_md_id $acs_object
- set p_schema $schema
- set p_schemaversion $schemaversion
+ # adds description to resource
+ db_dml add_new_relation_descrip {
+ insert into ims_md_relation_resource (ims_md_re_re_id, ims_md_re_id, identifier, descrip_l, descrip_s)
+ values (:p_ims_md_re_re_id, :p_ims_md_re_id, null, :p_descrip_l, :p_descrip_s)
+ }
- # we check if the MD record we are about to insert already
- # exists. If that is the case, then we delete it first.
- # Yes, we are not versioning metadata (as I believe there's no
- # real point on doing so.
+ # catalogentries
+ set catalogentries [lindex $relation 2]
- lors::imsmd::delMD -acs_object $p_ims_md_id
+ # adds catalogentries
+ foreach catalogentry $catalogentries {
+ set p_ims_md_re_re_ca_id [db_nextval ims_md_relation_resource_catalog_seq]
+ set p_catalog [lindex $catalogentry 0]
+ set p_entry_l [lindex [lindex $catalogentry 1] 0]
+ set p_entry_s [lindex [lindex $catalogentry 1] 1]
-# db_transaction {
- db_dml add_md {
- insert into ims_md (ims_md_id, schema, schemaversion)
- values
- (:p_ims_md_id, :p_schema, :p_schemaversion)
+ db_dml add_new_catalogentry {
+
+ insert into ims_md_relation_resource_catalog (ims_md_re_re_ca_id, ims_md_re_re_id, catalog, entry_l, entry_s)
+ values(:p_ims_md_re_re_ca_id, :p_ims_md_re_re_id, :p_catalog, :p_entry_l, :p_entry_s)
+ }
}
-# } on_error {
-# ad_return_error "[_ lors.lt_Transaction_Error_in__1] " " [_ lors._The] $errmsg"
-# }
- }
+ }
- ad_proc -public delMD {
- {-acs_object:required}
- } {
- Deletes an MD record (deletes it ALL from the db).
-
- @param acs_object the acs object metadata we are deleting.
- @author Ernie Ghiglione (ErnieG@mm.st).
- } {
- set p_ims_md_id $acs_object
+ # Annotation
- # if record exists...
- if {[db_0or1row check_md_record {select ims_md_id from ims_md where ims_md_id = :p_ims_md_id}]} {
+ set annotations [lors::imsmd::mdAnnotation -node $lom -prefix $prefix]
- # ... then delete it
-# db_transaction {
- db_dml add_md {
- delete from ims_md where ims_md_id = :p_ims_md_id
- }
-# } on_error {
-# ad_return_error "[_ lors.lt_Transaction_deleting_]" "[_ lors.The_error_was] $errmsg"
-# }
- }
+ foreach annotation $annotations {
+ set p_ims_md_an_id [db_nextval ims_md_annotation_seq]
+ set p_entity [lindex [lindex $annotation 0] 0]
+ set p_date [lindex [lindex $annotation 1] 0]
+ set p_date_l [lindex [lindex [lindex $annotation 1] 1] 0]
+ set p_date_s [lindex [lindex [lindex $annotation 1] 1] 1]
- }
+ set p_descriptions [lindex $annotation 2]
- ad_proc -public mdExist {
- {-ims_md_id:required}
- } {
- Checks whether the acs_object (ims_md_id) does exist.
- Returns 1 if that's the case, 0 otherwise
-
- @param ims_md_id the acs object id
- @author Ernie Ghiglione (ErnieG@mm.st).
- } {
- set p_ims_md_id $ims_md_id
+ db_dml add_new_annotation {
+ insert into ims_md_annotation (ims_md_an_id, ims_md_id, entity, date, date_l, date_s)
+ values (:p_ims_md_an_id, :p_ims_md_id, :p_entity, :p_date, :p_date_l, :p_date_s)
+ }
- # if record exists... returns 1
- return [db_0or1row check_md_record {select ims_md_id from ims_md where ims_md_id = :p_ims_md_id}]
+ foreach description $p_descriptions {
+ set p_ims_md_an_de_id [db_nextval ims_md_annotation_descrip_seq]
+ set p_descrip_l [lindex $description 0]
+ set p_descrip_s [lindex $description 1]
- }
+ db_dml add_new_ann_descriptions {
+ insert into ims_md_annotation_descrip (ims_md_an_de_id, ims_md_an_id, descrip_l, descrip_s)
+ values (:p_ims_md_an_de_id, :p_ims_md_an_id, :p_descrip_l, :p_descrip_s)
+ }
+ }
+ }
+ # Classification
+ set classifications [lors::imsmd::mdClassification -node $lom -prefix $prefix]
+ foreach class $classifications {
+ # purpose
+ set p_ims_md_cl_id [db_nextval ims_md_classification_seq]
+ set p_purpose_s [lindex \
+ [lindex \
+ [lindex \
+ [lindex \
+ [lindex $class 0] 0] 0] 0] 1]
+ set p_purpose_v [lindex \
+ [lindex \
+ [lindex \
+ [lindex \
+ [lindex $class 0] 0] 0] 1] 1]
+ db_dml add_new_classification {
+ insert into ims_md_classification (ims_md_cl_id, ims_md_id, purpose_s, purpose_v)
+ values (:p_ims_md_cl_id, :p_ims_md_id, :p_purpose_s, :p_purpose_v)
+ }
+ # description
+ set descriptions [lindex [lindex $class 0] 1]
-
-}
+ foreach desc $descriptions {
+ set p_ims_md_cl_de_id [db_nextval ims_md_classification_desc_seq]
+ set p_descrip_l [lindex $desc 0]
+ set p_descrip_s [lindex $desc 1]
+ db_dml add_new_description {
+ insert into ims_md_classification_descrip (ims_md_cl_de_id, ims_md_cl_id, descrip_l, descrip_s)
+ values (:p_ims_md_cl_de_id, :p_ims_md_cl_id, :p_descrip_l, :p_descrip_s)
+ }
+ }
+ # taxonpath
+ set taxonpaths [lindex [lindex $class 0] 2]
-namespace eval lors::imsmd::xml {
+ foreach taxonpath $taxonpaths {
+ set p_source [lindex $taxonpath 0]
-### Generic XML creating tDOM functions
-# Created just to make the super-tedious XML creation with tDOM a bit
-# easier
+ set p_source_l [lindex [lindex $p_source 0] 0]
+ set p_source_s [lindex [lindex $p_source 0] 1]
+ set p_ims_md_cl_ta_id [db_nextval ims_md_classification_taxpath_seq]
- ad_proc -public newElement {
- {-owner:required}
- {-name:required}
- } {
- Creates an XML element node
-
- @param owner owner node
- @param name element name
- @author Ernie Ghiglione (ErnieG@mm.st).
- } {
+ set taxons [lindex $taxonpath 1]
- return [[$owner ownerDocument] createElement $name]
+ db_dml add_new_taxonpaths {
+ insert into ims_md_classification_taxpath (ims_md_cl_ta_id, ims_md_cl_id, source_l, source_v)
+ values (:p_ims_md_cl_ta_id, :p_ims_md_cl_id, :p_source_l, :p_source_s)
+ }
+ foreach taxon $taxons {
+ set p_ims_md_cl_ta_ta_id [db_nextval ims_md_classification_taxpath_taxon_seq]
+ set p_hierarchy [lindex $taxon 0]
+ set p_identifier [lindex $taxon 1]
+ set p_entry_l [lindex [lindex $taxon 2] 0]
+ set p_entry_s [lindex [lindex $taxon 2] 1]
+
+ db_dml add_new_taxons {
+ insert into ims_md_classification_taxpath_taxon (ims_md_cl_ta_ta_id, ims_md_cl_ta_id, hierarchy, identifier, entry_l, entry_s)
+ values (:p_ims_md_cl_ta_ta_id, :p_ims_md_cl_ta_id, :p_hierarchy, :p_identifier, :p_entry_l, :p_entry_s)
+ }
+ }
+ }
+
+ # keywords
+ set keywords [lindex [lindex $class 0] 3]
+
+ foreach keyword $keywords {
+ set p_ims_md_cl_ke_id [db_nextval ims_md_classification_keyword_seq]
+ set p_keyword_l [lindex $keyword 0]
+ set p_keyword_s [lindex $keyword 1]
+
+ db_dml add_new_keywords {
+ insert into ims_md_classification_keyword (ims_md_cl_ke_id, ims_md_cl_id, keyword_l, keyword_s)
+ values (:p_ims_md_cl_ke_id, :p_ims_md_cl_id, :p_keyword_l, :p_keyword_s)
+ }
+ }
+ }
}
- ad_proc -public newElementText {
- {-owner:required}
- {-name:required}
- {-text:required}
+
+ ad_proc -public addMetadata {
+ {-acs_object:required}
+ {-node:required}
+ {-dir {}}
} {
- Creates an XML element with a text node
-
- @param owner owner node
- @param name element name
- @param text text
- @author Ernie Ghiglione (ErnieG@mm.st).
+ Adds metadata for a learning resource.
+
+ @option acs_object acs object for resource (element) that contains metadata.
+ @option node XML node that contains the metadata
+ @option dir directory where the imsmanifest.xml file is located. This is use in the case the metadata is in a different file location (adlcp:location).
+ @author Ernie Ghiglione (ErnieG@mm.st).
+
} {
-
- set node_text [lors::imsmd::xml::newText -owner $owner -text $text]
- set node [lors::imsmd::xml::newElement -owner $owner -name $name]
- $node appendChild $node_text
-
- return $node
+ set p_ims_md_id $acs_object
+ set mdnode $node
+ set path_to_file $dir
+ #[lors::imsmd::getMDNode $manifest]
+ set p_schema [lindex [lindex [lors::imsmd::getMDSchema $mdnode] 0] 0]
+ set p_schemaversion [lindex [lors::imsmd::getMDSchema $mdnode] 1]
+
+ set lom [lindex [lors::imsmd::getLOM $mdnode $path_to_file] 0]
+ set prefix [lindex [lors::imsmd::getLOM $mdnode $path_to_file] 1]
+
+
+ # inserts into db
+ # Checks if there's a LOM record
+ if {$lom != 0} {
+ # Adds new MD record to ims_md
+ lors::imsmd::addMDSchemaVersion \
+ -acs_object $p_ims_md_id \
+ -schema $p_schema \
+ -schemaversion $p_schemaversion
+
+ lors::imsmd::addLOM \
+ -lom $lom \
+ -prefix $prefix \
+ -acs_object $p_ims_md_id \
+ -dir $path_to_file
+ }
+ return 1
}
- ad_proc -public newText {
- {-owner:required}
- {-text:required}
+
+ ad_proc -public addMDSchemaVersion {
+ {-acs_object:required}
+ {-schema:required}
+ {-schemaversion:required}
} {
- Creates an XML Text node
-
- @param owner owner node
- @param text text
- @author Ernie Ghiglione (ErnieG@mm.st).
+ Adds MD schema and schema version to db
+ If the metedata record already exists, then it deletes it
+ and creates a new one.
+
+ @param acs_object acs object for resource (element) that contains metadata.
+ @param schema MD schema used for the learning resource.
+ @param schemaversion MD schemaversion used for the learning resource.
+ @author Ernie Ghiglione (ErnieG@mm.st)
} {
+ set p_ims_md_id $acs_object
+ set p_schema $schema
+ set p_schemaversion $schemaversion
- return [[$owner ownerDocument] createTextNode $text]
+ # we check if the MD record we are about to insert already
+ # exists. If that is the case, then we delete it first.
+ # Yes, we are not versioning metadata (as I believe there's no
+ # real point on doing so.
+ lors::imsmd::delMD -acs_object $p_ims_md_id
+ db_dml add_md {
+ insert into ims_md (ims_md_id, schema, schemaversion)
+ values (:p_ims_md_id, :p_schema, :p_schemaversion)
+ }
}
- ad_proc -public newComment {
- {-owner:required}
- {-comment:required}
+
+ ad_proc -public delMD {
+ {-acs_object:required}
} {
- Creates an XML Text node
-
- @param owner owner node
- @param comment Comment
- @author Ernie Ghiglione (ErnieG@mm.st).
+ Deletes an MD record (deletes it ALL from the db).
+
+ @param acs_object the acs object metadata we are deleting.
+ @author Ernie Ghiglione (ErnieG@mm.st).
} {
+ set p_ims_md_id $acs_object
- return [[$owner ownerDocument] createComment $comment]
-
+ # if record exists...
+ if {[db_0or1row check_md_record {select ims_md_id from ims_md where ims_md_id = :p_ims_md_id}]} {
+ # ... then delete it
+ db_dml add_md {
+ delete from ims_md where ims_md_id = :p_ims_md_id
+ }
+ }
}
-### End Generic XML creating tDOM functions
-}
+ ad_proc -public mdExist {
+ {-ims_md_id:required}
+ } {
+ Checks whether the acs_object (ims_md_id) does exist.
+ Returns 1 if that's the case, 0 otherwise
+ @param ims_md_id the acs object id
+ @author Ernie Ghiglione (ErnieG@mm.st).
+ } {
+ set p_ims_md_id $ims_md_id
+ # if record exists... returns 1
+ return [db_0or1row check_md_record {select ims_md_id from ims_md where ims_md_id = :p_ims_md_id}]
+ }
+}
-namespace eval lors::imsmd::create {
+namespace eval lors::imsmd::xml {
-### IMS MD XML creation
+ ### Generic XML creating tDOM functions
+ # Created just to make the super-tedious XML creation with tDOM a bit
+ # easier
+ ad_proc -public newElement {
+ {-owner:required}
+ {-name:required}
+ } {
+ Creates an XML element node
-## LOM data types
+ @param owner owner node
+ @param name element name
+ @author Ernie Ghiglione (ErnieG@mm.st).
+ } {
+ return [[$owner ownerDocument] createElement $name]
+ }
-# langstring
- ad_proc -public newLangString {
- {-owner:required}
- {-lang:required}
- {-string:required}
+ ad_proc -public newElementText {
+ {-owner:required}
+ {-name:required}
+ {-text:required}
} {
- Creates an LangString data type XML node
-
- @param owner owner node
- @param lang language
- @param string String
- @author Ernie Ghiglione (ErnieG@mm.st).
+ Creates an XML element with a text node
+
+ @param owner owner node
+ @param name element name
+ @param text text
+ @author Ernie Ghiglione (ErnieG@mm.st).
} {
+ set node_text [lors::imsmd::xml::newText -owner $owner -text $text]
+ set node [lors::imsmd::xml::newElement -owner $owner -name $name]
+ $node appendChild $node_text
+ return $node
+ }
- set ls_string [lors::imsmd::xml::newText -owner $owner -text $string]
- set lang_string_node [lors::imsmd::xml::newElement -owner $owner -name langstring]
- $lang_string_node setAttribute xml:lang $lang
- $lang_string_node appendChild $ls_string
- return $lang_string_node
+ ad_proc -public newText {
+ {-owner:required}
+ {-text:required}
+ } {
+ Creates an XML Text node
+
+ @param owner owner node
+ @param text text
+ @author Ernie Ghiglione (ErnieG@mm.st).
+ } {
+ return [[$owner ownerDocument] createTextNode $text]
}
- ad_proc -public md {
- {-owner:required}
- {-schema:required}
- {-schemaversion:required}
- {-lom:required}
+ ad_proc -public newComment {
+ {-owner:required}
+ {-comment:required}
} {
- Creates a metadata node.
+ Creates an XML Text node
- @param owner Owner node
- @param schema schema
- @param schemaversion schemaversion
- @param lom lom node
- @author Ernie Ghiglione (ErnieG@mm.st).
+ @param owner owner node
+ @param comment Comment
+ @author Ernie Ghiglione (ErnieG@mm.st).
} {
+ return [[$owner ownerDocument] createComment $comment]
+ }
- set metadata [lors::imsmd::xml::newElement -owner $owner -name metadata]
+ ### End Generic XML creating tDOM functions
+}
- $metadata appendChild [lors::imsmd::xml::newComment -owner $owner -comment "Generated by LORSm"]
+namespace eval lors::imsmd::create {
- set schema [lors::imsmd::xml::newElementText -owner $owner -name schema -text $schema]
- set schemaversion [lors::imsmd::xml::newElementText -owner $owner -name schemaversion -text $schemaversion]
+ ## IMS MD XML creation
+ ## LOM data types
- $metadata appendChild $schema
- $metadata appendChild $schemaversion
- $metadata appendChild $lom
-
- return $metadata
+ # langstring
+ ad_proc -public newLangString {
+ {-owner:required}
+ {-lang:required}
+ {-string:required}
+ } {
+ Creates an LangString data type XML node
+
+ @param owner owner node
+ @param lang language
+ @param string String
+ @author Ernie Ghiglione (ErnieG@mm.st).
+ } {
+ set ls_string [lors::imsmd::xml::newText -owner $owner \
+ -text $string]
+ set lang_string_node [lors::imsmd::xml::newElement -owner $owner \
+ -name langstring]
+ $lang_string_node setAttribute xml:lang $lang
+ $lang_string_node appendChild $ls_string
+ return $lang_string_node
}
- ad_proc -public lom {
- {-owner:required}
- {-general {}}
- {-lifecycle {}}
- {-metametadata {}}
- {-technical {}}
- {-educational {}}
- {-rights {}}
- {-relation {}}
- {-annotation {}}
- {-classification {}}
+ ad_proc -public md {
+ {-owner:required}
+ {-schema:required}
+ {-schemaversion:required}
+ {-lom:required}
} {
- Creates a LOM node.
- It puts together all the nodes and returns a LOMs node.
-
- @param owner ownerDocument node
- @param general General node
- @param lifecycle Lifecycle node
- @param metametadata Metametadata node
- @param technical Technical node
- @param educational Educational node
- @param rights Rights node
- @param relation Relation node
- @param annotation Annotation node
- @param classification Classification node
+ Creates a metadata node.
- @author Ernie Ghiglione (ErnieG@mm.st).
+ @param owner Owner node
+ @param schema schema
+ @param schemaversion schemaversion
+ @param lom lom node
+ @author Ernie Ghiglione (ErnieG@mm.st).
} {
+ set metadata [lors::imsmd::xml::newElement \
+ -owner $owner \
+ -name metadata]
- set lom [lors::imsmd::xml::newElement -owner $owner -name lom]
+ $metadata appendChild [lors::imsmd::xml::newComment \
+ -owner $owner \
+ -comment "Generated by LORSm"]
- if {![empty_string_p $general]} {
- $lom appendChild $general
- }
+ set schema [lors::imsmd::xml::newElementText \
+ -owner $owner \
+ -name schema \
+ -text $schema]
- if {![empty_string_p $lifecycle]} {
- $lom appendChild $lifecycle
- }
+ set schemaversion [lors::imsmd::xml::newElementText \
+ -owner $owner \
+ -name schemaversion \
+ -text $schemaversion]
- if {![empty_string_p $metametadata]} {
- $lom appendChild $metametadata
- }
+ $metadata appendChild $schema
+ $metadata appendChild $schemaversion
+ $metadata appendChild $lom
- if {![empty_string_p $technical]} {
- $lom appendChild $technical
- }
-
- if {![empty_string_p $educational]} {
- $lom appendChild $educational
- }
-
- if {![empty_string_p $rights]} {
- $lom appendChild $rights
- }
-
- if {![empty_string_p $relation]} {
- $lom appendChild $relation
- }
-
- if {![empty_string_p $annotation]} {
- $lom appendChild $annotation
- }
-
- if {![empty_string_p $classification]} {
- $lom appendChild $classification
- }
-
- return $lom
-
-
+ return $metadata
}
- ad_proc -public lom_general {
- {-owner:required}
- {-identifier {}}
- {-title {}}
- {-catalogentry {}}
- {-language {}}
- {-description {}}
- {-keyword {}}
- {-coverage {}}
- {-structure {}}
- {-aggregationlevel {}}
+ ad_proc -public lom {
+ {-owner:required}
+ {-general {}}
+ {-lifecycle {}}
+ {-metametadata {}}
+ {-technical {}}
+ {-educational {}}
+ {-rights {}}
+ {-relation {}}
+ {-annotation {}}
+ {-classification {}}
} {
- Creates a LOM general node.
- It puts together all the general nodes
+ Creates a LOM node.
+ It puts together all the nodes and returns a LOMs node.
- refer to http://www.imsglobal.org/metadata/imsmdv1p2p1/imsmd_bindv1p2p1.html
- for further details.
+ @param owner ownerDocument node
+ @param general General node
+ @param lifecycle Lifecycle node
+ @param metametadata Metametadata node
+ @param technical Technical node
+ @param educational Educational node
+ @param rights Rights node
+ @param relation Relation node
+ @param annotation Annotation node
+ @param classification Classification node
+ @author Ernie Ghiglione (ErnieG@mm.st).
+ } {
- @param owner ownerDocument node
- @param identifier identifier
- @param title Name given to the learning object. element occurs 0 or 1 time within the