How should an HL7 grammar define repetition

Chameleon has a data model for defining repetition on segments which was a little redundant:

<message_grammar id="4"> <name>NK1</name> <is_optional>True</is_optional> <is_repeating>True</is_repeating> <ignore_segment_order>True</ignore_segment_order> <max_repeats>0</max_repeats> <type>segment</type> <segment_ref>2</segment_ref> </message_grammar>

Notice how we have True for “is_repeating” yet max_repeats is set to 0.

This a bit of a design problem in that we have a redundant data model - we are describing the same property in a two ways and we end up with a contradiction:

  • The is_repeating property is true - which means that we have repeating segment.

  • But the max_repeats is set to 0 which says that the segment is not repeating.

How can we describe the properties of optionality and repetition in a simplest model that we can with as little ambiguity as possible in our new schema model with only one node type?

  • What about

    • min - if this zero then it means the node is optional

    • max

      • 0 has no meaning

      • -1 means no limit

      • N means N repeats

I wonder about the value of restricting the number of repeats since in practice having limits on the messaging format doesn’t get a lot of value - it’s just annoying if an HL7 parser rejects a message because it exceeds the number of repeats or has one less. What is we did this instead:

  • IsRequired -

    • true - means the field is required

  • IsRepeating

What about

  • IsOptional

    • Just means we can skip over it, but we’re not going to reject a message

  • IsRepeating