Re: Release 1.0.2 change - SPEC-260 - Correct theregex publishedforthe A
Thomas Beale wrote:
> archetype_id: qualified_rm_entity ‘.’ domain_concept ‘.’ version_id
>
> qualified_rm_entity: rm_originator ‘-’ rm_name ‘-’ rm_entity
> rm_originator: V_NAME
> rm_name: V_NAME
> rm_entity: V_NAME
>
> domain_concept: concept_name { ‘-’ specialisation }
> concept_name: V_NAME
> specialisation: V_NAME
>
> version_id: ‘v’ V_NONZERO_DIGIT [ V_NUMBER ] [ ‘.’ V_NUMBER [ ‘.’
> V_NUMBER ] ]
>
> V_NONZERO_DIGIT: [1-9]
> V_DIGIT: [0-9]
> V_NUMBER: [0-9]*
> V_NAME: [a-zA-Z][a-zA-Z0-9_]+
>
>
> The PERL regular expression equivalent of the above is as follows:
> [a-zA-Z]\w+(-[a-zA-Z]\w+){2}\.[a-zA-Z]\w+(-[a-zA-Z]\w+)*\.v[1-9]\d*(\.\d+){0,2}
This all looks correct to me now, Thomas, except for the version_id
production rule:
‘v’ V_NONZERO_DIGIT [ V_NUMBER ] [ ‘.’ V_NUMBER [ ‘.’ V_NUMBER ] ]
I considered but rejected this idea, because it permits amputated
version
numbers such as these:
v1.
v1..
v1..1
v1.1.
I abandoned the "V_NUMBER" idea because it allows the two optional
suffixes
to have no digits! You could of course fix that by redefining V_NUMBER
like
so:
V_NUMBER: [0-9]+
But then it would force you to start with a two-digit version number.
v1, v2
through to v9 would all be illegal versions. Not good!
My solution is a bit tedious, but at least it is (I believe) correct:
'v' V_NONZERO_DIGIT { V_DIGIT } [ '.' V_DIGIT { V_DIGIT } ] [ '.'
V_DIGIT
{ V_DIGIT } ]
V_DIGIT: [0-9]
V_NONZERO_DIGIT: [1-9]
Or, if you prefer to nest the second optional part, you could do this:
'v' V_NONZERO_DIGIT { V_DIGIT } [ '.' V_DIGIT { V_DIGIT } [ '.' V_DIGIT
{
V_DIGIT } ] ]
Both are correct, but I personally find the flattened out rule a bit
easier
to read.
Can someone think of something simpler that is still correct?
- Peter
_______________________________________________
openEHR-technical mailing list
openEHR-technical@openehr.org
http://lists.chime.ucl.ac.uk/mailman/listinfo/openehr-technical