Annotation of nsdl/prototypes/metadata_convert.pl, revision 1.5
1.1 harris41 1: use XML::Xalan;
2:
3: my $tr = new XML::Xalan::Transformer;
4:
5: my $LONCAPA_metadata=(<<END);
6: <abstract></abstract>
7: <author>Felicia Berryman, MSU HHMI First Year Online Biology</author>
8: <copyright>default</copyright>
9: <creationdate>1011110523</creationdate>
10: <dependencies></dependencies>
11: <keywords>biomolecules,practice</keywords>
12: <language>seniso</language>
13: <lastrevisiondate>1011110523</lastrevisiondate>
14: <mime>html</mime>
15: <notes></notes>
1.2 harris41 16: <owner>bio\@msu, bio\@msu (Michigan State University), bio\@msu (Michigan State University), bio\@msu (Michigan State University)</owner>
1.1 harris41 17: <subject>Bio Information, Large Biomolecules - Intro, Large Biomolecules - Review</subject>
1.2 harris41 18: <title>Test title</title>
1.1 harris41 19: END
20:
1.2 harris41 21: # ---------------------------------------------------- The 16 major nsdl fields
22: # Audience
23: # Publisher
24: # Contributor
25: # Relation
26: # Coverage
27: # Resource Identifier
28: # Creator
29: # Resource Type
30: # Date
31: # Rights
32: # Description
33: # Source
34: # Format
35: # Subject & Keywords
36: # Language
37: # Title
1.5 ! harris41 38:
! 39:
1.2 harris41 40: # --------------- also need educational recommended fields
1.5 ! harris41 41: # http://dublincore.org/documents/2000/10/05/education-namespace/
! 42: # dc-ed:audience
! 43: # dc-ed:standard Element
! 44: # dc-ed:conformsTo (Qualifier to the dc:relation)
! 45: # endorsement of the use of the InteractivityType,
! 46: # InteractivityLevel, and TypicalLearningTime data elements (Education Category: 5.1, 5.3, and 5.9 respectively) from the IEEE Learning
! 47: # Object Metadata (LOM) standard for P1484.12.
! 48:
1.2 harris41 49:
50: # (there are also other identified cross-walk strategies for 8 other metadata
51: # standards)
1.5 ! harris41 52: # crosswalks - http://128.253.121.110/NSDLmetaWG/IntroPage.html
! 53:
1.2 harris41 54:
1.1 harris41 55: #http://metamanagement.comm.nsdlib.org/overview.html#NSDL
56: #http://www.dlib.vt.edu/projects/OAi/marcxml/marcxml.html
57: #http://www.openarchives.org/OAI/openarchivesprotocol.html
1.2 harris41 58: # ">
1.4 harris41 59: my $namespace='http://ExternalFunction/';
60: my $func = sub {
61: my $text = shift;
62: return uc($text);
63: };
64:
65: $tr->install_function($namespace, 'plain-text', $func);
66:
67:
1.1 harris41 68: my $NSDL_metadata1=(<<END);
1.2 harris41 69: <?xml version="1.0"?>
1.3 harris41 70: <dc xmlns="http://purl.org/dc/elements/1.1/"
71: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
72: xsi:schemaLocation="http://purl.org/dc/elements/1.1
73: http://www.openarchives.org/OAI/1.1/dc.xsd">
1.1 harris41 74: <title>The Cornell Law Quarterly</title>
75: <date>1915-1916</date>
76: <identifier>http://heinonline.org/HeinOnline/show.pl?
77: handle=hein.journals/clqv1%26id=1%26size=4</identifier>
78: <rights>Available by Subscription. See http://www.wshein.com</rights>
79: </dc>
80: END
1.2 harris41 81: open(OUT,'>tmpdc.xml');
82: print(OUT <<END);
83: $NSDL_metadata1
84: END
85: close(OUT);
86:
1.1 harris41 87: my $NSDL_metadata2=(<<END);
88: <dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/"
89: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
90: xsi:schemaLocation="http://purl.org/dc/elements/1.1/
91: http://www.openarchives.org/OAI/1.1/dc.xsd">
92: <dc:title>Grassmann's space analysis</dc:title>
93: <dc:creator>Hyde, E. W. (Edward Wyllys)</dc:creator>
94: <dc:subject>LCSH:Ausdehnungslehre; LCCN QA205.H99</dc:subject>
95: <dc:publisher>J. Wiley & Sons</dc:publisher>
96: <dc:date>Created: 1906; Available: 1991</dc:date>
97: <dc:type>text</dc:type>
98: <dc:identifier>http://resolver.library.cornell.edu/math/1796949</dc:identifier>
99: <dc:language>eng</dc:language>
100: <dc:rights>Public Domain</dc:rights>
101: </dc:dc>
102: END
103:
1.2 harris41 104: open(OUT,'>tmploncapa.xml');
105: print(OUT <<END);
106: <?xml version="1.0"?>
107: <loncapa>
108: $LONCAPA_metadata
109: </loncapa>
110: END
111: close(OUT);
112:
113: # probably also want to protect dc name-space
114: open(OUT,'>tmpl2n.xsl');
115: print(OUT <<END);
116: <?xml version="1.0"?>
117: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
118: <xsl:template match="loncapa">
119: <dc>
120: <xsl:text>
121: </xsl:text>
122: <creator>
123: <xsl:value-of select="author"/>
124: </creator>
125: <xsl:text>
126: </xsl:text>
127: <publisher><xsl:value-of select="owner"/></publisher>
128: <xsl:text>
129: </xsl:text>
130: <title><xsl:value-of select="title"/></title>
131: <xsl:text disable-output-escaping="yes">
132: <!-- NEED TO IMPLEMENT -->
133: <!-- converted from LON-CAPA language tag to Dublin Core language tag -->
134: </xsl:text>
135: <language><xsl:value-of select="language"/></language>
136: <xsl:text disable-output-escaping="yes">
137: <!-- NEED TO IMPLEMENT -->
138: <!-- converted from LON-CAPA seconds since 1/1/1970 to standard
139: calendar values -->
140: </xsl:text>
141: <date>
142: Created: <xsl:value-of select="creationdate"/>;
143: Last revised: <xsl:value-of select="lastrevisiondate"/>
144: </date>
145: <xsl:text disable-output-escaping="yes">
146: <!-- NEED TO IMPLEMENT -->
147: <!-- allow some sort of mapping to Library of Congress or Dewey Decimal
148: standard subject mapping -->
149: </xsl:text>
150: <subject><xsl:value-of select="subject"/></subject>
151: <xsl:text>
152: </xsl:text>
153: <xsl:text disable-output-escaping="yes">
154: <!-- NEED TO IMPLEMENT -->
155: </xsl:text>
156: <audience>unknown mapping</audience>
157: <xsl:text>
158: </xsl:text>
159: <xsl:text disable-output-escaping="yes">
160: <!-- NEED TO IMPLEMENT -->
161: </xsl:text>
162: <contributor>unknown mapping (coauthors?)</contributor>
163: <xsl:text>
164: </xsl:text>
165: <xsl:text disable-output-escaping="yes">
166: <!-- NEED TO IMPLEMENT -->
167: </xsl:text>
168: <relation>unknown mapping... prerequisite/postrequisite info could go here</relation>
169: <xsl:text>
170: </xsl:text>
171: <xsl:text disable-output-escaping="yes">
172: <!-- NEED TO IMPLEMENT -->
173: </xsl:text>
174: <coverage>unknown mapping</coverage>
175: <xsl:text>
176: </xsl:text>
177: <xsl:text disable-output-escaping="yes">
178: <!-- NEED TO IMPLEMENT -->
179: </xsl:text>
180: <identifier>the gateway url</identifier>
181: <xsl:text>
182: </xsl:text>
183: <xsl:text disable-output-escaping="yes">
184: <!-- NEED TO IMPLEMENT -->
185: <!-- probably mapping from LON-CAPA mime typing -->
186: </xsl:text>
187: <resourcetype>n/a</resourcetype>
188: <xsl:text disable-output-escaping="yes">
189: <!-- NEED TO IMPLEMENT -->
190: <!-- probably mapping from LON-CAPA copyright -->
191: </xsl:text>
192: <rights>n/a</rights>
193: <description><xsl:value-of select="abstract"/></description>
194: <xsl:text>
195: </xsl:text>
196: # Source
197: <xsl:text disable-output-escaping="yes">
198: <!-- NEED TO IMPLEMENT -->
199: </xsl:text>
200: <format>software and hardware needed</format>
201: <xsl:text disable-output-escaping="yes">
202: <!-- NEED TO IMPLEMENT -->
203: </xsl:text>
204: <subjectandkeywords>need to break things into formal "classification" tag to insert keywords</subjectandkeywords>
205: <xsl:text>
206: </xsl:text>
207: </dc>
208: </xsl:template>
209: </xsl:stylesheet>
210: END
211: close(OUT);
212:
213: # probably also want to protect dc name-space
214: open(OUT,'>tmpn2l.xsl');
215: print(OUT <<END);
216: <?xml version="1.0"?>
1.4 harris41 217: <xsl:stylesheet
218: xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
219: xmlns:external="$namespace"
220: >
1.2 harris41 221: <xsl:template match="/">
222: <loncapa>
223: <xsl:text>
224: </xsl:text>
225: <xsl:apply-templates select="/*/dc:*"/>
226: </loncapa>
227: <xsl:text>
228: </xsl:text>
229: </xsl:template>
230: <xsl:template match="dc:title">
1.4 harris41 231: <title>
232: <xsl:choose>
233: <xsl:when test="function-available('external:plain-text')">
234: <xsl:value-of select="external:plain-text(.)"/>
235: </xsl:when>
236: <xsl:otherwise>
237: Function external:plain-text() is not available!
238: </xsl:otherwise>
239: </xsl:choose>
240: </title>
1.2 harris41 241: <xsl:text>
242: </xsl:text>
243: </xsl:template>
244: <xsl:template match="dc:date">
245: <date><xsl:value-of select="."/></date>
246: <xsl:text>
247: </xsl:text>
248: </xsl:template>
249: <xsl:template match="dc:rights">
250: <copyright><xsl:value-of select="."/></copyright>
251: <xsl:text>
252: </xsl:text>
253: </xsl:template>
254: <xsl:template match="dc:identifier">
255: <dc:identifier><xsl:value-of select="."/></dc:identifier>
256: <xsl:text>
257: </xsl:text>
258: </xsl:template>
259: </xsl:stylesheet>
260: END
261: close(OUT);
262:
263: # ---------------------------------- LON-CAPA to NSDL (Dublic Core PLUS format)
264: my $compiled = $tr->compile_stylesheet_file("tmpl2n.xsl");
265: my $parsed = $tr->parse_file("tmploncapa.xml");
266: my $dest_file="l2n.xml";
267: $tr->transform_to_file($parsed, $compiled, $dest_file)
268: or die $tr->errstr;
269:
270: # ---------------------------------- NSDL (Dublic Core PLUS format) to LON-CAPA
271: my $compiled = $tr->compile_stylesheet_file("tmpn2l.xsl");
272: my $parsed = $tr->parse_file("tmpdc.xml");
273: my $dest_file="n2l.xml";
274: $tr->transform_to_file($parsed, $compiled, $dest_file)
275: or die $tr->errstr;
1.1 harris41 276:
1.2 harris41 277: # ---------------------------------- test
278: my $compiled = $tr->compile_stylesheet_file("test1.xsl");
279: my $parsed = $tr->parse_file("test1.xml");
280: my $dest_file="test1out.xml";
1.1 harris41 281: $tr->transform_to_file($parsed, $compiled, $dest_file)
282: or die $tr->errstr;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>