<!--
	MusicXML Opus DTD

	Version 1.0 - 13 January 2004
	
	Copyright © 2004 Recordare LLC.
	http://www.recordare.com/
	
	This MusicXML work is being provided by the copyright
	holder under the MusicXML Document Type Definition 
	Public License Version 1.02, available from:
	
		http://www.recordare.com/dtds/license.html
-->

<!--
	An opus collects MusicXML scores together into a larger
	entity. The individual scores could be movements in a
	symphony, scenes or acts in an opera, or songs in an
	album. The opus definition allows arbitrary nesting
	either via an opus (included in the document) or an
	opus-link (linked like scores). Future versions of
	MusicXML may expand this DTD to include reference
	data and other metadata related to musical scores.
	
	Suggested use:
	
	<!DOCTYPE opus PUBLIC
		"-//Recordare//DTD MusicXML 1.0 Opus//EN"
		"http://www.musicxml.org/dtds/opus.dtd">
-->

<!-- Component DTDs -->

<!-- XLink attributes DTD. -->
<!ENTITY % link PUBLIC
	"-//Recordare//ELEMENTS MusicXML 1.0 Link//EN"
	 "link.dtd">
%link;

<!-- Elements -->

<!--
	Opus is the document element.
-->
<!ELEMENT opus (title?, (opus | opus-link | score)*)>

<!--
	Scores provide the links to the individual movements.
-->
<!ELEMENT score EMPTY>
<!ATTLIST score %link-attributes;>

<!--
	An opus-link provides a link to another opus document,
	allowing for multiple levels of opus collections via
	linking as well as nesting.
-->
<!ELEMENT opus-link EMPTY>
<!ATTLIST opus-link %link-attributes;>

<!--
	Future versions may include metadata elements. In
	this version, we just include the title of the opus.
-->
<!ELEMENT title (#PCDATA)>

<SCRIPT language="Javascript">
<!--

// FILE ARCHIVED ON 20040916005923 AND RETRIEVED FROM THE
// INTERNET ARCHIVE ON 20070826202222.
// JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE.
// ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C.
// SECTION 108(a)(3)).

   var sWayBackCGI = "http://web.archive.org/web/20040916005923/";

   function xResolveUrl(url) {
      var image = new Image();
      image.src = url;
      return image.src;
   }
   function xLateUrl(aCollection, sProp) {
      var i = 0;
      for(i = 0; i < aCollection.length; i++) {
         if (typeof(aCollection[i][sProp]) == "string") { 
          if (aCollection[i][sProp].indexOf("mailto:") == -1 &&
             aCollection[i][sProp].indexOf("javascript:") == -1) {
            if(aCollection[i][sProp].indexOf("http") == 0) {
                aCollection[i][sProp] = sWayBackCGI + aCollection[i][sProp];
            } else {
                aCollection[i][sProp] = sWayBackCGI + xResolveUrl(aCollection[i][sProp]);
            }
         }
         }
      }
   }

   xLateUrl(document.getElementsByTagName("IMG"),"src");
   xLateUrl(document.getElementsByTagName("A"),"href");
   xLateUrl(document.getElementsByTagName("AREA"),"href");
   xLateUrl(document.getElementsByTagName("OBJECT"),"codebase");
   xLateUrl(document.getElementsByTagName("OBJECT"),"data");
   xLateUrl(document.getElementsByTagName("APPLET"),"codebase");
   xLateUrl(document.getElementsByTagName("APPLET"),"archive");
   xLateUrl(document.getElementsByTagName("EMBED"),"src");
   xLateUrl(document.getElementsByTagName("BODY"),"background");
   var forms = document.getElementsByTagName("FORM");
   if (forms) {
       var j = 0;
       for (j = 0; j < forms.length; j++) {
              f = forms[j];
              if (typeof(f.action)  == "string") {
                 if(typeof(f.method)  == "string") {
                     if(typeof(f.method) != "post") {
                        f.action = sWayBackCGI + f.action;
                     }
                  }
              }
        }
    }


//-->
</SCRIPT>

