- From: Laurent Pugin <lxpugin@gmail.com>
- Date: Mon, 28 Nov 2016 09:43:50 +0100
- To: Andrew Hankinson <andrew.hankinson@gmail.com>
- Cc: James Ingram <j.ingram@netcologne.de>, public-music-notation@w3.org
- Message-ID: <CAJ306HbUfjz=bn_93aJhdhwDkYkwdnfEOjy3msCq8khEKZ=zNQ@mail.gmail.com>
The structure of the SVG generated by Verovio is indeed exactly the one you are suggesting (with the only difference that a "voice" is a "layer" in MEI) <g class="system"> <g class="staff"> <g class="layer"> <g class="chord"> <g class="note"> </g> </g> </g> </g> </g> You can find more information about it in this paper http://www.terasoft.com.tw/conf/ismir2014/proceedings/T020_221_Paper.pdf Best wishes, Laurent On Fri, Nov 25, 2016 at 3:16 PM, Andrew Hankinson < andrew.hankinson@gmail.com> wrote: > It should be noted that this is pretty much exactly how Verovio renders > SVG with MEI. > > See "SVG Structure" at http://www.verovio.org/structure.xhtml > > We use SVG versions of the SMuFL fonts for the graphical primitives. > > -Andrew > > On Nov 25, 2016, at 10:01 AM, James Ingram <j.ingram@netcologne.de> wrote: > > 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" <http://www.w3.org/2000/svg> > ... > data-svgTypeID="http://www.../.../seSVG1.html" > <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 Monday, 28 November 2016 08:46:54 UTC