MusiXML - XML music notation file format:


MusiXML - XML music notation file format

MusiXML - XML music notation file format

Why XML Schema?

When we define a new data format,there are some tasks that have to be solved again and again:

  • Which character set do we use?
  • How do we handle i18n?
  • How do we define data types across programming languages?
  • How do we express hierarchies?
  • Which mechanism do we use to make the format extensible?
  • We have to define and agree in a formal language in which we express the format deFinition (and we have to learn it).
  • How do we express references/pointers?

This is much work to do in each case and I didn't even mention the concrete problem to be solved.

XML 1.0 solvesalmostall of these general problems. You probably haven't even to learn the XML Syntax because it's a simplified Syntax you kNow from HTML. The additional benefit is that the formal deFinition is stored in a language independant way in a separate document (the DTD). A programer who wants to use the format doesn't even have to implement the constraints since they are tested by a parser with well defined APIs.

When programers who work with e-commerce or music notation saw it,they immediately knew and agreed that this is what they needed. The main problem is,that XML 1.0 emerged from a (text) document oriented domain. This is the reason why there is no way to define data types,to use inheritance,define keys or reuse general modules in different formats. With XML 1.0 you have to learn a Syntax for XML and a different for DTDs.

These problems are addressed by XML Schema.

The MusiXML DTD

In spring 1998 I started to develop the MusiXMLDTD(view the MusiXML DTD in your browser) with the experience of developing an unpublished binary format and the kNowledge of somemore notation formats. Here is anexamplethat uses the MusiXML DTD.

The MusiXML Schema

The MusiXML DTD works fine,but there are many constraints that are only checked by the application. As explained inWhy XML Schema?,this is a problem when you want others to understand and implement these constraints.

MusiXML Schemais fully compliant withXML Schema. Theexampleand theMusiXML Schemaare part of myunit tests,usingXerces2-J.

You can look at asimplified browser fiendly viewof MusiXML to get an overview. (I kNow that the styesheet that generates the overview needs some improvement :-) Anyway it helps.

The top level structure of MusiXML

One main goal is to store each data only once instead of holding them consistent. And we consider separating content from style. Assume we represent musical sheets for a symphony orchestra. To see the problem,we need only the score and the violin 1 part. Using a hierarchical representation,the score looks like this:

work -> page -> system -> staff -> measure -> <content>
and the violin 1 sheets look like this:
work -> page -> system -> staff -> measure -> <content>

Both have the same structure. They have different instances of page,system and staff,but they share parts of <content>. The structure of the graphical hierarchy makes it necessary to store two copies of <content>. The simple idea is to store <content> in a separate place,the logical domain,and to refer to it. Now our structure looks like this:

work -> page -> system -> staff -> measure -> reference to part of <content> work -> page -> system -> staff -> measure -> reference to part of <content>

But the work embeds everything,so we change the structure to

<work> <body> <content> </body> <filter> <extract> (rendering information for score with reference to <content>) </extract> <extract> (rendering information for violin 1 with reference to <content>) </extract> </filter> </work>

Since <extract> contains declarative instructions,how to process <content>,I saved some hierarchies there,to make it easier to process. The instructions in <extract> have to be declarative and not something like do this and then do that,since procesing goes in both directions: <content> has to be rendered using these instructions and <content> has to be changed using the instructions if the user changes something on the screen. The logical domain <body> contains almost all the the kNowledge a music notation program can have about music. It's about the same information that is in the linear input mode of some music notation programs.

Then we have a graphical domain that is contained in the <filter> element. It contains <extract> elements. Each <extract> element defines a different printout: the score and each part that is to be printed (In relational databases we would use the term view insted of extract,but we need the term view in the object oriented context).

Lucky chance of the day

drum corps basel



相关链接http://www.music-notation.info/en/musixml/MusiXML.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