- From: James Ingram <j.ingram@netcologne.de>
- Date: Fri, 25 Nov 2016 11:01:57 +0100
- To: public-music-notation@w3.org
- Message-ID: <5e717cd0-0b9b-f99b-018a-d688b0e97ed9@netcologne.de>
Hi,
I'd like to propose that the W3C Music Notation Community Group develop
a semantically enhanced SVG file type for music scores.
_____________________________
Summary:
Semantically enhanced SVG (SeSVG) is a specialized SVG file type
containing identifiable music notation objects. All such objects are
defined using "class" attributes on the basic SVG elements. SeSVG files
are just ordinary SVG files structured in a particular way, so it should
be easy for applications that already export SVG to export SeSVG.
Interesting client applications can written because the contained
objects are localized and identifiable, and the files can be reliably
parsed.
Client applications will not only be browsers and SVG editors, but also
web and desktop applications.
SeSVG is not competing with MusicXML (whose clients are music notation
authoring tools).
The posting ends by describing how SeSVG files can be defined and managed.
_____________________________
Background:
Following the Community Group meeting in Frankfurt last April [1] and
the subsequent email exchanges, we decided that everyone should go off
and work on their own for a while. I've now made some progress that I'd
like to share.
The main problem, for me, in previous discussions, was understanding
what everyone meant by "semantic". For me, "semantic" refers both to the
naming of symbols (in files and elsewhere) and to their meanings. Many
problems disappear if these two concepts are kept strictly separate [2].
Another problem was that I have been developing a hybrid SVG format
containing both ordinary SVG and MIDI information. In trying to explain
that format, I was trying to tackle too many problems at once.
I now think that it would be a good idea to step back a bit, and
approach the problem into two stages [3].
Interestingly, these two stages exactly reflect the distinction between
symbol names and their meanings.
Stage 1, SeSVG (graphics, names): We should first define a standard way
to write music graphics, independently of the meanings of the symbols.
Since this will be a purely graphic standard, it can be expressed as an
SVG specialisation. The standard should include both standard names for
the symbol classes (e.g. "staff", "slur" etc.) and a description of how
they nest. For more details of how this can be made to work, and work
flexibly, see below.
Note that most music score authoring applications already export
ordinary SVG (all of them can, in principle), so it should be fairly
straightforward for them to adapt their code to export SeSVG. But note
also, that the SeSVG standard has to be agreed before anyone can
actually write an implementation that creates an instantiation. This
would be a classic case of standards-oriented programming. There will be
many different applications that create files of this type, but client
applications should not have to worry about where/how the file originated.
Stage 2 (temporal information, meaning): Once SeSVG has been defined, it
becomes possible to think about including information about the symbols'
_meanings_. For example, my own software [4] includes MIDI information
inside chord symbols. Once we know where the chords are in the file, we
can start adding information to them. I think we can/should leave Stage
2 for later. SeSVG has many applications, even without the inclusion of
MIDI information [5]. The rest of this posting is exclusively about SeSVG.
_____________________________
Semantically enhanced SVG (SeSVG):
Note first, that SeSVG is not a replacement for MusicXML.
MusicXML is a de-facto standard for its client applications, and I think
its unlikely to be replaced. Too much programming effort would be
involved. I'm very much in favour of Michael's effort to maintain and
complete it, and would support any effort to turn it into an official
W3C standard.
MusicXML's clients are score authoring applications, most of which can
already export SVG.
SeSVG's clients would not only be browsers and SVG editors, but also web
and desktop applications.
Note however, that SeSVG files can also be created by applications that
do not import MusicXML. That's important, because W3C standards have to
be future-proof. We can rely on SVG to represent any graphic in future,
but we can't assume that MusicXML is going to be able to describe all
future music notations.
Music notations are restricted only by the authoring application that
creates them. SeSVG should be both notation agnostic and future-proof.
Here's how I think that can be achieved:
SVG uses the notion of a _contract_ between the producer and consumer of
an SVG file when defining namespaces. We can use a similar tactic, to
define an SVG specialisation by defining a custom data- attribute (lets
call it data-svgTypeID) in the <svg> element [6]. For example:
<svg xmlns="http://www.w3.org/2000/svg"
...
data-svgTypeID="http://www.../.../seSVG1.html"
...
>
...
</svg>
The data-svgTypeID attribute will be ignored by browsers, but can be
accessed by both the producer and consumer of the file, who treat it as
the ID of the SVG file type. It is common (in SVG namespaces) for the ID
to be a URL pointing to a (machine- or human-readable) description of
the specialization.
Even if the format description (here in seSVG1.html) is not a formal,
machine readable schema, the producer of the file can use a standard
verifier (like the W3C HTML verifier) to confirm that that file being
produced conforms to its format ID. Such a verifier would be quite
simple to write, and would be a public part of the standard, used by all
the producers of such SeSVG files [7]. There might, incidentally, be
more than one SeSVG type. Hence my use of seSVG1.html above.
In the above example, the consumer of the file (the parsing application)
only needs to check the value of data-svgTypeID to know how the file has
been structured by its producer. Its not necessary to follow the link!
The definition (in seSVG1.html above) includes a set of class names that
can be associated with the basic SVG elements. Some of these are
containers (<g>, i.e group elements). In addition to the class names,
the SVG file type also has to define the position in the container
hierarchy where each class can occur, and how often. The definitions
will be very much like those of a formal schema, but they actually only
need to be in informal, human-readable form.
For example, seSVG1.html might define the following container class nesting:
<g class="system" ...>
<g class="staff" ...>
<g class="voice" ...>
<g class="chord" ...>
...
</g>
...
</g>
...
</g>
...
</g>
The definition would also provide a list of other elements or containers
together with their standardized class names and available positions in
the container hierarchy. For example, a <line class="slur" ... /> would
probably only be allowed to occur inside a <g class="voice"...>...</g>
container.
I imagine that the class names and nesting could be related closely to
MusicXML definitions and/or to the internal class definitions used by
music notation authoring applications. Note, however, that SVG files
contain instantiated graphical information, so there shouldn't have to
be as many definitions as there are in MusicXML. For example, there
should be less need to describe notehead types since particular
noteheads have already been instantiated by the authoring software.
Editors can see what they are editing.
My feelng is that the number of such SeSVG definitions should be kept to
a minimum so that consumer applications don't have to be too fussy about
the formats they support.
Note that the above container hierarchy definition says nothing about
the position of the symbols on the page, or the direction in which they
are to be read. The above container hierarchy can just as well apply to
Asian notations that read vertically.
Comments and suggestions would be very welcome.
Have fun! :-)
All the best,
James
[1] For the minutes of our Frankfurt meeting last April see
https://www.w3.org/community/music-notation/
[2] This problem was especially controversial in my correspondence with
the MEI last May. See the thread at:
https://lists.uni-paderborn.de/pipermail/mei-l/2016/001798.html
If nobody beats me to it, I will be re-opening that debate on the MEI
list in a few days time. That seems legitimate, since they are a very
different audience, with different interests.
[3] This insight came during a private email exchange with Daniel
Spreadbury. Thanks, Daniel, for your patience!
[4] https://github.com/notator/Moritz
https://github.com/notator/assistant-performer
http://james-ingram-act-two.de/open-source/assistantPerformer/assistantPerformer.html
[5] SeSVG can be read by browsers, and includes the SVG metadata
capabilities, so I can imagine it being used for archiving. Also, there
are uses in the academic world: if particular places in the score are
both localised and easy to locate in the file, it becomes feasible to
write simple applications for adding annotations and/or extracting music
examples. These use cases would, of course, be enhanced if/when the
format includes MIDI info.
[6] Thanks to Nikos Andronikos, who suggested the use of a custom data-
attribute in the following posting:
https://lists.w3.org/Archives/Public/www-svg/2016Nov/0008.html
[7] As far as I know, it is not possible to write a machine-readable
schema that can be used to describe a specialised SVG type and verify it
automatically. Maybe I'm wrong. If this proposal is adopted, we should
consult some experts in advanced SVG to make sure we are not missing any
tricks.
Received on Friday, 25 November 2016 10:02:46 UTC