<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog.humaneguitarist.org &#187; MusicXML</title>
	<atom:link href="http://blog.humaneguitarist.org/tag/musicxml/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.humaneguitarist.org</link>
	<description>discoveries in digital audio, music notation, and information encoding</description>
	<lastBuildDate>Tue, 07 Feb 2012 03:33:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>MakeMusic makes a great move in hiring Good</title>
		<link>http://blog.humaneguitarist.org/2011/11/06/makemusic-makes-a-great-move-in-hiring-good/</link>
		<comments>http://blog.humaneguitarist.org/2011/11/06/makemusic-makes-a-great-move-in-hiring-good/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 14:04:36 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[music notation]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[Finale]]></category>
		<category><![CDATA[MakeMusic]]></category>
		<category><![CDATA[MusicXML]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=3580</guid>
		<description><![CDATA[MakeMusic, the company behind Finale, has entered into an agreement to purchase Recordare. You can see the press release here but here&#39;s the really important part (hyperlinks mine): Under the terms of the agreement, MakeMusic is purchasing the MusicXML&#8482; open format and Dolet&#174; software technology, including copyrights, source code, and trademarks. MakeMusic also announced that [...]]]></description>
			<content:encoded><![CDATA[<p>MakeMusic, the company behind <a href="http://www.finalemusic.com/finale/default.aspx">Finale</a>, has entered into an agreement to purchase <a href="http://www.recordare.com/">Recordare</a>. You can see the press release <a href="http://www.makemusic.com/press_releases.aspx?pid=526">here</a> but here&#39;s the really important part (hyperlinks mine):</p>
<blockquote>
<p>Under the terms of the agreement, MakeMusic is purchasing the <a href="http://www.recordare.com/musicxml">MusicXML</a>&trade; open format and Dolet&reg; software technology, including copyrights, source code, and trademarks. MakeMusic also announced that the founder of Recordare and inventor of MusicXML, <a href="http://www.linkedin.com/in/michaelgood">Michael Good</a>, will be joining MakeMusic as the Director of Digital Sheet Music.</p>
</blockquote>
<p>A few people, myself included, were both excited for Recordare/Good but were also wondering what this means for the future of MusicXML in terms of remaining open so here&#39;s the scoop &#8211; posted on November 2, 2011 &#8211; from Michael Good himself on the <a href="http://www.recordare.com/musicxml/mailing-list">MusicXML discussion list</a>:</p>
<blockquote>
<p>&nbsp;&#8230; MusicXML will remain an open format. MusicXML will continue to be licensed under the same open, royalty-free terms it has today. MusicXML&#39;s value comes from being an open format that anybody can freely use in their products and services. That will not change. Community development of future versions of the MusicXML format will not change. What will change is that MusicXML will now be supported with a larger company with more resources. There are exciting possibilities ahead!</p>
</blockquote>
<p>Personally, I&#39;m not worried.</p>
<p>In terms of XML approaches to music encoding, there&#39;s MusicXML and then there&#39;s everything else. Mr. Good&#39;s known all along that building relationships that ensure software support is a key to success for the format. He&#39;s even been kind to the little guys: emailing me and commenting on this blog in regard to some of my work with MusicXML for digital libraries.</p>
<p>So congratulations to Michael Good and MusicXML. I&#39;m looking forward to hearing the next movement.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2011/11/06/makemusic-makes-a-great-move-in-hiring-good/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MXMLiszt version 0.9.2 released</title>
		<link>http://blog.humaneguitarist.org/2011/07/23/mxmliszt-version-0-9-2-released/</link>
		<comments>http://blog.humaneguitarist.org/2011/07/23/mxmliszt-version-0-9-2-released/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 14:29:18 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[music notation]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[MusicXML]]></category>
		<category><![CDATA[MXMLiszt]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=2922</guid>
		<description><![CDATA[If anyone&#39;s interested, MXMLiszt version 0.9.2 is now available for download. MXMLiszt is a web-based delivery and search/retrieval environment for MusicXML files and their manifestations. The documentation and source-code download links are available here. Here&#39;s the changelog: 0.9.2 - included Bach and Schubert MusicXML files from MusicSQL project (http://musicsql.googlecode.com/). - For the Bach, cleaned up [...]]]></description>
			<content:encoded><![CDATA[<p>If anyone&#39;s interested, MXMLiszt version 0.9.2 is now available for download.</p>
<p><font size="2">MXMLiszt is a web-based delivery and search/retrieval environment for </font><a href="http://www.recordare.com/musicxml"><font size="2">MusicXML</font></a><font size="2"> files and their manifestations. </font></p>
<p>The documentation and source-code download links are available <a href="http://blog.humaneguitarist.org/projects/mxmliszt/">here</a>.</p>
<p>Here&#39;s the changelog:</p>
<pre class="brush:text">0.9.2
- included Bach and Schubert MusicXML files from MusicSQL project (http://musicsql.googlecode.com/).
    - For the Bach, cleaned up diacritics (in titles only) and changed &quot;Soprano&quot;, etc. to &quot;Soprano&quot;, etc.
        - diacritics are still messed up in lyrics. I&#39;m too lazy to fix them. :]
    - For the Schubert, changed &quot;Part_1&quot; through &quot;Part_4&quot; to &quot;Violin 1&quot;, &quot;Violin 2&quot;, &quot;Viola&quot;, and &quot;Cello&quot;.
    - original files available here:

http://musicsql.googlecode.com/files/Bach_SATB-1.0.zip

http://musicsql.googlecode.com/files/Schubert_quartets-1.0.zip

- adjusted &lt;hr&gt; rules in style.css to accomodate Internet Explorer 9
    - Removed &quot;optimized for Firefox&quot; in welcome.php since MXMLiszt now works well in IE, Firefox, Chrome, Safari, and Opera (see below).
- fixed generateIndex.php so the &lt;img&gt; tag now closes in this line:
        echo nl2br(&#39;&lt;img src=&quot;png/&#39; . $filenamePlain . &#39;.pre.png&quot; /&gt;&#39;); //line #12
    - This was the only reason the Index view wasn&#39;t working in Opera.
        - Opera was the only browser that caught this error. :]
- made &quot;Results&quot; header for search results an &lt;h2&gt;, just as with the MIR results header.
- added two modules: startWatch.php and stopWatch.php to reduce coding redundancy in regard to reporting the time it takes for actions to finish.
- changed mxml2mods.xsl to output the MODS namespace.
    - adjusted mods.xsl, loadMODSasDC.php, and XQuery syntax as needed.
    - Sample XQueries using a namespace prefix:

        This is a Faust query example:
                    declare namespace mods = &quot;http://www.loc.gov/mods/v3&quot;;
                    for $x in doc(&quot;../concat/concatMODS.xml&quot;)/hyperMODS/hypoMODS/mods:mods
                    let $x1 := $x//mods:subTitle
                    return $x1

        This is a Dante example:
                    declare namespace mods = &quot;http://www.loc.gov/mods/v3&quot;;
                    for $x in doc(&quot;../concat/concatMODS.xml&quot;)/hyperMODS/hypoMODS
                    let $x1 := $x/mods:mods
                    where $x1//mods:subTitle contains text &quot;You&quot;
                    return data($x/@file)

- simplified some of the built in MODS related XQueries (same functionality, just less wordy).
- changed order of MODS search drop down terms on Search page.
- changed &lt;i&gt; and &lt;b&gt; to &lt;em&gt; and &lt;strong&gt;, respectively.
- replaced &quot;pop1&quot;, etc. with better-named CSS variables like stickyNote and IndexPopup, etc. in style.css.
- added a streamed comment in each module with a one or two sentence description of what it does.
- added .htaccess file.
    - to hide root folder.
    - to make the &quot;/~foo.xml&quot; forward (with masking) to:&quot;transmuteMXML.php$fname=musicXML/foo.xml&quot;.
        - adjusted mxml2mods.xsl accordingly.
    - to hide directory icons.
    - to use fancy indexing.
- changed displayMODS.php to display MODS files via an &lt;iframe&gt; only as a fallback if PHP XSL processing not available on server.
_______________________________________________________________________
0.9.1
- created mods.css file to display MODS on a transparent background.
- changed displayMODS.php to display MODS files via an &lt;iframe&gt;.
    - The previous version was using the mods.xsl stylesheet to parse the MODS element values in real-time.
_______________________________________________________________________
0.9.0
- this was the first version - that worked!
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2011/07/23/mxmliszt-version-0-9-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a MusicXML test suite by R. Kainhofer</title>
		<link>http://blog.humaneguitarist.org/2010/05/23/a-musicxml-test-suite-by-r-kainhofer/</link>
		<comments>http://blog.humaneguitarist.org/2010/05/23/a-musicxml-test-suite-by-r-kainhofer/#comments</comments>
		<pubDate>Sun, 23 May 2010 16:16:54 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[music notation]]></category>
		<category><![CDATA[Kainhofer]]></category>
		<category><![CDATA[Lilypond]]></category>
		<category><![CDATA[MusicXML]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=972</guid>
		<description><![CDATA[From the latest edition (issue #18) of the Lilypond Report: Conference sightings! (by Valentin Villenave) Reinhold appeared at the Linux Audio Conference in Utrecht / Netherlands, presenting two papers: R. Kainhofer: A MusicXML Test Suite and a Discussion of Issues in MusicXML R. Kainhofer: OrchestralLily: A Package for Professional Music Publishing with LilyPond and LaTeX [...]]]></description>
			<content:encoded><![CDATA[<p>From the latest edition (issue #18) of the<a href="http://news.lilynet.net/"> Lilypond Report</a>:</p>
<blockquote>
<h3 class="spip" id="outil_sommaire_3">Conference sightings!</h3>
<p><em>(by Valentin Villenave)</em></p>
<p>Reinhold appeared at the Linux Audio Conference in Utrecht / Netherlands, presenting two papers:</p>
<ul class="spip">
<li>R. Kainhofer: A MusicXML Test Suite and a Discussion of Issues in MusicXML</li>
<li>R. Kainhofer: OrchestralLily: A Package for Professional Music Publishing with LilyPond and LaTeX</li>
</ul>
</blockquote>
<p>Kainhofer wrote the musicxml2ly Python script that comes bundled with Lilypond.</p>
<p>This morning I&nbsp;read the first paper:</p>
<p><em>R. Kainhofer: <a href="http://reinhold.kainhofer.com/Papers/Kainhofer_MusicXML_Testsuite_LAC2010.pdf"><strong>A MusicXML Test Suite and a Discussion of Issues in MusicXML 2.0</strong></a>, Proceedings of the LAC 2010 Conference, Utrecht, 2010</em>.</p>
<p>It was great. Although I&nbsp;would really need to known MusicXML 2.0 from memory to pick up on everything, the paper discusses some tests regarding MusicXML 2.0 and discusses some of its current limitations and the effect on import/export from other notation applications. He also discusses how&nbsp; some of the format&#39;s ambiguities create problems in trying to convert MusicXML to Lilypond.</p>
<p>Anyone who&#39;s worked with MusicXML and several GUI&nbsp;notation apps probably knows that there are some rendering inconsistencies across different GUI&nbsp;music notation apps and it was good to get a better idea of the reasons behind this.</p>
<p>Also of interest was, from what I&nbsp;can gather, the limitations that the original DTD&nbsp;for MusicXML has imposed on MusicXML 2.0 which using an XSD schema &#8211; as backwards compatibility with earlier incarnations of MusicXML&nbsp;is desired. That is to say limitations of the DTD&nbsp;are inherited by the XSD.</p>
<p>Kainhofer offers some suggestions regarding any upcoming incarnations of MusicXML to deal with some of the aformentioned rendering problems as well as programmatic difficulties that arise in the occasional cases where MusicXML isn&#39;t as explicit as it perhaps could be.</p>
<p>Far from a landslide of criticism however, Kainhofer concludes with this:</p>
<blockquote>
<p>MusicXML is a very useful format for the extremely hard and complex task of music notation exchange. As the OSF specication has already shown, one can expect that future versions of MusicXML will clarify, solve or at least soften most of the issues we discuss here.</p>
</blockquote>
<p>ps: OSF refers to the Open Score Format: <a href="http://openscoreformat.sourceforge.net/">http://openscoreformat.sourceforge.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2010/05/23/a-musicxml-test-suite-by-r-kainhofer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LS-598 #1: intro</title>
		<link>http://blog.humaneguitarist.org/2010/01/23/ls-598-1-intro/</link>
		<comments>http://blog.humaneguitarist.org/2010/01/23/ls-598-1-intro/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 21:44:16 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[music notation]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[MusicXML]]></category>
		<category><![CDATA[MXMLiszt]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[server side]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=734</guid>
		<description><![CDATA[This is my final semester at the School of Library and Information Studies at the University of Alabama. For my final credits, I&#8217;ll be researching the digital encoding of symbolic music representation (SMR), i.e. &#34;sheet music&#34;, its background, and the benefits it offers over simply thinking of SMR as an image &#8211; all within the [...]]]></description>
			<content:encoded><![CDATA[<p>This is my final semester at the <a href="http://www.slis.ua.edu/">School of Library and Information Studies</a> at the University of Alabama.</p>
<p>For my final credits, I&#8217;ll be researching the digital encoding of symbolic music representation (SMR), i.e. &quot;sheet music&quot;, its background, and the benefits it offers over simply thinking of SMR as an image &#8211; all within the context of libraries, including avenues of web-based delivery, preservation and metadata, and search and retrieval technologies. My research will be directed by <a href="http://www.slis.ua.edu/Maccall.html">Dr. Steven MacCall</a>.</p>
<p>In addition to a paper addressing these issues, I&#8217;m required to deliver what is essentially a &quot;demo&quot; of a MusicXML web-based delivery system that could serve to demonstrate to librarians the possibilities that arise with the usage of XML-encoded musical information.</p>
<p>I&#8217;ll be blogging along this semester as part of a modular approach to constructing the paper. Currently, I&#8217;m plugging away at the demo which utilizes open-source server-side music applications.</p>
<p>The first idea behind the demo is that one could &quot;drop&quot;&nbsp;MusicXML documents on their server and &#8211; via automation &#8211; PDF, audio, and preliminary Dublin Core metadata are generated. So far, I&#8217;ve got all that covered but I need to polish the output and I&nbsp;really need to comment-up my PHP&nbsp;code as I&#8217;m even forgetting at times what I&#8217;ve done and why. I&#8217;ll be sharing the code as well as the XSL transformations that are used to generate the Dublin Core metadata from the MusicXML documents.</p>
<p>As time allows, I&#8217;ll try and add some cool features. For example, this week I&nbsp;implemented <a href="http://libmusicxml.sourceforge.net/">libmusicxml</a> so that the user can generate a PDF of a musical score in a different key than the original. I&#8217;m guessing this is the same way that the <a href="http://www.wikifonia.org/">Wikifonia</a> site offers this transposition option. I&#8217;ll have to ask them to make sure.</p>
<p>The second idea behind the demo is to implement a search/retrieval mechanism using XQuery. This will prove the biggest challenge as I&nbsp;don&#8217;t know XQuery well, but I&nbsp;have some excellent sources on querying MusicXML documents from which I&nbsp;can learn. Implementing XQuery on the site has &#8211; for the most part &#8211; already been dealt with in terms of scripting. In other words, the hard, hard work is done in terms of the demo, but I&#8217;m not quite there yet &#8230;</p>
<p>ps:&nbsp;Unfortunately, the server-side software required to run the demo can&#8217;t be added to a free server like the one I&nbsp;use for this blog. But while I&nbsp;can&#8217;t host the demo, I will at the end of the semester offer it as a download-able package so that one can run it on their personal computer as server.</p>
<hr />
<p><span style="font-size: smaller;">This blog post is part of a semester-long investigation into digital encoding of symbolic music representation (SMR), its context in libraries, web-based delivery, preservation and metadata, and search and retrieval technologies.</span><span style="font-size: smaller;"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2010/01/23/ls-598-1-intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MusicSQL: initial thoughts</title>
		<link>http://blog.humaneguitarist.org/2009/11/15/musicsql-initial-thoughts/</link>
		<comments>http://blog.humaneguitarist.org/2009/11/15/musicsql-initial-thoughts/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 20:54:25 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[information retrieval]]></category>
		<category><![CDATA[music notation]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Lilypond]]></category>
		<category><![CDATA[MusicSQL]]></category>
		<category><![CDATA[MusicXML]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=493</guid>
		<description><![CDATA[One of the nice things about an emerging standard, namely MusicXML, having a command center (Recordare LLC) is having a central place to learn about what&#8217;s new. On Friday, I was looking at Recordare&#8217;s page of MusicXML related software for software that worked from the command line and noticed something new and really interesting: MusicSQL. [...]]]></description>
			<content:encoded><![CDATA[<p>One of the nice things about an emerging standard, namely MusicXML, having a command center (<a href="http://www.recordare.com/">Recordare LLC</a>) is having a central place to learn about what&rsquo;s new. </p>
<p>	On Friday, I was looking at Recordare&rsquo;s page of <a href="http://www.recordare.com/xml/software.html">MusicXML related software</a> for software that worked from the command line and noticed something new and really interesting: <a href="http://code.google.com/p/musicsql/">MusicSQL</a>.</p>
<p>	According the the Goodle Code page that hosts this project, MusicSQL is:</p>
<blockquote><p>&#8230; a system for conducting complex searches of symbolic music databases. The database can import and export MusicXML files. In the current version searches are constructed using a command line interface or through simple Python scripting tools.</p></blockquote>
<p>
	Basically, at least as I understand it, MusicSQL is a Python program that sits on top of a <a href="http://www.mysql.com/">MySQL</a> database &#8211; now I <strong>really</strong> hope Oracle doesn&rsquo;t kill MySQL <a href="http://news.cnet.com/the-iconoclast/8300-13578_3-38.html?keyword=Sun+Microsystems">if it buys Sun</a>. </p>
<p>	I was so excited to get MusicSQL working that I didn&rsquo;t notate all the little problems I had along the way. The <a href="http://musicsql.googlecode.com/files/ReadMe-0.1.2.pdf">documentation for MusicSQL</a> is very good and is written for Windows, Mac, and Linux (Ubuntu) users. But I&rsquo;m inconceivably impatient, so I just mowed through the installation with little care for remembering what I was doing. </p>
<p>	I do remember that I had to install Python 2.5, whereas I already have Python 2.6 installed &#8211; now I have both. I put/installed all the dependencies in my Python 2.5 directory just to compartmentalized everything &#8211; the exception being MySQL, which I installed wherever the default is. </p>
<p>	So far, I only ran the first query in the documentation that uses &quot;scientific&quot; musical notation in the form Nx, where &quot;N&quot; is the alphabetical note name, say C, and &quot;x&quot; is an integer that denotes what octave the note is a member of. In other words, a C-Major scale would be &quot;Cx Dx Ex Fx Gx Ax Bx Cx+1&quot;, something like &quot;C5 D5 &hellip; B5 C6&quot;, etc. You can place an integer <em>before </em>the note name to denote its duration. </p>
<p>	Running the query from the command line, I was really happy with the speed and the output of MusicSQL for the test query. </p>
<p>	One problem I did have, though, is I kept getting errors for another great feature of MusicSQL. Basically, after you run your query, you can see a PDF of the results (i.e. the music excerpt pertaining to the query results). The PDF is made by <a href="http://lilypond.org/">Lilypond</a>, a text-based notation software that produces &#8211; in my opinion &#8211; the absolute best looking engraving out there, that&rsquo;s why I use it (and yes, it&rsquo;s free). </p>
<p>	Now Lilypond doesn&rsquo;t natively read MusicXML, it uses its own encoding. So MusicSQL takes advantage of a Python script that comes with the Lilypond install called &quot;xml2ly&quot; that converts MusicXML to Lilypond format. I left a message on the project forum for MusicSQL, so I&rsquo;m hoping I can figure out what I need to do to get the Lilypond outout of the query results to work. At any rate, I do wonder how effective it can be since the conversion from MusicXML to Lilypond can sometimes get ugly. </p>
<p>	I wonder if an alternative solution is to use the <a href="http://www.musescore.org/en/developers-handbook/command-line-options">command line options for the MuseScore notation software</a> to generate a PDF of the query results. Musescore can also convert MusicXML to other graphics formats (PNG) and even audio (WAV, FLAC, OGG), so theoretically it could be leveraged to make audio files for the corresponding query results. </p>
<p>	At any rate, I&rsquo;m really looking forward to the future developments of MusicSQL. </p>
<p>	And as for using MuseScore&rsquo;s command line in conjunction with MusicXML and how it can add value to a web collection of MusicXML docs &#8211; there will be more to that later &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2009/11/15/musicsql-initial-thoughts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XQuery and MusicXML</title>
		<link>http://blog.humaneguitarist.org/2009/09/12/xquery-and-musicxml/</link>
		<comments>http://blog.humaneguitarist.org/2009/09/12/xquery-and-musicxml/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 00:11:47 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[music notation]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[ISMIR]]></category>
		<category><![CDATA[MusicXML]]></category>
		<category><![CDATA[XQuery]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=189</guid>
		<description><![CDATA[Earlier today,&#160; I posted about my first experience with XQuery. I&#39;d mentioned that I&#160;wanted to get my feet wet before I&#160;started trying to run queries on MusicXML&#160;documents. Well, I&#39;m an incredibly impatient person. I&#160;couldn&#39;t wait to take a couple of simple queries for a test run, especially after reading the following paper from the 2008 [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-left: 40px"><span style="color: rgb(0, 0, 0);">Earlier today,&nbsp; I posted about</span><span style="color: rgb(0, 0, 0);"> <a href="http://blog.humaneguitarist.org/?p=152">my first experience with XQuery</a>. I&#39;d mentioned that I&nbsp;wanted to get my feet wet before I&nbsp;started trying to run queries on MusicXML&nbsp;documents.</span></p>
<p>Well, I&#39;m an incredibly impatient person.</p>
<p>I&nbsp;couldn&#39;t wait to take a couple of simple queries for a test run, especially after reading the following paper from the 2008 International Conference on Music Information Retrieval hosted by <a href="http://www.ismir.net/">ISMIR</a>, the International Society for Music Information Retrieval: &nbsp;</p>
<p style="margin-left: 40px;"><em><a href="http://ismir2008.ismir.net/papers/ISMIR2008_217.pdf">Using XQuery on MusicXML Databases for Musicological Analysis</a></em><br />
	<em>Joachim Ganseman, Paul Scheunders and Wim D&rsquo;haes</em></p>
<p>Now, I&#39;ve known for a while the tests have been done using XQuery on MusicXML documents, but this paper was getting at something that&#39;s been on my mind for a long time now: the day we can have digital libraries of sheet music, not as image files, but as encoded documents, allowing musicians and the like to have the same online ability to query music in the way that users of prose and literary documents now take for granted.</p>
<p>Anyway, on to my first XQuery and MusicXML experience &#8230;</p>
<p>For testing, I used a very silly little ditty I&nbsp;wrote called &quot;MusicXML: I&nbsp;Heart Thee&quot;.</p>
<p>Here are its various manifestations:</p>
<ul>
<li>
<p><a href="http://blog.humaneguitarist.org/uploads/i_heart_thee.xml">MusicXML</a></p>
</li>
<li>
<p><a href="http://blog.humaneguitarist.org/uploads/i_heart_thee.jpg">JPEG</a></p>
</li>
<li>
<p><a href="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3">MP3</a></p>
</li>
</ul>
<p>The <a href="http://ismir2008.ismir.net/papers/ISMIR2008_217.pdf#page=3">first query demonstrated in the paper</a> (see page 3) is one to count the total notes in a digital library, in this case the <a href="http://www.wikifonia.org/">Wikifonia</a> collection of MusicXML docs.</p>
<p>I&nbsp;couldn&#39;t get it to work as written even after I&nbsp;adjusted the query to work on my test document. This is likely due to my own ignorance, but in the end it was a good thing because it forced me to write my own, simpler queries.</p>
<p>I&#39;m using the <a href="http://saxon.sourceforge.net/">Saxon</a> query processor as described in <a href="http://blog.humaneguitarist.org/?p=152">my earlier post</a>.</p>
<p>1. This query (in red) counts all the notes in my piece:</p>
<p style="margin-left: 40px;"><code><span style="color: rgb(255, 0, 0);">&lt;ul&gt;<br />
	{<br />
	for $i in doc(&quot;i_heart_thee.xml&quot;)/score-partwise<br />
	let $j :=count($i/part/measure/note)<br />
	return $j<br />
	}<br />
	&lt;/ul&gt;<br />
	</span></code></p>
<p><span style="background-color: rgb(255, 255, 0);"><em>A line-by-line translation:</em></span></p>
<ul>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Open an unordered list.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Open the query syntax with the &quot;{&quot; character.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Let there be a variable called &quot;i&quot; that will start at the root element, &lt;score-partwise&gt;, of the document &quot;i_heart_thee.xml&quot;.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Let there be a variable, &quot;j&quot;, that executes the Count function on &quot;i&quot; for the &lt;note&gt; element which is a child of &lt;measure&gt;&nbsp;and a grandchild of &lt;part&gt;.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Print the value of &quot;j&quot;.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Close the query syntax with the &quot;}&quot; character.</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Close the unordered list.</span></p>
</li>
</ul>
<p>2. This query (in red) counts all the notes in the vocal part (there are 3 parts altogether: voice, guitar, bass):</p>
<p style="margin-left: 40px;"><code><span style="color: rgb(255, 0, 0);">&lt;ul&gt;<br />
	{<br />
	for $i in doc(&quot;i_heart_thee.xml&quot;)/score-partwise<br />
	let $j :=count($i/part[@id=&#39;P1&#39;]/measure/note)<br />
	return $j<br />
	}<br />
	&lt;/ul&gt;</span></code><span style="color: rgb(255, 0, 0);"><br />
	</span></p>
<p><span style="background-color: rgb(255, 255, 0);"><em>A line-by-line translation:</em></span></p>
<ul>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Open an unordered list.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Open the query syntax with the &quot;{&quot; character.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Let there be a variable called &quot;i&quot; that will start at the root element, &lt;score-partwise&gt;, of the document &quot;i_heart_thee.xml&quot;.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Let there be a variable, &quot;j&quot;, that executes the Count function on &quot;i&quot; for the &lt;note&gt; element which is a child of &lt;measure&gt;&nbsp;and a grandchild of &lt;part&gt;, where the &quot;ID&quot; attribute of &lt;part&gt; is = to &quot;P1&quot;. This is the vocal part of the score.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Print the value of &quot;j&quot;.<br />
			</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Close the query syntax with the &quot;}&quot; character.</span></p>
</li>
<li>
<p><span style="background-color: rgb(255, 255, 255);">Close the unordered list.</span></p>
</li>
</ul>
<p><span style="background-color: rgb(255, 255, 255);">If you run the first query you get </span>the result &quot;137&quot; as in 137 notes, including rests &#8211; even the hidden rests in measures 1,5, and 9 that exist because both voices in the guitar part have rests, though it only displays as one rest each time on the <a href="http://blog.humaneguitarist.org/uploads/i_heart_thee.jpg">image version of the score</a>.</p>
<p>If you run the second query, you get 43 notes including rests and the tied notes.</p>
<p>I&#39;m sure there are ways to subtract rests and tied notes, but I&nbsp;have to start somewhere, right?</p>
<p><img alt=":)" src="http://blog.humaneguitarist.org/wp-content/plugins/fckeditor-for-wordpress-plugin/ckeditor/plugins/smiley/images/regular_smile.gif" title=":)" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2009/09/12/xquery-and-musicxml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3" length="306443" type="audio/mpeg" />
<enclosure url="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3" length="306443" type="audio/mpeg" />
<enclosure url="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3" length="306443" type="audio/mpeg" />
<enclosure url="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3" length="306443" type="audio/mpeg" />
<enclosure url="http://blog.humaneguitarist.org/uploads/i_heart_thee.mp3" length="306443" type="audio/mpeg" />
		</item>
		<item>
		<title>XSLT transformations: &quot;more than meets the eye&quot;</title>
		<link>http://blog.humaneguitarist.org/2009/08/09/55/</link>
		<comments>http://blog.humaneguitarist.org/2009/08/09/55/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 23:38:15 +0000</pubDate>
		<dc:creator>nitin</dc:creator>
				<category><![CDATA[XML]]></category>
		<category><![CDATA[JHOVE]]></category>
		<category><![CDATA[MusicXML]]></category>
		<category><![CDATA[TEI]]></category>
		<category><![CDATA[XSLT]]></category>
		<category><![CDATA[Zotero]]></category>

		<guid isPermaLink="false">http://blog.humaneguitarist.org/?p=55</guid>
		<description><![CDATA[A few months ago, my department head had encouraged us to learn about XML stylesheets and XSLT&#160;transformations. After picking at it here and there, I&#160;finally had my breakthrough with it this weekend. Of course, were I more patient, I&#160;could have gotten paid to do this at work tomorrow. As usual, the majority of the work [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, my department head had encouraged us to learn about XML stylesheets and<a href="http://en.wikipedia.org/wiki/XSL_Transformations"> XSLT&nbsp;transformations</a>. After picking at it here and there, I&nbsp;finally had my breakthrough with it this weekend. Of course, were I more patient, I&nbsp;could have gotten paid to do this at work tomorrow.</p>
<p>As usual, the majority of the work is in finding examples and explanations that speak to me. <a href="http://www.biglist.com/lists/xsl-list/archives/200208/msg00525.html">This thread</a> was particularly helpful.</p>
<p>One of the biggest breakthroughs &#8211; as embarrassing as it is to admit &#8211; was my realization that one needed an XSLT&nbsp;processor to actually create a new XML document based on the instructions provided in the stylesheet.</p>
<p>I&#8217;ve been experimenting with both the <a href="http://saxon.sourceforge.net/">Saxon</a> and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=2FB55371-C94E-4373-B0E9-DB4816552E41&amp;displaylang=en">Microsoft</a> processors. Rather than run them from the Windows command prompt, I&#8217;ve been using the command line interface in the <a href="http://www.jedit.org/">jEdit text editor</a>. There&#8217;s a built in XSLT&nbsp;processor plug-in with jEdit, but I&nbsp;couldn&#8217;t get it to work, hence the use of the afformentioned methods.</p>
<p>If I understand corrently, one of the uses of this will be to take XML&nbsp;data about audio files generated from the <a href="http://hul.harvard.edu/jhove/">JSTOR/Harvard Object Validation Environment</a> (JHOVE) and map the pertinent information to another schema/XML&nbsp;document. That&#8217;s a bit out of my league right now, but a modest start is yet a start.</p>
<p>I&#8217;ll also be interested in using transformations to make customized XML&nbsp;documents from <a href="http://www.recordare.com/xml.html">MusicXML</a> sources and <a href="http://www.zotero.org/">Zotero</a> exports. Admittedly, I have no real ideas as to what I&#8217;d need to do this for, but I simply have a hankering to think of related projects. Maybe pulling the lyrics out of a MusicXML document into a <a href="http://www.tei-c.org/release/doc/tei-p5-doc/en/html/VE.html">TEI verse</a> document?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.humaneguitarist.org/2009/08/09/55/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

