Translation example

To clarify how the translation happens, an example is provided. Below is an image of the full process. This shows all the steps of a translation. Steps three and four are simply the reverse of two and one, respectively, so complete descriptions of them are omitted. In this example, MARC is being used for the interoperable core; it is not the final target of the translation. We're using MARC for the interoperable core while we develop the system.

Full process

Step one

To translate records, they must first be converted from their native format to our intermediate form. To allow for the most extensible translation system, the syntactic and semantic operations must be separated and the intermediate form is the instrument of that separation.

Step one

The intermediate form was designed to be simple and straight-forward. Each record contains one or more fields. Each field must have a name and a namespace and can have a value and any number of subfields. Values are objects unto themselves, and have several properties, including scheme, language and encoding.

Here is an abbreviated example of a GEM record. Here is the same record, in the intermediate form. Notice the "scheme" child of the "format" element in the original record is for its sibling, "contenttype". Another record format might put the scheme information in an attribute of the "contenttype" or "format" element, or as a child of the "contenttype" element. This is a trivial example of the sort of variance that necessitates the intermediate form. If the intermediate form weren't there, then a translation would be required for each variant form, even though they shared identical semantics. Regardless of where the scheme information is in the original record, after being parsed into the intermediate form it would have to be a property of the value associated with the "contenttype" field. To wit:


    text/HTML

Namespaces will be omitted from further examples.


Step two

Here's an example of a mapping of the Dublin Core title element, which is a component of GEM, to MARC.

(map  (source-element "title") (core-element "245" "a")
      (addField parent ("i1" "0"))
      (addField parent ("i2" "0"))
      (addField parent ("h" "[electronic resource]")))
Step two

For this simple mapping, the system would start by finding a "title" element in the input record. For each such element, the system would create a "245" field in the core record, with an "a" subfield. The value of the "title" element would be copied to the "a" subfield. After this, the system would look at the rest of the mapping. In this case there are three addField instructions. The second element of the addField instruction is for specifying where the fields will be added. If nothing is provided, the fields are added as children of the last field of the core-element indicator. In this case, since "parent" is specified, the fields will be added as children of "a"s parent, "245". The first element of each list is the name of the field to be added, the second element is the value for that field. So, if the input record contained, in intermediate form

English Grammar 101

The output record would contain this:


  English Grammar 101
  0
  0
  [electronic resource]
  

