Hello, I think this is mostly a question for Lou, and any other who was
involved in getting PureODD together.
I've started converting the MEI ODD to PureODD, so I expect to find a few
issues, most of which will likely be caused by my ineptitude, so apologies
in advance.
Here's the first obstacle I found:
In MEI the datatypes of some attributes are defined in <datatype> itself.
There a few cases for this:
1. the datatype is very specific to the element and it doesn't need to be
re-used.
Example:
<attDef ident="tab.strings" usage="opt">
<desc>Provides a *written* pitch and octave for each open string or
course of
strings.</desc>
<datatype>
<rng:list>
<rng:oneOrMore>
<rng:data type="token">
<rng:param name="pattern"
>[a-g][0-9](s|f|ss|x|ff|xs|sx|ts|tf|n|nf|ns|su|sd|fu|fd|nu|nd|1qf|3qf|1qs|3qs)?([a-g][0-9](s|f|ss|x|ff|xs|sx|ts|tf|n|nf|ns|su|sd|fu|fd|nu|nd|1qf|3qf|1qs|3qs)?)*</rng:param>
</rng:data>
</rng:oneOrMore>
</rng:list>
</datatype>
</attDef>
Solution: bite the bullet and move it to a dedicated <dataSpec>
2. The datatype combines a number of pre-defined datatypes
Example:
<datatype>
<rng:list>
<rng:oneOrMore>
<rng:data type="decimal"/>
<rng:data type="decimal"/>
</rng:oneOrMore>
</rng:list>
</datatype>
Solution: again create a dedicated <dataSpec>, but it's a bit annoying
since this it's just a matter of combining already defined datatypes in a
specific way.
3. The datatype involved a choice between a number of pre-defined datatypes
Example:
<datatype>
<rng:choice>
<rng:data type="decimal">
<rng:param name="minInclusive">1</rng:param>
</rng:data>
<rng:data type="time"/>
</rng:choice>
</datatype>
Solution: like 2., but there is also another question: we're relying on the
rng datatype for time. Will we have to define our own? Can we use rng's or
xsd's definition without breaking the Durand Conondrum?
General question: What's the reason to not allow <content> in <datatype>?
It also seems a bit strange to allow either dataRef or textNode - it seems
to me that it's mixing a reference and a definition, but only if it's a
text node. It would seem more logical to just replace <datatype> with
<dataRef> and use it to refer to a text datatype. Or, better, just allow
datatype to define the datatype there and then like it used to :)
Thanks,
Raff