axelberndt / MPM

Music Performance Markup (MPM)
Other
19 stars 2 forks source link

[WIP] ornamentation #59

Closed pfefferniels closed 2 years ago

pfefferniels commented 2 years ago

This PR adds elements and attributes for ornamentation. It's still work in progress. Some questions for now:

Still missing:

pfefferniels commented 2 years ago

Should it be possible to define only frame.end, assuming that frame.start will be 0, or must both attributes be present? @axelberndt

axelberndt commented 2 years ago

Both attributes (frame.start and frame.end and also their milliseconds counterparts) are optional with a default value of 0.0. Schematron should make sure that values don't clash if some are not defined explicitly.

pfefferniels commented 2 years ago

Sorry for the long silence here. We did decide to have note.order either being a list of note ids or "ascending pitch"|"descending pitch". However, I'm not sure how to implement multiple possible datatypes (anyURI or a closed list) in ODD.

At the moment it only takes a closed list:

<tei:classSpec ident="att.note.order" type="atts" module="mpm.core" mode="add" xmlns:tei="http://www.tei-c.org/ns/1.0">
    <tei:gloss>note order attribute class</tei:gloss>

    <tei:desc>This attribute class provides the attribute <tei:att>note.order</tei:att>.</tei:desc>

    <tei:attList>
        <tei:attDef ident="note.order" usage="opt">
            <tei:gloss>note.order attribute</tei:gloss>
            <tei:desc>This attribute defines the order of notes e.g. inside an arpeggiation. It can take the values "ascending pitch", "descending pitch" or a list of ids specifying the exact order of notes.</tei:desc>
            <tei:defaultVal>ascending pitch</tei:defaultVal>
            <tei:valList type="closed">
                <tei:valItem ident="ascending pitch"/>
                <tei:valItem ident="descending pitch"/>
            </tei:valList>
        </tei:attDef>
    </tei:attList>
</tei:classSpec>
axelberndt commented 2 years ago

Make the datatype just <tei:dataRef name="string"/>. Then use Schematron to check if it is one of the predefined strings or a sequence of IDs. Since the IDs refr to another file (MSM), you do not need to check their validity, only the "wellformedness" (each ID should start with a # and be space separated).

pfefferniels commented 2 years ago

@axelberndt frameLength in rubatoDef only allows values greater than 0.0 (exclusive). Should this apply to frameLength in temporalSpread as well?

axelberndt commented 2 years ago

In temporalSpread it should be inclusive 0.0.