If there were two elements in the input record, there would be two 245 fields in the output record. <a href="if_marc.xml">This</a> is the result of the first translation of GEM in the intermediate form to our interoperable core, also in intermediate form. </p> <p> <strong>Step three</strong> would translate from the interoperable core to the final target schema, in intermediate form. <strong>Step four</strong> would turn the intermediate form of the record into the desired syntax. </p> </div> </div> </div> </div> </div> </div> <div class="cont-page extra-info"> <div class="parsys iparsys purposestmt"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="parsys iparsys purposestmt"><div class="text parbase section"> <p class="purpose-statement">We are a worldwide library cooperative, owned, governed and sustained by members since 1967. Our public purpose is a statement of commitment to each other—that we will work together to improve access to the information held in libraries around the globe, and find ways to reduce costs for libraries through collaboration.<br /> </p> </div> </div> </div> </div> </div> </div> </div> <div class="footer parsys iparsys"><div class="section"><div class="new"></div> </div><div class="iparys_inherited"><div class="footer parsys iparsys"><div class="footer section"> <!-- Footer container --> <footer class="page-footer"> <!-- footer content --> <div class="cont-page"> <div class="par parsys"><div class="parsyscolumncontrol section"> <div class="parsys_column cq-colctrl-ltf" > <div class="parsys_column cq-colctrl-ltf-c0" > <div class="parsys col0"><div class="text parbase section"> <h1>OCLC Research Headquarters</h1> <p></p> <p>6565 Kilgour Place<br /> Dublin, Ohio 43017-3395<br /> USA</p> <p></p> <p></p> <p><a href="mailto:oclcresearch@oclc.org" title="Contact us">oclcresearch@oclc.org</a><br /> +1-614-764-6000<br /> +1-800-848-5878 (USA / Canada)<br /> </p> <p></p> <h1>OCLC Research San Mateo</h1> <p></p> <p>777 Mariners Island Boulevard<br /> Suite 550<br /> San Mateo, California 94404<br /> USA</p> <p></p> <p><a href="mailto:oclcresearch@oclc.org" title="Contact us">oclcresearch@oclc.org</a><br /> +1-614-764-6000<br /> +1-800-848-5878 (USA / Canada)<br /> </p> <h1>OCLC Research Europe </h1> <p>Postbus 876<br /> 2300 AW  Leiden<br /> Nederland</p> <p><a href="mailto:oclcresearch@oclc.org" title="Contact us">oclcresearch@oclc.org</a><br /> +31-(0)71-524 65 00<br /> </p> </div> </div> </div> <div class="parsys_column cq-colctrl-ltf-c1" > <div class="parsys col1"><div class="text parbase section"> <h4>Find information for<br /> </h4> <ul> <li><a href="/careers.en.html">Job Seekers</a></li> <li><a href="/about/professional-development.en.html">Library Science Educators</a></li> <li><a href="http://worldcat.org/devnet">Developers</a></li> <li><a href="http://publishers.oclc.org/en/default.htm">Publishers</a></li> </ul> </div> </div> </div> <div class="parsys_column cq-colctrl-ltf-c2" > <div class="parsys col2"><div class="text parbase section"> <h4>Visit related sites</h4> <ul> <li><a href="http://www.oclc.org">OCLC Homepage<br /> </a></li> <li><a href="/support/">Support & Training</a></li> <li><a href="http://worldcat.org/devnet">Developer Network</a></li> <li><a href="/councils.en.html">Global and Regional Councils</a></li> </ul> </div> </div> </div> <div class="parsys_column cq-colctrl-ltf-c3" > <div class="parsys col3"><div class="text parbase section"> <ul> <li><strong><a href="/research/people.html">Contact OCLC Research staff</a></strong></li> <li><strong><a href="/research/publications/newsletters/abovethefold/subscribe.html">Subscribe to <em>Above the Fold</em></a></strong></li> <li><strong><a href="/membership/governance.en.html">Learn about OCLC governance</a></strong></li> <li><strong><a href="/global-council-directory.en.html">Find your Global Council delegate</a></strong></li> </ul> </div> </div> </div> </div></div> </div> <div style="clear: both"></div> </div> <div class="connect-bar mod"> <div class="cont-page"> <!-- Media Links --> <ul class="media-links"> <li> <a href="https://www.youtube.com/user/oclcresearch" title="Watch Videos on YouTube" class="media-video">Videos</a> </li> <li> <a href="/news/blogs.en.html" title="Read our blogs" class="media-blogs">Blogs</a> </li> <li> <a href="/research/publications/newsletters.html.html" title="Get the latest issues of our newsletters" class="media-newsletters">Newsletters</a> </li> </ul> <!-- ComputerWorld logo should only appear on US/EN site --> <!-- Follow Links --> <section class="follow-links"> <p>Follow Us</p> <ul> <li> <a href="https://twitter.com/#!/search/from:rtennant%20OR%20from:lorcanD%20OR%20from:merrileeiam%20OR%20from:echildress%20OR%20from:ConstanceM%20OR%20from:minniedw%20OR%20from:mrenspie%20OR%20from:rickyerway%20OR%20from:KarenS_Y?q=from%3Artennant+OR+from%3AlorcanD+OR+from%3Amerrileeiam+OR+from%3Aechildress+OR+from%3AConstanceM+OR+from%3Aminniedw+OR+from%3Amrenspie+OR+from%3Arickyerway+OR+from%3AKarenS_Y" title="Follow our Twitter feeds" class="follow-twitter">Twitter</a> </li> <li> <a href="http://www.facebook.com/OCLCResearch" title="OCLC Research on facebook" class="follow-facebook">Facebook</a> </li> <li> <a href="https://www.youtube.com/user/oclcresearch" title="Watch our videos on YouTube" class="follow-youtube">YouTube</a> </li> <li> <a href="http://www.flickr.com/photos/oclcpar/" title="View our pictures on Flickr" class="follow-flickr">Flickr</a> </li> <li> <a href="http://www.oclc.org/research/news/feed.xml" title="Follow our RSS News feed" class="follow-rss">RSS Feeds</a> </li> </ul> </section> </div> </div> <!-- Copyright --> <div class="cont-page copyright"> <div class="text parbase"> <p><a href="/policies/copyright.en.html">© 2014 OCLC</a><br /> <a href="/content/dam/oclc/about/styleguide/trademarks.pdf" target="_blank">Domestic and international trademarks and/or service marks of OCLC Online Computer Library Center, Inc. and its affiliates</a></p> <ul> <li><a href="https://www3.oclc.org/app/contac/">Feedback</a></li> <li><a href="/policies/privacy.en.html">Privacy policy</a></li> <li><a href="/policies/iso.en.html">ISO 9001 Certificate</a></li> <li><a href="/policies/security.en.html">ISO 27001 Certificate</a></li> </ul> </div> </div> </footer> </div> <div class="customjavascript section"><!-- Crazyegg tracking code begin--> <script type="text/javascript"> setTimeout(function(){var a=document.createElement("script"); var b=document.getElementsByTagName("script")[0]; a.src=document.location.protocol+"//dnn506yrbagrg.cloudfront.net/pages/scripts/0018/3695.js?"+Math.floor(new Date().getTime()/3600000); a.async=true;a.type="text/javascript";b.parentNode.insertBefore(a,b)}, 1); </script> <!-- Crazyegg tracking code end--> <!-- Google analytics begin--> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-45933103-1', 'oclc.org'); ga('send', 'pageview'); </script> <!-- Google analytics end--></div> </div> </div> </div> <!-- SiteCatalyst BEGIN --> <!-- Research --> <!-- SiteCatalyst code version: H.24.3. Copyright 1996-2012 Adobe, Inc. All Rights Reserved More info available at http://www.omniture.com --> <script type="text/javascript"> var resrch_s_code_js = "/apps/oclc/docroot/js/resrch_s_code_v1.js"; document.write(unescape("%3Cscript src='" + resrch_s_code_js + "' language='JavaScript' type='text/javascript'%3E%3C/script%3E")); </script> <script language="JavaScript" type="text/javascript"><!-- /* You may give each page an identifying name, server, and channel on the next lines. */ s.pageName="example (/content/research/activities/mswitch/example)" s.server="" s.channel="Unassigned" s.pageType="" s.prop1="" s.prop2="" s.prop3="" s.prop4="" s.prop5="" /* Conversion Variables */ s.campaign="" s.state="" s.zip="" s.events="" s.products="" s.purchaseID="" s.eVar1="" s.eVar2="" s.eVar3="" s.eVar4="" s.eVar5="" /************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ var s_code=s.t();if(s_code)document.write(s_code)//--></script> <script language="JavaScript" type="text/javascript"><!-- if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-') //--></script><noscript><img src="http://oclc.112.2o7.net/b/ss/oclcresearch-dev/1/H.24.3--NS/0" height="1" width="1" border="0" alt=""/></noscript><!--/DO NOT REMOVE/--> <!-- End SiteCatalyst code version: H.24.3. --> <!-- SiteCatalyst END --></body> </html>