Uploaded image for project: 'Specification'
  1. SPEC-251

Allow both pattern and interval constraint on Duration in Archetypes

    Details

    • Type: Change Request
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: Release 1.0.2
    • Component/s: ADL
    • Labels:
      None
    • Change Description:
      Hide
      A new piece of syntax is needed in cADL to support this constraint. It takes the form of the following example:
      some_duration matches {PWD/|P0W..P50W|}

      The production rule added to an ADL parser is as follows:

      c_duration_constraint:
                duration_pattern
              | duration_pattern '/' duration_interval_value -- new rule
              | duration_value
              | duration_interval_value
      ;

      where duration_pattern is a rule like the following (this one is from the Eiffel reference ADL parser):

      duration_pattern: V_ISO8601_DURATION_CONSTRAINT_PATTERN
                      {
                             if valid_iso8601_duration_constraint_pattern ($1) then -- this function performs further validation on the pattern to ensure it is iso8601 compliant
                                     create c_duration.make_from_pattern ($1)
                             else
                                      raise_error
                                      report_error ("invalid duration constraint pattern; legal pattern: P[Y|y][M|m][W|w][D|d][T[H|h][M|m][S|s]] or P[W|w]")
                                      abort
                             end
                      }
              ;

      And the token V_ISO8601_DURATION_CONSTRAINT_PATTERN has a lexer rule like the following:

      -- the following includes the openEHR deviation from ISO8601, to allow 'W' to be mixed in with
      -- other designators
      P[yY]?[mM]?[Ww]?[dD]?T[hH]?[mM]?[sS]? |
      P[yY]?[mM]?[Ww]?[dD]? {
                                      last_token := V_ISO8601_DURATION_CONSTRAINT_PATTERN
                                      last_string_value := text
                         }


      In the AOM, the invariant of C_DURATION is relaxed to allow both range and pattern to be set at the same time.
      Show
      A new piece of syntax is needed in cADL to support this constraint. It takes the form of the following example: some_duration matches {PWD/|P0W..P50W|} The production rule added to an ADL parser is as follows: c_duration_constraint:           duration_pattern         | duration_pattern '/' duration_interval_value -- new rule         | duration_value         | duration_interval_value ; where duration_pattern is a rule like the following (this one is from the Eiffel reference ADL parser): duration_pattern: V_ISO8601_DURATION_CONSTRAINT_PATTERN                 {                        if valid_iso8601_duration_constraint_pattern ($1) then -- this function performs further validation on the pattern to ensure it is iso8601 compliant                                create c_duration.make_from_pattern ($1)                        else                                 raise_error                                 report_error ("invalid duration constraint pattern; legal pattern: P[Y|y][M|m][W|w][D|d][T[H|h][M|m][S|s]] or P[W|w]")                                 abort                        end                 }         ; And the token V_ISO8601_DURATION_CONSTRAINT_PATTERN has a lexer rule like the following: -- the following includes the openEHR deviation from ISO8601, to allow 'W' to be mixed in with -- other designators P[yY]?[mM]?[Ww]?[dD]?T[hH]?[mM]?[sS]? | P[yY]?[mM]?[Ww]?[dD]? {                                 last_token := V_ISO8601_DURATION_CONSTRAINT_PATTERN                                 last_string_value := text                    } In the AOM, the invariant of C_DURATION is relaxed to allow both range and pattern to be set at the same time.
    • Impact Analysis:
      This work has already been done in tooling, and is in use in archetypes for about 6 months. The only work required in the specifications is to add examples and the production rule to the documenation.
    • Approved By:
      ARB

      Description

      Currently there is no way to specify a constraint on Duration such that both of the following can be specified at once:
      - the allowed units are specified, e.g. the current PWD constraint allows only weeks and days
      - the time limit, e.g. the current |P0W..P50W| allows this

      This constraint is needed at least for the common duration constraint for pregnancy.

      The existing syntax strings must continue to parse as they do now:
      |PWD|
      |P0W..P50W|

      Example can be found online in this test archetype: http://www.openehr.org/wsvn/knowledge/archetypes/dev/adl/test/basics/adl-test-ENTRY.basic_types.v1.adl?op=file&rev=0&sc=0 (see duration_attribute_101 - 207)

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              thomas.beale Thomas Beale
              Raised By:
              (Sam Heard) inactive (Inactive)
              Analyst:
              (Sam Heard) inactive (Inactive), Peter Gummer, Thomas Beale
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Due:
                Created:
                Updated:
                Resolved: