2 | | |
3 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15382 Copyright Notice] |
4 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 Amendment Record] |
5 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15625 Table of Contents] |
6 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15939 1 Introduction] |
7 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15941 1.1 Purpose] |
8 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15957 1.2 Related Documents] |
9 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15967 1.3 Status] |
10 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15979 1.4 Peer review] |
11 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15987 1.5 Conformance] |
12 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16016 2 Support Package] |
13 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16019 2.1 Overview] |
14 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16043 2.2 Class Definitions] |
15 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16043 2.2.1 EXTERNAL_ENVIRONMENT_ACCESS Class] |
16 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16093 3 Assumed Types] |
17 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16095 3.1 Overview] |
18 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16135 3.2 Inbuilt Primitive Types] |
19 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16208 3.2.1 Any Type] |
20 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16239 3.2.2 Ordered Type] |
21 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16261 3.2.3 Numeric Type] |
22 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16309 3.2.4 Ordered_numeric Type] |
23 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16327 3.2.5 Boolean Type] |
24 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16404 3.2.6 Real Type] |
25 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16425 3.3 Assumed Library Types] |
26 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16488 3.3.1 String Type] |
27 | | * [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16522 3.3.1.1 UNICODE] |
| 2 | * [wiki:"Support Information Model Copyright Notice" Copyright Notice] |
| 3 | * [wiki:"Support Information Model Amendment Record" Amendment Record] |
| 4 | * [wiki:"Support Information Model Table of Contents" Table of Contents] |
| 5 | * [wiki:"Support Information Model 1 Introduction" 1 Introduction] |
| 6 | * [wiki:"Support Information Model 1.1 Purpose" 1.1 Purpose] |
| 7 | * [wiki:"Support Information Model 1.2 Related Documents" 1.2 Related Documents] |
| 8 | * [wiki:"Support Information Model 1.3 Status" 1.3 Status] |
| 9 | * [wiki:"Support Information Model 1.4 Peer review" 1.4 Peer review] |
| 10 | * [wiki:"Support Information Model 1.5 Conformance" 1.5 Conformance] |
| 11 | * [wiki:"Support Information Model 2 Support Package" 2 Support Package] |
| 12 | * [wiki:"Support Information Model 2.1 Overview" 2.1 Overview] |
| 13 | * [wiki:"Support Information Model 2.2 Class Definitions" 2.2 Class Definitions] |
| 14 | * [wiki:"Support Information Model 2.2.1 EXTERNAL_ENVIRONMENT_ACCESS Class" 2.2.1 EXTERNAL_ENVIRONMENT_ACCESS Class] |
| 15 | * [wiki:"Support Information Model 3 Assumed Types" 3 Assumed Types] |
| 16 | * [wiki:"Support Information Model 3.1 Overview" 3.1 Overview] |
| 17 | * [wiki:"Support Information Model 3.2 Inbuilt Primitive Types" 3.2 Inbuilt Primitive Types] |
| 18 | * [wiki:"Support Information Model 3.2.1 Any Type" 3.2.1 Any Type] |
| 19 | * [wiki:"Support Information Model 3.2.2 Ordered Type" 3.2.2 Ordered Type] |
| 20 | * [wiki:"Support Information Model 3.2.3 Numeric Type" 3.2.3 Numeric Type] |
| 21 | * [wiki:"Support Information Model 3.2.4 Ordered_numeric Type" 3.2.4 Ordered_numeric Type] |
| 22 | * [wiki:"Support Information Model 3.2.5 Boolean Type" 3.2.5 Boolean Type] |
| 23 | * [wiki:"Support Information Model 3.2.6 Real Type" 3.2.6 Real Type] |
| 24 | * [wiki:"Support Information Model 3.3 Assumed Library Types" 3.3 Assumed Library Types] |
| 25 | * [wiki:"Support Information Model 3.3.1 String Type" 3.3.1 String Type] |
| 26 | * [wiki:"Support Information Model 3.3.1.1 UNICODE" 3.3.1.1 UNICODE] |
134 | | ==== Copyright Notice ==== #LinkTarget_15382 |
135 | | © Copyright openEHR Foundation 2001 - 2007 All Rights Reserved |
136 | | |
137 | | |
138 | | 1. This document is protected by copyright and/or database right throughout the world and is owned by the openEHR Foundation. |
139 | | 1. You may read and print the document for private, non-commercial use. |
140 | | 1. You may use this document (in whole or in part) for the purposes of making presentations and education, so long as such purposes are non-commercial and are designed to comment on, further the goals of, or inform third parties about, openEHR. |
141 | | 1. You must not alter, modify, add to or delete anything from the document you use (except as is permitted in paragraphs 2 and 3 above). |
142 | | 1. You shall, in any use of this document, include an acknowledgement in the form: "© Copyright openEHR Foundation 2001-2007. All rights reserved. www.openEHR.org" |
143 | | 1. This document is being provided as a service to the academic community and on a non-commercial basis. Accordingly, to the fullest extent permitted under applicable law, the openEHR Foundation accepts no liability and offers no warranties in relation to the materials and documentation and their content. |
144 | | 1. If you wish to commercialise, license, sell, distribute, use or otherwise copy the materials and documents on this site other than as provided for in paragraphs 1 to 6 above, you must comply with the terms and conditions of the openEHR Free Commercial Use Licence, or enter into a separate written agreement with openEHR Foundation covering such activities. The terms and conditions of the openEHR Free Commercial Use Licence can be found at !http://www.openehr.org/free_commercial_use.htm |
| 129 | ==== Copyright Notice ==== #LinkTarget_15382 |
| 130 | © Copyright openEHR Foundation 2001 - 2007 All Rights Reserved |
| 131 | |
| 132 | 1. This document is protected by copyright and/or database right throughout the world and is owned by the openEHR Foundation. |
| 133 | 1. You may read and print the document for private, non-commercial use. |
| 134 | 1. You may use this document (in whole or in part) for the purposes of making presentations and education, so long as such purposes are non-commercial and are designed to comment on, further the goals of, or inform third parties about, openEHR. |
| 135 | 1. You must not alter, modify, add to or delete anything from the document you use (except as is permitted in paragraphs 2 and 3 above). |
| 136 | 1. You shall, in any use of this document, include an acknowledgement in the form: "© Copyright openEHR Foundation 2001-2007. All rights reserved. www.openEHR.org" |
| 137 | 1. This document is being provided as a service to the academic community and on a non-commercial basis. Accordingly, to the fullest extent permitted under applicable law, the openEHR Foundation accepts no liability and offers no warranties in relation to the materials and documentation and their content. |
| 138 | 1. If you wish to commercialise, license, sell, distribute, use or otherwise copy the materials and documents on this site other than as provided for in paragraphs 1 to 6 above, you must comply with the terms and conditions of the openEHR Free Commercial Use Licence, or enter into a separate written agreement with openEHR Foundation covering such activities. The terms and conditions of the openEHR Free Commercial Use Licence can be found at !http://www.openehr.org/free_commercial_use.htm |
175 | | ||Issue ||Details ||Raiser ||Completed || |
176 | | ||1.3 ||CR-000135: Minor corrections to rm.support.terminology package. CR-000145: Add class for access to external environment. CR-000137: Add definitions class to support.definition package. ||D Lloyd D Lloyd D Lloyd ||25 Jun 2005 || |
177 | | ||||R E L E A S E 0.95 |||||| |
178 | | ||1.2.1 ||CR-000129. Fix errors in UML & specs of Identification package. Adjust invariants & postcondition of OBJECT_ID, HIER_OBJECT_ID, ARCHETYPE_ID and TERMINOLOGY_ID. Improve text to do with assumed abstract types Any and Ordered_numeric. ||D Lloyd ||25 Feb 2005 || |
179 | | ||1.2 ||CR-000128. Update Support assumed types to ISO !11404:2003. CR-000107. Add support for exclusion and inclusion of Interval limits. CR-000116. Add PARTICIPATION.function vocabulary and invariant. CR-000122. Fix UML in Terminology_access classes in Support model. CR-000118. Make package names lower case. CR-000111. Move Identification Package to Support. CR-000064. Re-evaluate COMPOSITION.is_persistent attribute. Add “composition category” vocabulary. Re-ordered vocabularies alphabetically. ||T Beale A Goodchild T Beale D Lloyd T Beale DSTC D Kalra ||10 Feb 2005 || |
180 | | ||||R E L E A S E 0.9 |||||| |
181 | | ||1.1 ||CR-000047. Improve handling of codes for structural attributes. Populated Terminology and code_set codes. ||S Heard ||11 Mar 2004 || |
182 | | ||1.0 ||CR-000091. Correct anomalies in use of CODE_PHRASE and DV_CODED_TEXT. Add simple terminology service interface. CR-000095. Remove property attribute from Quantity package. Add simple measurement interface. Formally validated using ISE Eiffel 5.4. ||T Beale DSTC, S Heard ||09 Mar 2004 || |
183 | | ||0.9.9 ||CR-000063. ATTESTATION should have a status attribute. ||D Kalra ||13 Feb 2004 || |
184 | | ||0.9.8 ||CR-000068. Correct errors in INTERVAL class. ||T Beale ||20 Dec 2003 || |
185 | | ||0.9.7 ||CR-000032. Basic numeric type assumptions need to be stated CR-000041. Visually differentiate primitive types in openEHR documents. CR-000043. Move External package to Common RM and rename to Identification (incorporates CR-000036 -Add HIER_OBJECT_ID class, make OBJECT_ID class abstract.) ||DSTC, D Lloyd, T Beale ||09 Oct 2003 || |
186 | | ||0.9.6 ||CR-000013. Rename key classes. Based on CEN ENV13606. CR-000038. Remove archetype_originator from multi-axial archetype id. CR-000039. Change archetype_id section separator from ':' to '-'. ||T Beale ||18 Sep 2003 || |
187 | | ||0.9.5 ||CR-000036. Add HIER_OBJECT_ID class, make OBJECT_ID class abstract. ||T Beale ||16 Aug 2003 || |
188 | | ||0.9.4 ||CR-000022. Code TERM_MAPPING.purpose. ||G Grieve ||20 Jun 2003 || |
| 167 | ||Issue||Details||Raiser||Completed|| |
| 168 | ||1.3||CR-000135: Minor corrections to rm.support.terminology package. CR-000145: Add class for access to external environment. CR-000137: Add definitions class to support.definition package.||D Lloyd D Lloyd D Lloyd||25 Jun 2005|| |
| 169 | ||||R E L E A S E 0.95|||||| |
| 170 | ||1.2.1||CR-000129. Fix errors in UML & specs of Identification package. Adjust invariants & postcondition of OBJECT_ID, HIER_OBJECT_ID, ARCHETYPE_ID and TERMINOLOGY_ID. Improve text to do with assumed abstract types Any and Ordered_numeric.||D Lloyd||25 Feb 2005|| |
| 171 | ||1.2||CR-000128. Update Support assumed types to ISO !11404:2003. CR-000107. Add support for exclusion and inclusion of Interval limits. CR-000116. Add PARTICIPATION.function vocabulary and invariant. CR-000122. Fix UML in Terminology_access classes in Support model. CR-000118. Make package names lower case. CR-000111. Move Identification Package to Support. CR-000064. Re-evaluate COMPOSITION.is_persistent attribute. Add “composition category” vocabulary. Re-ordered vocabularies alphabetically.||T Beale A Goodchild T Beale D Lloyd T Beale DSTC D Kalra||10 Feb 2005|| |
| 172 | ||||R E L E A S E 0.9|||||| |
| 173 | ||1.1||CR-000047. Improve handling of codes for structural attributes. Populated Terminology and code_set codes.||S Heard||11 Mar 2004|| |
| 174 | ||1.0||CR-000091. Correct anomalies in use of CODE_PHRASE and DV_CODED_TEXT. Add simple terminology service interface. CR-000095. Remove property attribute from Quantity package. Add simple measurement interface. Formally validated using ISE Eiffel 5.4.||T Beale DSTC, S Heard||09 Mar 2004|| |
| 175 | ||0.9.9||CR-000063. ATTESTATION should have a status attribute.||D Kalra||13 Feb 2004|| |
| 176 | ||0.9.8||CR-000068. Correct errors in INTERVAL class.||T Beale||20 Dec 2003|| |
| 177 | ||0.9.7||CR-000032. Basic numeric type assumptions need to be stated CR-000041. Visually differentiate primitive types in openEHR documents. CR-000043. Move External package to Common RM and rename to Identification (incorporates CR-000036 -Add HIER_OBJECT_ID class, make OBJECT_ID class abstract.)||DSTC, D Lloyd, T Beale||09 Oct 2003|| |
| 178 | ||0.9.6||CR-000013. Rename key classes. Based on CEN ENV13606. CR-000038. Remove archetype_originator from multi-axial archetype id. CR-000039. Change archetype_id section separator from ':' to '-'.||T Beale||18 Sep 2003|| |
| 179 | ||0.9.5||CR-000036. Add HIER_OBJECT_ID class, make OBJECT_ID class abstract.||T Beale||16 Aug 2003|| |
| 180 | ||0.9.4||CR-000022. Code TERM_MAPPING.purpose.||G Grieve||20 Jun 2003|| |
423 | | == Introduction == #LinkTarget_15939 |
424 | | |
425 | | === 1.1 Purpose === #LinkTarget_15941 |
426 | | This document describes the openEHR Support Reference Model, whose semantics are used by all openEHR Reference Models. The intended audience includes: |
427 | | |
428 | | |
429 | | * Standards bodies producing health informatics standards; |
430 | | * Software development organisations developing EHR systems; |
431 | | * Academic groups studying the EHR; |
432 | | * The open source healthcare community. |
433 | | |
434 | | |
435 | | === 1.2 Related Documents === #LinkTarget_15957 |
436 | | Prerequisite documents for reading this document include: |
437 | | |
438 | | |
439 | | * The openEHR Architecture Overview |
440 | | * The openEHR Modelling Guide |
441 | | |
442 | | |
443 | | === 1.3 Status === #LinkTarget_15967 |
444 | | This document is under development, and is published as a proposal for input to standards processes and implementation works. |
| 413 | == Introduction == #LinkTarget_15939 |
| 414 | === 1.1 Purpose === #LinkTarget_15941 |
| 415 | This document describes the openEHR Support Reference Model, whose semantics are used by all openEHR Reference Models. The intended audience includes: |
| 416 | |
| 417 | * Standards bodies producing health informatics standards; |
| 418 | * Software development organisations developing EHR systems; |
| 419 | * Academic groups studying the EHR; |
| 420 | * The open source healthcare community. |
| 421 | |
| 422 | === 1.2 Related Documents === #LinkTarget_15957 |
| 423 | Prerequisite documents for reading this document include: |
| 424 | |
| 425 | * The openEHR Architecture Overview |
| 426 | * The openEHR Modelling Guide |
| 427 | |
| 428 | === 1.3 Status === #LinkTarget_15967 |
| 429 | This document is under development, and is published as a proposal for input to standards processes and implementation works. |
515 | | == Assumed Types == #LinkTarget_16093 |
516 | | |
517 | | === 3.1 Overview === #LinkTarget_16095 |
518 | | This section describes types assumed by all openEHR models. The set of types chosen here is based on a common set from various published sources, including: |
519 | | |
520 | | |
521 | | * ISO 11404 (2003 revision) general purpose data types; |
522 | | * ISO 8601 (2004) date/time specification; |
523 | | * Well-known interoperability formalisms, including OMG IDL, W3C XML-schema; |
524 | | * Well-known object-oriented programming languages, including Java, C#, C++ and Eiffel. |
525 | | |
526 | | The intention in openEHR is twofold. Firstly, to ensure that openEHR software based on the models integrates as easily as possible with existing implementation technologies, and secondly, to make the minimum possible assumptions about types found in implementation formalisms, while making sufficient assumptions to both enable openEHR models to be conveniently specified. The ISO 11404 (2003) standard contains basic semantics of “general purpose data types” (GPDs) for information technology, and is used here as a normative basis for describing assumptions about types. The operations and properties described here are compatible with those used in ISO 11404, but not always the same, as 11404 does not use object-oriented functions. For example, the notional function has(!x:T) (test for presence of a value in a set) defined on the type Set<T> below is not defined on the ISO 11404 Set type; instead, the function !IsIn(x: T; s: Set<T>) is defined. However, in object-oriented formalisms, the function !IsIn defined on a Set type would usually mean ‘subset of’. In the interests of clarity for developers, an object-oriented style of functions and properties has been used here. |
527 | | |
528 | | !ISO8601:2004 is used as the definitional basis for assumed date/time types, since it is commonly used [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16711 around the world, and is also the basis for the date/time types in W3C XML-schema. See section 3.4] [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16711 on page 22] below for details of dates and times. |
529 | | |
530 | | Two groups of assumed types are identified: primitive types, which are those built in to a formalism’s type system, and library types, which are assumed to be available in a (class) library defined in the formalism. Thus, the type Boolean is always assumed to exist in a formalism, while the type Array<T> is assumed to be available in a library. For practical purposes, these two categories do not matter that much - whether String is really a library class (the usual case) or an inbuilt type doesn’t make much difference to the programmer. They are shown separately here mainly as an explanatory convenience. |
531 | | |
532 | | The assumptions that openEHR makes about existing types are documented below in terms of interface definitions. Each of these definitions contains only the assumptions required for the given type to be used in the openEHR Reference Model -it is not by any means a complete interface definition. The name and semantics of any function used here for an assumed type might not be identical to those found in some implementation technologies. Any mapping required should be stated in the relevant implementation technology specification (ITS). To give a concrete example, where the assumed Set<T> type defined below has an operation has(item: T): Boolean which is used throughout the openEHR specifications, Java has the method contains() on its Set<T> class. In a Java implementation, the contains() method should then be used throughout the openEHR classes as expressed in Java, in place of the has() method. |
| 494 | == Assumed Types == #LinkTarget_16093 |
| 495 | === 3.1 Overview === #LinkTarget_16095 |
| 496 | This section describes types assumed by all openEHR models. The set of types chosen here is based on a common set from various published sources, including: |
| 497 | |
| 498 | * ISO 11404 (2003 revision) general purpose data types; |
| 499 | * ISO 8601 (2004) date/time specification; |
| 500 | * Well-known interoperability formalisms, including OMG IDL, W3C XML-schema; |
| 501 | * Well-known object-oriented programming languages, including Java, C#, C++ and Eiffel. |
| 502 | |
| 503 | The intention in openEHR is twofold. Firstly, to ensure that openEHR software based on the models integrates as easily as possible with existing implementation technologies, and secondly, to make the minimum possible assumptions about types found in implementation formalisms, while making sufficient assumptions to both enable openEHR models to be conveniently specified. The ISO 11404 (2003) standard contains basic semantics of “general purpose data types” (GPDs) for information technology, and is used here as a normative basis for describing assumptions about types. The operations and properties described here are compatible with those used in ISO 11404, but not always the same, as 11404 does not use object-oriented functions. For example, the notional function has(!x:T) (test for presence of a value in a set) defined on the type Set<T> below is not defined on the ISO 11404 Set type; instead, the function !IsIn(x: T; s: Set<T>) is defined. However, in object-oriented formalisms, the function !IsIn defined on a Set type would usually mean ‘subset of’. In the interests of clarity for developers, an object-oriented style of functions and properties has been used here. |
| 504 | |
| 505 | !ISO8601:2004 is used as the definitional basis for assumed date/time types, since it is commonly used [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16711 around the world, and is also the basis for the date/time types in W3C XML-schema. See section 3.4] [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_16711 on page 22] below for details of dates and times. |
| 506 | |
| 507 | Two groups of assumed types are identified: primitive types, which are those built in to a formalism’s type system, and library types, which are assumed to be available in a (class) library defined in the formalism. Thus, the type Boolean is always assumed to exist in a formalism, while the type Array<T> is assumed to be available in a library. For practical purposes, these two categories do not matter that much - whether String is really a library class (the usual case) or an inbuilt type doesn’t make much difference to the programmer. They are shown separately here mainly as an explanatory convenience. |
| 508 | |
| 509 | The assumptions that openEHR makes about existing types are documented below in terms of interface definitions. Each of these definitions contains only the assumptions required for the given type to be used in the openEHR Reference Model -it is not by any means a complete interface definition. The name and semantics of any function used here for an assumed type might not be identical to those found in some implementation technologies. Any mapping required should be stated in the relevant implementation technology specification (ITS). To give a concrete example, where the assumed Set<T> type defined below has an operation has(item: T): Boolean which is used throughout the openEHR specifications, Java has the method contains() on its Set<T> class. In a Java implementation, the contains() method should then be used throughout the openEHR classes as expressed in Java, in place of the has() method. |
578 | | 3.2.1 Any Type |
579 | | |
580 | | |
581 | | ||INTERFACE ||Any (abstract) || |
582 | | ||Description ||Abstract supertype. Usually maps to a type like “Any” or “Object” in an object system. Defined here to provide the value and reference equality semantics. || |
583 | | ||Abstract ||Signature ||Meaning || |
584 | | ||||is_equal (other: Any): Boolean ||Value equality || |
585 | | ||Functions ||Signature ||Meaning || |
586 | | ||||infix ‘=’ (other: Any): Boolean ||Reference equality || |
587 | | ||||instance_of (a_type: String) ||Dynamic type of object as a String. Used for type name matching. || |
588 | | ||Invariants |||| |
589 | | |
590 | | 3.2.2 Ordered Type |
591 | | |
592 | | |
593 | | ||INTERFACE ||Ordered (abstract) || |
594 | | ||Purpose ||Abstract notional parent class of ordered, types i.e. types on which the ‘<‘ operator is defined. || |
595 | | ||Abstract ||Signature ||Meaning || |
596 | | ||||infix ‘<’ (other: like Current): Boolean ||Arithmetic comparison. In conjunction with ‘=’, enables the definition of the operators ‘>’, ‘>=’, ‘<=’, ‘<>’. In real type systems, this operator might be defined on another class for comparability. || |
597 | | ||Invariants |||| |
598 | | |
599 | | 3.2.3 Numeric Type |
600 | | |
601 | | |
602 | | ||INTERFACE ||Numeric (abstract) || |
603 | | ||Purpose ||Abstract notional parent class of numeric types, which are types which have various arithmetic and comparison operators defined. || |
604 | | ||Abstract ||Signature ||Meaning || |
| 552 | 3.2.1 Any Type |
| 553 | |
| 554 | ||INTERFACE||Any (abstract)|| |
| 555 | ||Description||Abstract supertype. Usually maps to a type like “Any” or “Object” in an object system. Defined here to provide the value and reference equality semantics.|| |
| 556 | ||Abstract||Signature||Meaning|| |
| 557 | ||||is_equal (other: Any): Boolean||Value equality|| |
| 558 | ||Functions||Signature||Meaning|| |
| 559 | ||||infix ‘=’ (other: Any): Boolean||Reference equality|| |
| 560 | ||||instance_of (a_type: String)||Dynamic type of object as a String. Used for type name matching.|| |
| 561 | ||Invariants|||| |
| 562 | |
| 563 | 3.2.2 Ordered Type |
| 564 | |
| 565 | ||INTERFACE||Ordered (abstract)|| |
| 566 | ||Purpose||Abstract notional parent class of ordered, types i.e. types on which the ‘<‘ operator is defined.|| |
| 567 | ||Abstract||Signature||Meaning|| |
| 568 | ||||infix ‘<’ (other: like Current): Boolean||Arithmetic comparison. In conjunction with ‘=’, enables the definition of the operators ‘>’, ‘>=’, ‘<=’, ‘<>’. In real type systems, this operator might be defined on another class for comparability.|| |
| 569 | ||Invariants|||| |
| 570 | |
| 571 | 3.2.3 Numeric Type |
| 572 | |
| 573 | ||INTERFACE||Numeric (abstract)|| |
| 574 | ||Purpose||Abstract notional parent class of numeric types, which are types which have various arithmetic and comparison operators defined.|| |
| 575 | ||Abstract||Signature||Meaning|| |
612 | | |
613 | | ||INTERFACE ||Numeric (abstract) || |
614 | | ||||infix "*" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void ||Product by `other'. Actual type of result depends on arithmetic balancing rules. || |
615 | | ||||infix "+" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void commutative: equal (Result, other + Current) ||Sum with `other' (commutative). Actual type of result depends on arithmetic balancing rules. || |
616 | | ||||infix "-" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void ||Result of subtracting `other'. Actual type of result depends on arithmetic balancing rules. || |
617 | | ||Invariants |||| |
618 | | |
619 | | 3.2.4 Ordered_numeric Type |
620 | | |
621 | | |
622 | | ||INTERFACE ||Ordered_numeric (abstract) || |
623 | | ||Purpose ||Abstract notional parent class of ordered, numeric types, which are types with ‘<‘ and arithmetic operators defined. || |
624 | | ||Inherit ||ORDERED, NUMERIC || |
625 | | ||Function ||Signature ||Meaning || |
626 | | ||Invariants |||| |
627 | | |
628 | | 3.2.5 Boolean Type |
629 | | |
630 | | |
631 | | ||INTERFACE ||Boolean |||| |
632 | | ||Purpose ||Boolean type used for two-valued mathematical logic. |||| |
633 | | ||Function ||Signature ||||Meaning || |
| 583 | ||INTERFACE||Numeric (abstract)|| |
| 584 | ||||infix "*" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void||Product by `other'. Actual type of result depends on arithmetic balancing rules.|| |
| 585 | ||||infix "+" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void commutative: equal (Result, other + Current)||Sum with `other' (commutative). Actual type of result depends on arithmetic balancing rules.|| |
| 586 | ||||infix "-" (other: like Current): like Current require other_exists: other /= void ensure result_exists: Result /= void||Result of subtracting `other'. Actual type of result depends on arithmetic balancing rules.|| |
| 587 | ||Invariants|||| |
| 588 | |
| 589 | 3.2.4 Ordered_numeric Type |
| 590 | |
| 591 | ||INTERFACE||Ordered_numeric (abstract)|| |
| 592 | ||Purpose||Abstract notional parent class of ordered, numeric types, which are types with ‘<‘ and arithmetic operators defined.|| |
| 593 | ||Inherit||ORDERED, NUMERIC|| |
| 594 | ||Function||Signature||Meaning|| |
| 595 | ||Invariants|||| |
| 596 | |
| 597 | 3.2.5 Boolean Type |
| 598 | |
| 599 | ||INTERFACE||Boolean|||| |
| 600 | ||Purpose||Boolean type used for two-valued mathematical logic.|||| |
| 601 | ||Function||Signature||||Meaning|| |
655 | | |
656 | | ||INTERFACE ||Boolean || |
657 | | ||||infix "implies" (other: Boolean): Boolean require other_exists: other /= void ensure definition: Result = (not Current or else other) ||Boolean implication of `other' (semi-strict) || |
658 | | ||Invariants ||involutive_negation: is_equal (not (not Current)) non_contradiction: not (Current and (not Current)) completeness: Current or else (not Current) || |
659 | | |
660 | | 3.2.6 Real Type |
661 | | |
662 | | |
663 | | ||INTERFACE ||Real || |
664 | | ||Purpose ||Type used to represent decimal numbers. Typically corresponds to a single-precision floating point value in most languages. || |
665 | | ||Function ||Signature ||Meaning || |
666 | | ||||floor: Integer ||Return the greatest integer no greater than the value of this object. || |
667 | | ||Invariants |||| |
668 | | |
669 | | |
670 | | === 3.3 Assumed Library Types === #LinkTarget_16425 |
671 | | The types described in this section are also assumed to be fairly standard in implementation technologies by openEHR, but usually come from type libraries rather than being built into the type system of implementation formalisms. |
672 | | |
673 | | |
674 | | ||Type name in openEHR ||Description ||ISO 11404: 2003 Type || |
675 | | ||String ||represents unicode-enabled strings ||Character-String/Sequence || |
676 | | ||Array<T> ||physical container of items indexed by number ||Array || |
677 | | ||List<T> ||container of items, implied order, non-unique membership ||Sequence || |
678 | | ||Set<T> ||container of items, no order, unique membership ||Set || |
679 | | ||Hash<T,!U:Comparable> ||a table of values of any type T, keyed by values of any basic comparable type U, typically String or Integer, but may be more complex types, e.g. a coded term type. ||Table || |
680 | | ||Interval<T> ||Intervals with open or closed upper and lower bounds. ||-|| |
| 622 | ||INTERFACE||Boolean|| |
| 623 | ||||infix "implies" (other: Boolean): Boolean require other_exists: other /= void ensure definition: Result = (not Current or else other)||Boolean implication of `other' (semi-strict)|| |
| 624 | ||Invariants||involutive_negation: is_equal (not (not Current)) non_contradiction: not (Current and (not Current)) completeness: Current or else (not Current)|| |
| 625 | |
| 626 | 3.2.6 Real Type |
| 627 | |
| 628 | ||INTERFACE||Real|| |
| 629 | ||Purpose||Type used to represent decimal numbers. Typically corresponds to a single-precision floating point value in most languages.|| |
| 630 | ||Function||Signature||Meaning|| |
| 631 | ||||floor: Integer||Return the greatest integer no greater than the value of this object.|| |
| 632 | ||Invariants|||| |
| 633 | |
| 634 | === 3.3 Assumed Library Types === #LinkTarget_16425 |
| 635 | The types described in this section are also assumed to be fairly standard in implementation technologies by openEHR, but usually come from type libraries rather than being built into the type system of implementation formalisms. |
| 636 | |
| 637 | ||Type name in openEHR||Description||ISO 11404: 2003 Type|| |
| 638 | ||String||represents unicode-enabled strings||Character-String/Sequence|| |
| 639 | ||Array<T>||physical container of items indexed by number||Array|| |
| 640 | ||List<T>||container of items, implied order, non-unique membership||Sequence|| |
| 641 | ||Set<T>||container of items, no order, unique membership||Set|| |
| 642 | ||Hash<T,!U:Comparable>||a table of values of any type T, keyed by values of any basic comparable type U, typically String or Integer, but may be more complex types, e.g. a coded term type.||Table|| |
| 643 | ||Interval<T>||Intervals with open or closed upper and lower bounds.||-|| |
698 | | |
699 | | ==== String ==== |
700 | | Interval |
701 | | |
702 | | FIGURE 3 Library Types Assumed by openEHR |
703 | | |
704 | | 3.3.1 String Type |
705 | | |
706 | | |
707 | | ||INTERFACE ||String || |
708 | | ||Description ||Strings of characters, as used to represent textual data in any natural or formal language. || |
709 | | ||Functions ||Signature ||Meaning || |
710 | | ||||infix ‘+’ (other: String): String ||Concatenation operator - causes ‘other’ to be appended to this string || |
711 | | ||||is_empty: Boolean ||True if string is empty, i.e. equal to “”. || |
712 | | ||||is_integer: Boolean ||True if string can be parsed as an integer. || |
713 | | ||||as_integer: Integer require is_integer ||Return the integer corresponding to the integer value represented in this string. || |
714 | | ||Invariants |||| |
715 | | |
716 | | |
717 | | ==== 3.3.1.1 UNICODE ==== #LinkTarget_16522 |
718 | | It is assumed in the openEHR specifications that Unicode is supported by the type String. Unicode is needed for all Asian, Arabic and other script languages, for both data values (particularly plain text and coded text) and for many predefined string attributes of the classes in the openEHR Reference Model. It encompasses all existing character sets. In openEHR, UTF-8 encoding is assumed. |
719 | | |
720 | | |
721 | | === 3.3.2 Aggregate Type === #LinkTarget_16525 |
722 | | Abstract parent of of the aggregate types List<T>, Set<T>, Array<T> and Hash<T,K>. |
| 661 | ==== String ==== |
| 662 | Interval |
| 663 | |
| 664 | FIGURE 3 Library Types Assumed by openEHR |
| 665 | |
| 666 | 3.3.1 String Type |
| 667 | |
| 668 | ||INTERFACE||String|| |
| 669 | ||Description||Strings of characters, as used to represent textual data in any natural or formal language.|| |
| 670 | ||Functions||Signature||Meaning|| |
| 671 | ||||infix ‘+’ (other: String): String||Concatenation operator - causes ‘other’ to be appended to this string|| |
| 672 | ||||is_empty: Boolean||True if string is empty, i.e. equal to “”.|| |
| 673 | ||||is_integer: Boolean||True if string can be parsed as an integer.|| |
| 674 | ||||as_integer: Integer require is_integer||Return the integer corresponding to the integer value represented in this string.|| |
| 675 | ||Invariants|||| |
| 676 | |
| 677 | ==== 3.3.1.1 UNICODE ==== #LinkTarget_16522 |
| 678 | It is assumed in the openEHR specifications that Unicode is supported by the type String. Unicode is needed for all Asian, Arabic and other script languages, for both data values (particularly plain text and coded text) and for many predefined string attributes of the classes in the openEHR Reference Model. It encompasses all existing character sets. In openEHR, UTF-8 encoding is assumed. |
| 679 | |
| 680 | === 3.3.2 Aggregate Type === #LinkTarget_16525 |
| 681 | Abstract parent of of the aggregate types List<T>, Set<T>, Array<T> and Hash<T,K>. |
730 | | |
731 | | ||INTERFACE ||Aggregate <T> (abstract) || |
732 | | ||Functions ||Signature ||Meaning || |
733 | | ||||has (v: T): Boolean ||Test for membership of a value || |
734 | | ||||count: Integer ||Number of items in container || |
735 | | ||||is_empty: Boolean ||True if container is empty. || |
736 | | ||Invariants |||| |
737 | | |
738 | | 3.3.3 List Type |
739 | | |
740 | | |
741 | | ||INTERFACE ||List <T> (abstract) || |
742 | | ||Description ||Ordered container that may contain duplicates. || |
743 | | ||Functions ||Signature ||Meaning || |
744 | | ||||first: T ||Return first element. || |
745 | | ||||last: T ||Return last element. || |
746 | | ||Invariants ||First_validity: not is_empty implies first /= Void Last_validity: not is_empty implies last /= Void || |
747 | | |
748 | | 3.3.4 Set Type |
749 | | |
750 | | |
751 | | ||INTERFACE ||Set <T> (abstract) || |
752 | | ||Description ||Unordered container that may not contain duplicates. || |
753 | | ||Functions ||Signature ||Meaning || |
754 | | ||Invariants |||| |
755 | | |
756 | | 3.3.5 Array Type |
757 | | |
758 | | |
759 | | ||INTERFACE ||Array <T> (abstract) || |
760 | | ||Description ||Container whose storage is assumed to be contiguous. || |
761 | | ||Functions ||Signature ||Meaning || |
762 | | ||Invariants |||| |
| 689 | ||INTERFACE||Aggregate <T> (abstract)|| |
| 690 | ||Functions||Signature||Meaning|| |
| 691 | ||||has (v: T): Boolean||Test for membership of a value|| |
| 692 | ||||count: Integer||Number of items in container|| |
| 693 | ||||is_empty: Boolean||True if container is empty.|| |
| 694 | ||Invariants|||| |
| 695 | |
| 696 | 3.3.3 List Type |
| 697 | |
| 698 | ||INTERFACE||List <T> (abstract)|| |
| 699 | ||Description||Ordered container that may contain duplicates.|| |
| 700 | ||Functions||Signature||Meaning|| |
| 701 | ||||first: T||Return first element.|| |
| 702 | ||||last: T||Return last element.|| |
| 703 | ||Invariants||First_validity: not is_empty implies first /= Void Last_validity: not is_empty implies last /= Void|| |
| 704 | |
| 705 | 3.3.4 Set Type |
| 706 | |
| 707 | ||INTERFACE||Set <T> (abstract)|| |
| 708 | ||Description||Unordered container that may not contain duplicates.|| |
| 709 | ||Functions||Signature||Meaning|| |
| 710 | ||Invariants|||| |
| 711 | |
| 712 | 3.3.5 Array Type |
| 713 | |
| 714 | ||INTERFACE||Array <T> (abstract)|| |
| 715 | ||Description||Container whose storage is assumed to be contiguous.|| |
| 716 | ||Functions||Signature||Meaning|| |
| 717 | ||Invariants|||| |
770 | | 3.3.6 Hash Type |
771 | | |
772 | | |
773 | | ||INTERFACE ||Hash <T, U: Comparable> || |
774 | | ||Description ||Type representing a keyed table of values. T is the value type, and U the type of the keys. || |
775 | | ||Functions ||Signature ||Meaning || |
776 | | ||||has_key (a_key: U): Boolean ||Test for membership of a key || |
777 | | ||||item (a_key: U): T ||Return item for key ‘a_key’. Equivalent to ISO 11404 fetch operation. || |
778 | | ||Invariants |||| |
779 | | |
780 | | 3.3.7 Interval Type |
781 | | |
782 | | |
783 | | ||INTERFACE ||Interval <!T:Ordered> || |
784 | | ||Purpose ||Interval of ordered items. || |
785 | | ||Attributes ||Signature ||Meaning || |
786 | | ||||lower: T ||lower bound || |
787 | | ||||upper: T ||upper bound || |
788 | | ||||lower_unbounded: Boolean ||lower boundary open (i.e. = -infinity) || |
789 | | ||||upper_unbounded: Boolean ||upper boundary open (i.e. = +infinity) || |
790 | | ||||lower_included: Boolean ||lower boundary value included in range if not lower_unbounded || |
791 | | ||||upper_included: Boolean ||upper boundary value included in range if not upper_unbounded || |
792 | | ||Functions ||Signature ||Meaning || |
793 | | ||||has(e:T): Boolean ||True if (lower_unbounded or ((lower_included and v >= lower) or v > lower)) and (upper_unbounded or ((upper_included and v <= upper or v < upper))) || |
| 725 | 3.3.6 Hash Type |
| 726 | |
| 727 | ||INTERFACE||Hash <T, U: Comparable>|| |
| 728 | ||Description||Type representing a keyed table of values. T is the value type, and U the type of the keys.|| |
| 729 | ||Functions||Signature||Meaning|| |
| 730 | ||||has_key (a_key: U): Boolean||Test for membership of a key|| |
| 731 | ||||item (a_key: U): T||Return item for key ‘a_key’. Equivalent to ISO 11404 fetch operation.|| |
| 732 | ||Invariants|||| |
| 733 | |
| 734 | 3.3.7 Interval Type |
| 735 | |
| 736 | ||INTERFACE||Interval <!T:Ordered>|| |
| 737 | ||Purpose||Interval of ordered items.|| |
| 738 | ||Attributes||Signature||Meaning|| |
| 739 | ||||lower: T||lower bound|| |
| 740 | ||||upper: T||upper bound|| |
| 741 | ||||lower_unbounded: Boolean||lower boundary open (i.e. = -infinity)|| |
| 742 | ||||upper_unbounded: Boolean||upper boundary open (i.e. = +infinity)|| |
| 743 | ||||lower_included: Boolean||lower boundary value included in range if not lower_unbounded|| |
| 744 | ||||upper_included: Boolean||upper boundary value included in range if not upper_unbounded|| |
| 745 | ||Functions||Signature||Meaning|| |
| 746 | ||||has(e:T): Boolean||True if (lower_unbounded or ((lower_included and v >= lower) or v > lower)) and (upper_unbounded or ((upper_included and v <= upper or v < upper)))|| |
811 | | TIME_DEFINITIONS |
812 | | |
813 | | ISO 8601 semantics not used in openEHR include: |
814 | | |
815 | | |
816 | | * “expanded” dates, which have year numbers of greater than 4 digits, and may be negative; in openEHR, only 4-digit year numbers are assumed; |
817 | | * the YYYY-WW-DD method of expressing dates (since this is imprecise and difficult to compute with due to variable week starting dates, and not required in health); |
818 | | * partial date/times with fractional minutes or hours, e.g. hh,hhh or mm,mm; in openEHR, only fractional seconds are supported; |
819 | | * the interval syntax. Intervals of date/times are supported in openEHR, but their syntax form is defined by ADL, and is standardised across all comparable types, not just dates and times. |
820 | | |
821 | | |
822 | | ==== Deviations from the published standard include the following: ==== |
823 | | |
824 | | * durations are supposed to take the form of PnnW or PnnYnnMnnDTnnHnnMnnS, but in openEHR, the W (week) designator can be used in combination with the other designators, since it is very common to state durations of pregnancy as some combination of weeks and days. |
825 | | * partial variants of ISO8601_DATE_TIME can include missing hours, days and months, whereas ISO !8601:2004 (section 4.3.3 c) only allows missing seconds and minutes. The reasons for this deviation are: |
| 763 | TIME_DEFINITIONS |
| 764 | |
| 765 | ISO 8601 semantics not used in openEHR include: |
| 766 | |
| 767 | * “expanded” dates, which have year numbers of greater than 4 digits, and may be negative; in openEHR, only 4-digit year numbers are assumed; |
| 768 | * the YYYY-WW-DD method of expressing dates (since this is imprecise and difficult to compute with due to variable week starting dates, and not required in health); |
| 769 | * partial date/times with fractional minutes or hours, e.g. hh,hhh or mm,mm; in openEHR, only fractional seconds are supported; |
| 770 | * the interval syntax. Intervals of date/times are supported in openEHR, but their syntax form is defined by ADL, and is standardised across all comparable types, not just dates and times. |
| 771 | |
| 772 | ==== Deviations from the published standard include the following: ==== |
| 773 | * durations are supposed to take the form of PnnW or PnnYnnMnnDTnnHnnMnnS, but in openEHR, the W (week) designator can be used in combination with the other designators, since it is very common to state durations of pregnancy as some combination of weeks and days. |
| 774 | * partial variants of ISO8601_DATE_TIME can include missing hours, days and months, whereas ISO !8601:2004 (section 4.3.3 c) only allows missing seconds and minutes. The reasons for this deviation are: |
833 | | -the same deviation is used in HL7v2 and HL7v3 TS (timestamp) type, i.e. there are data in existing clinical systems matching this specification; |
834 | | |
835 | | -in a typed object model, this deviation is more sensible anyway; the ISO 8601 rule is most likely a limitation of the purely syntactic means of expression. In real systems where a timestamp/date-time is specified in a screen form, it makes sense to allow it to be as partial as possible, rather than artifically restricted to only missing seconds and minutes. |
836 | | |
837 | | • the time !24:00:00 (or 240000) is not allowed anywhere, whereas in !ISO8601:2004 it appears to be legal at least for times. This deviation is also appears to be used in HL7v2 and HL7v3 (where midnight is defined as the time !00:00:00), and is preferable to the documented standard, since a date/time with time of !24:00:00 is really the next day, i.e. the date part is then incorrect. |
838 | | |
839 | | The following class definitions provide an object-oriented expression of the semantics of the subset of ISO !8601:2004 used by openEHR. |
840 | | |
841 | | See [http://www.cl.cam.ac.uk/%7Emgk25/iso-time.html http://www.cl.cam.ac.uk/~mgk25/iso-time.html] and the official ISO standard for ISO 8601 details. Note that in the date, time and date_time formats shown below, ‘Z’ and ‘T’ are literals. In the duration class shown below, ‘P’, ‘Y’, ‘M’, ‘W’, ‘D’, ‘H’, ‘S’ and ‘T’ are literals. |
842 | | |
843 | | 3.4.1 TIME_DEFINITIONS Class |
844 | | |
845 | | |
846 | | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
847 | | |
848 | | ||INTERFACE ||TIME_DEFINITIONS || |
849 | | ||Purpose ||Definitions for date/time classes. Note that the timezone limits are set by where the international dateline is. Thus, time in New Zealand is quoted using !+12:00, not !-12:00. || |
850 | | ||Constants ||Signature ||Meaning || |
851 | | ||1..1 ||Seconds_in_minute: Integer = 60 |||| |
852 | | ||1..1 ||Minutes_in_hour: Integer = 60 |||| |
853 | | ||1..1 ||Hours_in_day: Integer = 24 |||| |
854 | | ||1..1 ||Nominal_days_in_month: Real = 30.42 ||Used for conversions of durations containing months to days and / or seconds. || |
855 | | ||1..1 ||Max_days_in_month: Integer = 31 ||Used for validity checking. || |
856 | | ||1..1 ||Days_in_year: Integer = 365 |||| |
857 | | ||1..1 ||Days_in_leap_year: Integer = 366 |||| |
858 | | ||1..1 ||Max_days_in_year: Integer = Days_in_leap_year ||Used for validity checking. || |
| 782 | -the same deviation is used in HL7v2 and HL7v3 TS (timestamp) type, i.e. there are data in existing clinical systems matching this specification; |
| 783 | |
| 784 | -in a typed object model, this deviation is more sensible anyway; the ISO 8601 rule is most likely a limitation of the purely syntactic means of expression. In real systems where a timestamp/date-time is specified in a screen form, it makes sense to allow it to be as partial as possible, rather than artifically restricted to only missing seconds and minutes. |
| 785 | |
| 786 | • the time !24:00:00 (or 240000) is not allowed anywhere, whereas in !ISO8601:2004 it appears to be legal at least for times. This deviation is also appears to be used in HL7v2 and HL7v3 (where midnight is defined as the time !00:00:00), and is preferable to the documented standard, since a date/time with time of !24:00:00 is really the next day, i.e. the date part is then incorrect. |
| 787 | |
| 788 | The following class definitions provide an object-oriented expression of the semantics of the subset of ISO !8601:2004 used by openEHR. |
| 789 | |
| 790 | See [http://www.cl.cam.ac.uk/%7Emgk25/iso-time.html http://www.cl.cam.ac.uk/~mgk25/iso-time.html] and the official ISO standard for ISO 8601 details. Note that in the date, time and date_time formats shown below, ‘Z’ and ‘T’ are literals. In the duration class shown below, ‘P’, ‘Y’, ‘M’, ‘W’, ‘D’, ‘H’, ‘S’ and ‘T’ are literals. |
| 791 | |
| 792 | 3.4.1 TIME_DEFINITIONS Class |
| 793 | |
| 794 | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
| 795 | |
| 796 | ||INTERFACE||TIME_DEFINITIONS|| |
| 797 | ||Purpose||Definitions for date/time classes. Note that the timezone limits are set by where the international dateline is. Thus, time in New Zealand is quoted using !+12:00, not !-12:00.|| |
| 798 | ||Constants||Signature||Meaning|| |
| 799 | ||1..1||Seconds_in_minute: Integer = 60|||| |
| 800 | ||1..1||Minutes_in_hour: Integer = 60|||| |
| 801 | ||1..1||Hours_in_day: Integer = 24|||| |
| 802 | ||1..1||Nominal_days_in_month: Real = 30.42||Used for conversions of durations containing months to days and / or seconds.|| |
| 803 | ||1..1||Max_days_in_month: Integer = 31||Used for validity checking.|| |
| 804 | ||1..1||Days_in_year: Integer = 365|||| |
| 805 | ||1..1||Days_in_leap_year: Integer = 366|||| |
| 806 | ||1..1||Max_days_in_year: Integer = Days_in_leap_year||Used for validity checking.|| |
864 | | |
865 | | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
866 | | |
867 | | ||INTERFACE ||TIME_DEFINITIONS || |
868 | | ||1..1 ||Nominal_days_in_year: Real = 365.24 ||Used for conversions of durations containing years to days and / or seconds. || |
869 | | ||1..1 ||Days_in_week: Integer = 7 |||| |
870 | | ||1..1 ||Months_in_year: Integer = 12 |||| |
871 | | ||1..1 ||Min_timezone_hour: Integer ensure Result = 12 ||Minimum hour value of a timezone (note that the -ve sign is supplied in the ISO8601_TIMEZONE class). || |
872 | | ||1..1 ||Max_timezone_hour: Integer ensure Result = 13 ||Maximum hour value of a timezone. || |
873 | | ||Functions ||Signature ||Meaning || |
874 | | ||||valid_year (y: Integer): Boolean ensure Result = y >= 0 ||True if y >= 0 || |
875 | | ||||valid_month (m: Integer): Boolean ensure Result = m >= 1 and m <= Months_in_year ||True if m >= 1 and m <= Months_in_year || |
876 | | ||||valid_day (y, m, d: Integer): Boolean ensure Result = d >= 1 and d <= days_in_month(m, y) ||True if d >= 1 and d <= days_in_month(m, y) || |
877 | | ||||valid_hour (h, m, s: Integer): Boolean ensure Result = (h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0) ||True if (h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0) || |
878 | | ||||valid_minute (m: Integer): Boolean ensure Result = m >= 0 and m < Minutes_in_hour ||True if m >= 0 and m < Minutes_in_hour || |
| 812 | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
| 813 | |
| 814 | ||INTERFACE||TIME_DEFINITIONS|| |
| 815 | ||1..1||Nominal_days_in_year: Real = 365.24||Used for conversions of durations containing years to days and / or seconds.|| |
| 816 | ||1..1||Days_in_week: Integer = 7|||| |
| 817 | ||1..1||Months_in_year: Integer = 12|||| |
| 818 | ||1..1||Min_timezone_hour: Integer ensure Result = 12||Minimum hour value of a timezone (note that the -ve sign is supplied in the ISO8601_TIMEZONE class).|| |
| 819 | ||1..1||Max_timezone_hour: Integer ensure Result = 13||Maximum hour value of a timezone.|| |
| 820 | ||Functions||Signature||Meaning|| |
| 821 | ||||valid_year (y: Integer): Boolean ensure Result = y >= 0||True if y >= 0|| |
| 822 | ||||valid_month (m: Integer): Boolean ensure Result = m >= 1 and m <= Months_in_year||True if m >= 1 and m <= Months_in_year|| |
| 823 | ||||valid_day (y, m, d: Integer): Boolean ensure Result = d >= 1 and d <= days_in_month(m, y)||True if d >= 1 and d <= days_in_month(m, y)|| |
| 824 | ||||valid_hour (h, m, s: Integer): Boolean ensure Result = (h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0)||True if (h >= 0 and h < Hours_in_day) or (h = Hours_in_day and m = 0 and s = 0)|| |
| 825 | ||||valid_minute (m: Integer): Boolean ensure Result = m >= 0 and m < Minutes_in_hour||True if m >= 0 and m < Minutes_in_hour|| |
884 | | |
885 | | ||INTERFACE ||TIME_DEFINITIONS || |
886 | | ||||valid_second (s: Integer): Boolean ensure Result = s >= 0 and s < Seconds_in_minute ||True if s >= 0 and s < Seconds_in_minute || |
887 | | ||||valid_fractional_second (fs: Double): Boolean ensure Result = fs >= 0.0 and fs < 1.0 ||True if fs >= 0.0 and fs < 1.0 || |
888 | | ||Invariants |||| |
889 | | |
890 | | 3.4.2 ISO8601_DATE Class |
891 | | |
892 | | |
893 | | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
894 | | |
895 | | ||INTERFACE ||ISO8601_DATE || |
896 | | ||Purpose ||Represents an absolute point in time, as measured on the Gregorian calendar, and specified only to the day. || |
897 | | ||Inherit ||ORDERED, TIME_DEFINITIONS || |
898 | | ||Function ||Signature ||Meaning || |
899 | | ||||as_string: String ||ISO8601 string for date, in format YYYYMMDD or YYYY-MM-DD, or a partial invariant. See valid_iso8601_date for validity. || |
900 | | ||||year: Integer ||Year. || |
901 | | ||||month: Integer require not month_unknown ||Month in year. || |
902 | | ||||day: Integerrequire not day_unknown ||Day in month. || |
903 | | ||||month_unknown: Boolean ||Indicates whether month in year is unknown. If so, the date is of the form “YYYY”. || |
904 | | ||||day_unknown: Boolean ||Indicates whether day in month is unknown. If so, and month is known, the date is of the form “YYYY-MM” or “YYYYMM”. || |
905 | | ||||is_partial: Boolean ||True if this date is partial, i.e. if day or more is missing. || |
| 831 | ||INTERFACE||TIME_DEFINITIONS|| |
| 832 | ||||valid_second (s: Integer): Boolean ensure Result = s >= 0 and s < Seconds_in_minute||True if s >= 0 and s < Seconds_in_minute|| |
| 833 | ||||valid_fractional_second (fs: Double): Boolean ensure Result = fs >= 0.0 and fs < 1.0||True if fs >= 0.0 and fs < 1.0|| |
| 834 | ||Invariants|||| |
| 835 | |
| 836 | 3.4.2 ISO8601_DATE Class |
| 837 | |
| 838 | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
| 839 | |
| 840 | ||INTERFACE||ISO8601_DATE|| |
| 841 | ||Purpose||Represents an absolute point in time, as measured on the Gregorian calendar, and specified only to the day.|| |
| 842 | ||Inherit||ORDERED, TIME_DEFINITIONS|| |
| 843 | ||Function||Signature||Meaning|| |
| 844 | ||||as_string: String||ISO8601 string for date, in format YYYYMMDD or YYYY-MM-DD, or a partial invariant. See valid_iso8601_date for validity.|| |
| 845 | ||||year: Integer||Year.|| |
| 846 | ||||month: Integer require not month_unknown||Month in year.|| |
| 847 | ||||day: Integerrequire not day_unknown||Day in month.|| |
| 848 | ||||month_unknown: Boolean||Indicates whether month in year is unknown. If so, the date is of the form “YYYY”.|| |
| 849 | ||||day_unknown: Boolean||Indicates whether day in month is unknown. If so, and month is known, the date is of the form “YYYY-MM” or “YYYYMM”.|| |
| 850 | ||||is_partial: Boolean||True if this date is partial, i.e. if day or more is missing.|| |
911 | | |
912 | | ||INTERFACE ||ISO8601_DATE || |
913 | | ||||is_extended: Boolean ||True if this date uses ‘-’ separators. || |
914 | | ||||infix ‘<’ (other: like Current): Boolean ||Arithmetic comparison with other date. True if this date is closer to the origin than other. || |
915 | | ||||valid_iso8601_date ||String is a valid ISO 8601 date, i.e. takes the || |
916 | | ||||(s: String): Boolean ||complete form: • YYYYMMDD or the extended form: • YYYY-MM-DD or one of the partial forms: • YYYYMM • YYYY or the equivalent extended form: • YYYY-MM Where: • YYYY is the string form of any positive number in the range “0000” - “9999” (zero-filled to four digits) • MM is “01” “12” (zero-filled to two digits) • DD is “01” - “31” (zero-filled to two digits) The combinations of YYYY, MM, DD numbers must be correct with respect to the Gregorian calendar. || |
917 | | ||Invariants ||Year_valid: valid_year(year) Month_valid: not month_unknown implies valid_month(month) Day_valid: not day_unknown implies valid_day(year, month, day) Partial_validity: month_unknown implies day_unknown || |
918 | | |
919 | | 3.4.3 ISO8601_TIME Class |
920 | | |
921 | | |
922 | | ||INTERFACE ||ISO8601_TIME || |
923 | | ||Purpose ||Represents an absolute point in time from an origin usually interpreted as meaning the start of the current day, specified to the second. A small deviation to the ISO !8601:2004 standard in this class is that the time !24:00:00 is not allowed, for consistency with ISO8601_DATE_TIME. || |
924 | | ||Inherit ||ORDERED, TIME_DEFINITIONS || |
925 | | ||Function ||Signature ||Meaning || |
| 856 | ||INTERFACE||ISO8601_DATE|| |
| 857 | ||||is_extended: Boolean||True if this date uses ‘-’ separators.|| |
| 858 | ||||infix ‘<’ (other: like Current): Boolean||Arithmetic comparison with other date. True if this date is closer to the origin than other.|| |
| 859 | ||||valid_iso8601_date||String is a valid ISO 8601 date, i.e. takes the|| |
| 860 | ||||(s: String): Boolean||complete form: • YYYYMMDD or the extended form: • YYYY-MM-DD or one of the partial forms: • YYYYMM • YYYY or the equivalent extended form: • YYYY-MM Where: • YYYY is the string form of any positive number in the range “0000” - “9999” (zero-filled to four digits) • MM is “01” “12” (zero-filled to two digits) • DD is “01” - “31” (zero-filled to two digits) The combinations of YYYY, MM, DD numbers must be correct with respect to the Gregorian calendar.|| |
| 861 | ||Invariants||Year_valid: valid_year(year) Month_valid: not month_unknown implies valid_month(month) Day_valid: not day_unknown implies valid_day(year, month, day) Partial_validity: month_unknown implies day_unknown|| |
| 862 | |
| 863 | 3.4.3 ISO8601_TIME Class |
| 864 | |
| 865 | ||INTERFACE||ISO8601_TIME|| |
| 866 | ||Purpose||Represents an absolute point in time from an origin usually interpreted as meaning the start of the current day, specified to the second. A small deviation to the ISO !8601:2004 standard in this class is that the time !24:00:00 is not allowed, for consistency with ISO8601_DATE_TIME.|| |
| 867 | ||Inherit||ORDERED, TIME_DEFINITIONS|| |
| 868 | ||Function||Signature||Meaning|| |
933 | | |
934 | | ||INTERFACE ||||ISO8601_TIME || |
935 | | ||||as_string: String ||||ISO8601 string for time, i.e. in form: hhmmss[,sss][Z|±hh[mm]] or the extended form: hh:mm:ss[,sss][Z|±hh[mm]], or a partial invariant. See valid_iso8601_time for validity. || |
936 | | ||||hour: Integer ||||Hour in day, in 24-hour time. || |
937 | | ||||minute: Integer require not minute_unknown ||||Minute in hour. || |
938 | | ||||second: Integer require not second_unknown ||||Second in minute. || |
939 | | ||||fractional_second: Double require not second_unknown ||||Fractional seconds. || |
940 | | ||||has_fractional_second: Boolean ||||True if the fractional_second part is signficant (i.e. even if = 0.0). || |
941 | | ||||timezone: ISO8601_TIMEZONE minute_unknown: Boolean ||||Time zone; may be Void. Indicates whether minute is unknown. If so, the time is of the form “hh”. || |
| 876 | ||INTERFACE||||ISO8601_TIME|| |
| 877 | ||||as_string: String||||ISO8601 string for time, i.e. in form: hhmmss[,sss][Z|±hh[mm]] or the extended form: hh:mm:ss[,sss][Z|±hh[mm]], or a partial invariant. See valid_iso8601_time for validity.|| |
| 878 | ||||hour: Integer||||Hour in day, in 24-hour time.|| |
| 879 | ||||minute: Integer require not minute_unknown||||Minute in hour.|| |
| 880 | ||||second: Integer require not second_unknown||||Second in minute.|| |
| 881 | ||||fractional_second: Double require not second_unknown||||Fractional seconds.|| |
| 882 | ||||has_fractional_second: Boolean||||True if the fractional_second part is signficant (i.e. even if = 0.0).|| |
| 883 | ||||timezone: ISO8601_TIMEZONE minute_unknown: Boolean||||Time zone; may be Void. Indicates whether minute is unknown. If so, the time is of the form “hh”.|| |
955 | | |
956 | | ||INTERFACE ||ISO8601_TIME || |
957 | | ||||valid_iso8601_time ||String is a valid ISO 8601 date, i.e. takes the || |
958 | | ||||(s: String): Boolean ||form: • hhmmss[,sss][Z | ±hh[mm]] or the extended form: • !hh:mm:ss[,sss][Z | ±hh[mm]] or one of the partial forms: • hhmm or hh or the extended form: • !hh:mm with an additional optional timezone indicator of: • Z or ±hh[mm] Where: • hh is “00” - “23” (0-filled to two digits) • mm is “00” - “59” (0-filled to two digits) • ss is “00” - “60” (0-filled to two digits) • sss is any numeric string, representing an optional fractional second • Z is a literal meaning UTC (modern replacement for GMT), i.e. timezone +0000 • ±hh[mm], i.e. +hhmm, +hh, -hhmm, -hh indicating the timezone. || |
959 | | ||Invariants ||Hour_valid: valid_hour(hour, minute, second) Minute_valid: not minute_unknown implies valid_minute(minute) Second_valid: not second_unknown implies valid_second(second) Fractional_second_valid: has_fractional_second implies (not second_unknown and valid_fractional_second(fractional_second)) Partial_validity: minute_unknown implies second_unknown || |
960 | | |
961 | | 3.4.4 ISO8601_DATE_TIME Class |
962 | | |
963 | | |
964 | | ||INTERFACE ||ISO8601_DATE_TIME || |
965 | | ||Purpose ||Represents an absolute point in time, specified to the second. Note that this class includes 2 deviations from ISO !8601:2004: • for partial date/times, any part of the date/time up to the month may be missing, not just seconds and minutes as in the standard; • the time !24:00:00 is not allowed, since it would mean the date was really on the next day. || |
966 | | ||Inherit ||ORDERED, TIME_DEFINITIONS || |
967 | | ||Function ||Signature ||Meaning || |
| 897 | ||INTERFACE||ISO8601_TIME|| |
| 898 | ||||valid_iso8601_time||String is a valid ISO 8601 date, i.e. takes the|| |
| 899 | ||||(s: String): Boolean||form: • hhmmss[,sss][Z | ±hh[mm]] or the extended form: • !hh:mm:ss[,sss][Z | ±hh[mm]] or one of the partial forms: • hhmm or hh or the extended form: • !hh:mm with an additional optional timezone indicator of: • Z or ±hh[mm] Where: • hh is “00” - “23” (0-filled to two digits) • mm is “00” - “59” (0-filled to two digits) • ss is “00” - “60” (0-filled to two digits) • sss is any numeric string, representing an optional fractional second • Z is a literal meaning UTC (modern replacement for GMT), i.e. timezone +0000 • ±hh[mm], i.e. +hhmm, +hh, -hhmm, -hh indicating the timezone.|| |
| 900 | ||Invariants||Hour_valid: valid_hour(hour, minute, second) Minute_valid: not minute_unknown implies valid_minute(minute) Second_valid: not second_unknown implies valid_second(second) Fractional_second_valid: has_fractional_second implies (not second_unknown and valid_fractional_second(fractional_second)) Partial_validity: minute_unknown implies second_unknown|| |
| 901 | |
| 902 | 3.4.4 ISO8601_DATE_TIME Class |
| 903 | |
| 904 | ||INTERFACE||ISO8601_DATE_TIME|| |
| 905 | ||Purpose||Represents an absolute point in time, specified to the second. Note that this class includes 2 deviations from ISO !8601:2004: • for partial date/times, any part of the date/time up to the month may be missing, not just seconds and minutes as in the standard; • the time !24:00:00 is not allowed, since it would mean the date was really on the next day.|| |
| 906 | ||Inherit||ORDERED, TIME_DEFINITIONS|| |
| 907 | ||Function||Signature||Meaning|| |
975 | | |
976 | | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
977 | | |
978 | | ||INTERFACE ||ISO8601_DATE_TIME || |
979 | | ||||as_string: String ensure valid_iso8601_date_time(Result) ||ISO8601 string for date/time, in format YYYYMMDDThhmmss[,sss][Z | ±hh[mm]] or in extended format !YYYY-MM-DDThh:mm:ss[,sss][Z | ±hh[mm]] or a partial variant; see valid_iso8601_date_time() below. || |
980 | | ||||year: Integer ||year || |
981 | | ||||month: Integerrequire not month_unknown ||month in year || |
982 | | ||||day: Integerrequire not day_unknown ||day in month || |
983 | | ||||hour: Integerrequire not hour_unknown ||hour in day || |
984 | | ||||minute: Integer require not minute_unknown ||minute in hour || |
985 | | ||||second: Integerrequire not second_unknown ||second in minute || |
986 | | ||||fractional_second: Double require has_fractional_second ||fractional seconds || |
987 | | ||||has_fractional_second: Boolean ||True if the fractional_second part is signficant (i.e. even if = 0.0). || |
988 | | ||||timezone: ISO8601_TIMEZONE ||Timezone; may be Void. || |
989 | | ||||month_unknown: Boolean ||Indicates whether month in year is unknown. || |
990 | | ||||day_unknown: Boolean ||Indicates whether day in month is unknown. || |
991 | | ||||hour_unknown: Boolean ||Indicates whether hour in day is known. || |
992 | | ||||minute_unknown: Boolean ||Indicates whether minute in hour is known. || |
993 | | ||||second_unknown: Boolean ||Indicates whether minute in hour is known. || |
994 | | ||||is_partial: Boolean ||True if this date is partial, i.e. if seconds or more is missing. || |
| 915 | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
| 916 | |
| 917 | ||INTERFACE||ISO8601_DATE_TIME|| |
| 918 | ||||as_string: String ensure valid_iso8601_date_time(Result)||ISO8601 string for date/time, in format YYYYMMDDThhmmss[,sss][Z | ±hh[mm]] or in extended format !YYYY-MM-DDThh:mm:ss[,sss][Z | ±hh[mm]] or a partial variant; see valid_iso8601_date_time() below.|| |
| 919 | ||||year: Integer||year|| |
| 920 | ||||month: Integerrequire not month_unknown||month in year|| |
| 921 | ||||day: Integerrequire not day_unknown||day in month|| |
| 922 | ||||hour: Integerrequire not hour_unknown||hour in day|| |
| 923 | ||||minute: Integer require not minute_unknown||minute in hour|| |
| 924 | ||||second: Integerrequire not second_unknown||second in minute|| |
| 925 | ||||fractional_second: Double require has_fractional_second||fractional seconds|| |
| 926 | ||||has_fractional_second: Boolean||True if the fractional_second part is signficant (i.e. even if = 0.0).|| |
| 927 | ||||timezone: ISO8601_TIMEZONE||Timezone; may be Void.|| |
| 928 | ||||month_unknown: Boolean||Indicates whether month in year is unknown.|| |
| 929 | ||||day_unknown: Boolean||Indicates whether day in month is unknown.|| |
| 930 | ||||hour_unknown: Boolean||Indicates whether hour in day is known.|| |
| 931 | ||||minute_unknown: Boolean||Indicates whether minute in hour is known.|| |
| 932 | ||||second_unknown: Boolean||Indicates whether minute in hour is known.|| |
| 933 | ||||is_partial: Boolean||True if this date is partial, i.e. if seconds or more is missing.|| |
1000 | | |
1001 | | ||INTERFACE ||ISO8601_DATE_TIME || |
1002 | | ||||is_decimal_sign_comma: Boolean ||True if this time has a decimal part indicated by ‘,’ (comma) rather than ‘.’ (period). || |
1003 | | ||||infix ‘<’ (other: like Current): Boolean ||Arithmetic comparison with other date/time. True if this date/time is closer to origin than other. || |
1004 | | ||||is_extended: Boolean ||True if this date/time uses ‘-’, ‘:’ separators. || |
1005 | | ||||valid_iso8601_date_time ||String is a valid ISO 8601 date-time, i.e. || |
1006 | | ||||(s: String): Boolean ||takes the form: • YYYYMMDDThhmmss[,sss] [Z | ±hh[mm]] or the extended form: • !YYYY-MM-DDThh:mm:ss[,sss] [Z | ±hh[mm]] or one of the partial forms: • YYYYMMDDThhmm • YYYYMMDDThh or the equivalent extended forms: • !YYYY-MM-DDThh:mm • YYYY-MM-DDThh (meanings as in DV_DATE, DV_TIME) and the values in each field are valid. || |
1007 | | ||Invariants ||Year_valid: valid_year(year) Month_valid: valid_month(month) Day_valid: valid_day(year, month, day) Hour_valid: valid_hour(hour, minute, second) Minute_valid: not minute_unknown implies valid_minute(minute) Second_valid: not second_unknown implies valid_second(second) Fractional_second_valid: has_fractional_second implies (not second_unknown and valid_fractional_second(fractional_second)) Partial_validity_year: not month_unknown Partial_validity_month: not month_unknown Partial_validity_day: not day_unknown Partial_validity_hour: not hour_unknown Partial_validity_minute: minute_unknown implies second_unknown || |
1008 | | |
1009 | | 3.4.5 ISO8601_TIMEZONE Class |
| 939 | ||INTERFACE||ISO8601_DATE_TIME|| |
| 940 | ||||is_decimal_sign_comma: Boolean||True if this time has a decimal part indicated by ‘,’ (comma) rather than ‘.’ (period).|| |
| 941 | ||||infix ‘<’ (other: like Current): Boolean||Arithmetic comparison with other date/time. True if this date/time is closer to origin than other.|| |
| 942 | ||||is_extended: Boolean||True if this date/time uses ‘-’, ‘:’ separators.|| |
| 943 | ||||valid_iso8601_date_time||String is a valid ISO 8601 date-time, i.e.|| |
| 944 | ||||(s: String): Boolean||takes the form: • YYYYMMDDThhmmss[,sss] [Z | ±hh[mm]] or the extended form: • !YYYY-MM-DDThh:mm:ss[,sss] [Z | ±hh[mm]] or one of the partial forms: • YYYYMMDDThhmm • YYYYMMDDThh or the equivalent extended forms: • !YYYY-MM-DDThh:mm • YYYY-MM-DDThh (meanings as in DV_DATE, DV_TIME) and the values in each field are valid.|| |
| 945 | ||Invariants||Year_valid: valid_year(year) Month_valid: valid_month(month) Day_valid: valid_day(year, month, day) Hour_valid: valid_hour(hour, minute, second) Minute_valid: not minute_unknown implies valid_minute(minute) Second_valid: not second_unknown implies valid_second(second) Fractional_second_valid: has_fractional_second implies (not second_unknown and valid_fractional_second(fractional_second)) Partial_validity_year: not month_unknown Partial_validity_month: not month_unknown Partial_validity_day: not day_unknown Partial_validity_hour: not hour_unknown Partial_validity_minute: minute_unknown implies second_unknown|| |
| 946 | |
| 947 | 3.4.5 ISO8601_TIMEZONE Class |
1017 | | |
1018 | | ||INTERFACE ||ISO8601_TIMEZONE || |
1019 | | ||Inherit ||TIME_DEFINITIONS || |
1020 | | ||Function ||Signature ||Meaning || |
1021 | | ||||as_string: String ||ISO8601 timezone string, in format • Z | ±hh[mm] where: • hh is “00” - “23” (0-filled to two digits) • mm is “00” - “59” (0-filled to two digits) • Z is a literal meaning UTC (modern replacement for GMT), i.e. timezone +0000 || |
1022 | | ||||hour: Integer ||Hour part of timezone - in the range 00 - 13 || |
1023 | | ||||minute: Integer require not minute_unknown ||Minute part of timezone. Generally 00 or 30. || |
1024 | | ||||sign: Integer ||Direction of timezone expresssed as +1 or -1. || |
1025 | | ||||is_gmt: Boolean ||True if timezone is UTC, i.e. +0000 || |
1026 | | ||||minute_unknown: Boolean ||Indicates whether minute part known. || |
1027 | | ||Invariants ||Min_hour_valid: sign = -1 implies hour > 0 and hour <= Min_timezone_hour Max_hour_valid: sign = 1 implies hour > 0 and hour <= Max_timezone_hour Minute_valid: not minute_unknown implies valid_minute(minute) Sign_valid: sign = 1 or sign = -1 || |
1028 | | |
1029 | | 3.4.6 ISO8601_DURATION Class |
1030 | | |
1031 | | |
1032 | | ||INTERFACE ||ISO8601_DURATION || |
1033 | | ||Purpose ||Represents a period of time corresponding to a difference between two time-points. || |
1034 | | ||Inherit ||ORDERED, TIME_DEFINITIONS || |
1035 | | ||Function ||Signature ||Meaning || |
1036 | | ||||as_string: String ||ISO8601 string for duration, in format • P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]] || |
1037 | | ||||years: Integer ||number of years of nominal 365-day length || |
1038 | | ||||months: Integer ||number of months of nominal 30 day length || |
1039 | | ||||weeks: Integer ||number of 7 day weeks || |
| 955 | ||INTERFACE||ISO8601_TIMEZONE|| |
| 956 | ||Inherit||TIME_DEFINITIONS|| |
| 957 | ||Function||Signature||Meaning|| |
| 958 | ||||as_string: String||ISO8601 timezone string, in format • Z | ±hh[mm] where: • hh is “00” - “23” (0-filled to two digits) • mm is “00” - “59” (0-filled to two digits) • Z is a literal meaning UTC (modern replacement for GMT), i.e. timezone +0000|| |
| 959 | ||||hour: Integer||Hour part of timezone - in the range 00 - 13|| |
| 960 | ||||minute: Integer require not minute_unknown||Minute part of timezone. Generally 00 or 30.|| |
| 961 | ||||sign: Integer||Direction of timezone expresssed as +1 or -1.|| |
| 962 | ||||is_gmt: Boolean||True if timezone is UTC, i.e. +0000|| |
| 963 | ||||minute_unknown: Boolean||Indicates whether minute part known.|| |
| 964 | ||Invariants||Min_hour_valid: sign = -1 implies hour > 0 and hour <= Min_timezone_hour Max_hour_valid: sign = 1 implies hour > 0 and hour <= Max_timezone_hour Minute_valid: not minute_unknown implies valid_minute(minute) Sign_valid: sign = 1 or sign = -1|| |
| 965 | |
| 966 | 3.4.6 ISO8601_DURATION Class |
| 967 | |
| 968 | ||INTERFACE||ISO8601_DURATION|| |
| 969 | ||Purpose||Represents a period of time corresponding to a difference between two time-points.|| |
| 970 | ||Inherit||ORDERED, TIME_DEFINITIONS|| |
| 971 | ||Function||Signature||Meaning|| |
| 972 | ||||as_string: String||ISO8601 string for duration, in format • P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]]|| |
| 973 | ||||years: Integer||number of years of nominal 365-day length|| |
| 974 | ||||months: Integer||number of months of nominal 30 day length|| |
| 975 | ||||weeks: Integer||number of 7 day weeks|| |
1047 | | |
1048 | | ||INTERFACE ||ISO8601_DURATION || |
1049 | | ||||days: Integer ||number of 24 hour days || |
1050 | | ||||hours: Integer ||number of 60 minute hours || |
1051 | | ||||minutes: Integer ||number of 60 second minutes || |
1052 | | ||||seconds: Integer ||number of seconds || |
1053 | | ||||fractional_second: Double ||fractional seconds || |
1054 | | ||||infix ‘<’ (other: like Current): Boolean ||Arithmetic comparison with other duration. True if this duration is smaller than other. || |
1055 | | ||||valid_iso8601_duration (s: String): Boolean ||String is a valid ISO 8601 duration, i.e. takes the form: • P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]] Where each nn represents a number of years, months, etc. nnW represents a number of 7day weeks. Note: allowing the W designator in the same expression as other designators is an exception to the published standard, but necessary in clinical information (typically for representing pregnancy duration). || |
1056 | | ||||is_decimal_sign_comma: Boolean ||True if this time has a decimal part indicated by ‘,’ (comma) rather than ‘.’ (period). || |
1057 | | ||||to_seconds: Double ||Total number of seconds equivalent (including fractional) of entire duration. || |
1058 | | ||Invariants ||years_valid: years >= 0 months_valid: months >= 0 weeks_valid: weeks >= 0 days_valid: days >= 0 hours_valid: hours >= 0 minutes_valid: minutes >= 0 seconds_valid: seconds >= 0 fractional_second_valid: fractional_second >= 0.0 and fractional_second < 1.0 || |
| 983 | ||INTERFACE||ISO8601_DURATION|| |
| 984 | ||||days: Integer||number of 24 hour days|| |
| 985 | ||||hours: Integer||number of 60 minute hours|| |
| 986 | ||||minutes: Integer||number of 60 second minutes|| |
| 987 | ||||seconds: Integer||number of seconds|| |
| 988 | ||||fractional_second: Double||fractional seconds|| |
| 989 | ||||infix ‘<’ (other: like Current): Boolean||Arithmetic comparison with other duration. True if this duration is smaller than other.|| |
| 990 | ||||valid_iso8601_duration (s: String): Boolean||String is a valid ISO 8601 duration, i.e. takes the form: • P[nnY][nnM][nnW][nnD][T[nnH][nnM][nnS]] Where each nn represents a number of years, months, etc. nnW represents a number of 7day weeks. Note: allowing the W designator in the same expression as other designators is an exception to the published standard, but necessary in clinical information (typically for representing pregnancy duration).|| |
| 991 | ||||is_decimal_sign_comma: Boolean||True if this time has a decimal part indicated by ‘,’ (comma) rather than ‘.’ (period).|| |
| 992 | ||||to_seconds: Double||Total number of seconds equivalent (including fractional) of entire duration.|| |
| 993 | ||Invariants||years_valid: years >= 0 months_valid: months >= 0 weeks_valid: weeks >= 0 days_valid: days >= 0 hours_valid: hours >= 0 minutes_valid: minutes >= 0 seconds_valid: seconds >= 0 fractional_second_valid: fractional_second >= 0.0 and fractional_second < 1.0|| |
1066 | | == Identification Package == #LinkTarget_17411 |
1067 | | |
1068 | | === 4.1 Overview === #LinkTarget_17413 |
1069 | | The rm.support.identification package describes a model of references and identifiers for information entities and is illustrated in [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_17418 FIGURE 5] . |
1070 | | |
1071 | | identification |
1072 | | |
1073 | | FIGURE 5 rm.support.identification Package |
1074 | | |
1075 | | |
1076 | | === 4.1.1 Requirements === #LinkTarget_17420 |
1077 | | Identification of entities both in the real world and in information systems is a non-trivial problem. The needs for identification across systems in a health information environment include the following: |
1078 | | |
1079 | | |
1080 | | * real world identifiers such as social security numbers, veterans affairs ids etc can be recorded as required by health care facilities, enterprise policies, or legislation; |
1081 | | * identifiers for informational entities which represent real world entities or processes should be unique; |
1082 | | * it should be possible to determine if two identifiers refer to information entities that represent the same real world entity, even if instances of the information entities are maintained in different systems; |
1083 | | * versions or changes to real-world entity-linked informational entities (which may create new information instances) should be accounted for in two ways: |
| 1001 | == Identification Package == #LinkTarget_17411 |
| 1002 | === 4.1 Overview === #LinkTarget_17413 |
| 1003 | The rm.support.identification package describes a model of references and identifiers for information entities and is illustrated in [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_17418 FIGURE 5] . |
| 1004 | |
| 1005 | identification |
| 1006 | |
| 1007 | FIGURE 5 rm.support.identification Package |
| 1008 | |
| 1009 | === 4.1.1 Requirements === #LinkTarget_17420 |
| 1010 | Identification of entities both in the real world and in information systems is a non-trivial problem. The needs for identification across systems in a health information environment include the following: |
| 1011 | |
| 1012 | * real world identifiers such as social security numbers, veterans affairs ids etc can be recorded as required by health care facilities, enterprise policies, or legislation; |
| 1013 | * identifiers for informational entities which represent real world entities or processes should be unique; |
| 1014 | * it should be possible to determine if two identifiers refer to information entities that represent the same real world entity, even if instances of the information entities are maintained in different systems; |
| 1015 | * versions or changes to real-world entity-linked informational entities (which may create new information instances) should be accounted for in two ways: |
1091 | | - it should be possible to tell if two identifiers refer to distinct versions of the same |
1092 | | |
1093 | | informational entity in the same version tree; |
1094 | | |
1095 | | - it should not be possible to confuse same-named versions of informational entities |
1096 | | |
1097 | | maintained in multiple systems which purport to represent the same real world |
1098 | | |
1099 | | entity. E.g. there is no guarantee that two systems’ “latest” version of the Person |
1100 | | |
1101 | | “Dr Jones” is the same. |
1102 | | |
1103 | | Medico-legal use of information relies on previous states of information being |
1104 | | |
1105 | | distinguishable from other previous states and the current state. |
1106 | | |
1107 | | • It should be possible for an entity in one system or service (such as the EHR) to refer to an entity in another system or service in such a way that: -the target of the reference is easily finable within the shared environment, and |
1108 | | |
1109 | | - the reference does is valid regardless of the physical architecture of servers and applications. |
1110 | | |
1111 | | The following subsections describe some of the features and challenges of identification. |
1112 | | |
1113 | | Identification of Real World Entities (RWEs) |
1114 | | |
1115 | | Real world entities such as people, car engines, invoices, and appointments can all be assigned identifiers. Although many of these are designed to be unique within a jurisdiction, they are often not, due to data entry errors, bad design (ids that are too small or incorporate some non-unique characteristic of the identified entities), bad process (e.g. non-synchronised id issuing points); identity theft (e.g. via theft of documents of proof or hacking). In general, while some real world identifiers (RWIs) are “nearly unique”, none can be guaranteed so. It should also be the case that if two RWE identifiers are equal, they refer to the same RWE, but this is often not the case. For practical purposes, RWIs cannot be regarded as computationally safe for making the inferences described here. |
1116 | | |
1117 | | Identification of Informational Entities (IEs) |
1118 | | |
1119 | | As soon as information systems are used to record facts about RWEs, the situation becomes more complex because of the intangible nature of information. In particular: |
1120 | | |
1121 | | |
1122 | | * the same RWE can be represented simultaneously on more than one system (‘spatial multiplicity’); |
1123 | | * the same RWE may be represented by more than one “version” of the same IE in a system (‘temporal multiplicity’). |
1124 | | |
1125 | | At first sight, it appears that there can also be purely informational entities, i.e. IEs which do not refer to any RWE, such as books, online-only documents and software. However, as soon as one considers an example it becomes clear that there is always a notional ‘definitive’ or ‘authoritative’ (i.e. trusted) version of every such entity. These entities can better be understood as ‘virtual RWEs’. Thus it can still be said that multiple IEs may refer to any given RWE. |
1126 | | |
1127 | | The underlying reason for the multiplicity of IEs is that ‘reality’ - time and space - in computer systems is not continuous but discrete, and each ‘entity’ is in fact just a snapshot of certain attribute values of a RWE, at a point in time, in a particular system. If identifiers are assigned to IEs without regard to versions or duplicates, then no assertion can be made about the identified RWE when two IE ids are compared. |
1128 | | |
1129 | | Identification of Versions |
1130 | | |
1131 | | The notion of ‘versioning’ applies only to informational entities, i.e. distinct instances of content each representing a snapshot of some logical entity. Where such instances are stored and managed in versioned containers within a versioning system of some kind, explicit identification of the versions is |
| 1023 | - it should be possible to tell if two identifiers refer to distinct versions of the same |
| 1024 | |
| 1025 | informational entity in the same version tree; |
| 1026 | |
| 1027 | - it should not be possible to confuse same-named versions of informational entities |
| 1028 | |
| 1029 | maintained in multiple systems which purport to represent the same real world |
| 1030 | |
| 1031 | entity. E.g. there is no guarantee that two systems’ “latest” version of the Person |
| 1032 | |
| 1033 | “Dr Jones” is the same. |
| 1034 | |
| 1035 | Medico-legal use of information relies on previous states of information being |
| 1036 | |
| 1037 | distinguishable from other previous states and the current state. |
| 1038 | |
| 1039 | • It should be possible for an entity in one system or service (such as the EHR) to refer to an entity in another system or service in such a way that: -the target of the reference is easily finable within the shared environment, and |
| 1040 | |
| 1041 | - the reference does is valid regardless of the physical architecture of servers and applications. |
| 1042 | |
| 1043 | The following subsections describe some of the features and challenges of identification. |
| 1044 | |
| 1045 | Identification of Real World Entities (RWEs) |
| 1046 | |
| 1047 | Real world entities such as people, car engines, invoices, and appointments can all be assigned identifiers. Although many of these are designed to be unique within a jurisdiction, they are often not, due to data entry errors, bad design (ids that are too small or incorporate some non-unique characteristic of the identified entities), bad process (e.g. non-synchronised id issuing points); identity theft (e.g. via theft of documents of proof or hacking). In general, while some real world identifiers (RWIs) are “nearly unique”, none can be guaranteed so. It should also be the case that if two RWE identifiers are equal, they refer to the same RWE, but this is often not the case. For practical purposes, RWIs cannot be regarded as computationally safe for making the inferences described here. |
| 1048 | |
| 1049 | Identification of Informational Entities (IEs) |
| 1050 | |
| 1051 | As soon as information systems are used to record facts about RWEs, the situation becomes more complex because of the intangible nature of information. In particular: |
| 1052 | |
| 1053 | * the same RWE can be represented simultaneously on more than one system (‘spatial multiplicity’); |
| 1054 | * the same RWE may be represented by more than one “version” of the same IE in a system (‘temporal multiplicity’). |
| 1055 | |
| 1056 | At first sight, it appears that there can also be purely informational entities, i.e. IEs which do not refer to any RWE, such as books, online-only documents and software. However, as soon as one considers an example it becomes clear that there is always a notional ‘definitive’ or ‘authoritative’ (i.e. trusted) version of every such entity. These entities can better be understood as ‘virtual RWEs’. Thus it can still be said that multiple IEs may refer to any given RWE. |
| 1057 | |
| 1058 | The underlying reason for the multiplicity of IEs is that ‘reality’ - time and space - in computer systems is not continuous but discrete, and each ‘entity’ is in fact just a snapshot of certain attribute values of a RWE, at a point in time, in a particular system. If identifiers are assigned to IEs without regard to versions or duplicates, then no assertion can be made about the identified RWE when two IE ids are compared. |
| 1059 | |
| 1060 | Identification of Versions |
| 1061 | |
| 1062 | The notion of ‘versioning’ applies only to informational entities, i.e. distinct instances of content each representing a snapshot of some logical entity. Where such instances are stored and managed in versioned containers within a versioning system of some kind, explicit identification of the versions is |
1139 | | required. The requirements are discussed in detail in the Common IM, change_control package. They can be summarised as follows: |
1140 | | |
1141 | | |
1142 | | * it must be possible to distinguish two versions of the same logical entity, i.e. know from the identifier if they are the same or different versions of the same thing; |
1143 | | * it must be possible to distinguish two versions of the same logical entity created in two distinct systems; |
1144 | | * it must be possible to tell the relationship between the items in a versioned lineage, from the version identifiers. |
1145 | | |
1146 | | Referencing of Informational Entities |
1147 | | |
1148 | | Within a distributed information environment, there is a need for entities not connected by direct references in the same memory space to be able to refer to each other. There are two competing requirements: |
1149 | | |
1150 | | |
1151 | | * that the separation of objects in a distributed computing environment not compromise the semantics of the model; |
1152 | | * that different types of information can be managed relatively independently; for example EHR and demographic information can be managed by different groups in an organisation or community, each with at least some freedom to change implementation and model details. |
1153 | | |
1154 | | |
1155 | | === 4.2 Design === #LinkTarget_17533 |
1156 | | This package models only informational identifiers, i.e. transparent identifiers understood by openEHR or related computational systems. Real World Entity Identifiers such as driver’s license numbers are modelled using the data type DV_IDENTIFIER. This is not to imply that such identifiers are any less systematic or well-managed than the system identifiers defined here, only that from the point of view of openEHR, they have the same status as other informational attributes such as name, address etc of a Person. |
1157 | | |
1158 | | A key design decision has been to choose a string representation for all identifiers, with subparts being made available by appropriate functions which perform simple parsing on the string. This ensures that the data representation of identifiers (e.g. in XML) is as small as possible, while not losing object-oriented typing. |
1159 | | |
1160 | | |
1161 | | === 4.2.1 Primitive Identifiers === #LinkTarget_17538 |
1162 | | Three kinds of types are defined in this package. The abstract UIDtype and its subtypes correspond to permanent, computationally reliable, primitive identifiers. Such identifiers are regarded as ‘primitive’ because they are treated as having no further internal structure, in the sense that part of such an identifier is not in general meaningful. The three subtypes UUID, ISO_OID and INTERNET_ID all have these properties, and are commonly accepted ways of uniquely identifying entities in computer systems. In openEHR (and generally in health informatics) they are usually used as parts of other identifiers. |
1163 | | |
1164 | | A consequence of the string representation approach used in these classes is that to set an attribute of type UID from a string value, as would be done when reading from a database, deserialising from XML or another text form, a piece of code that inspects the string structure has to be used in order to decide which of the subtypes of UID it is. This is a safe thing to do, since all three subtypes have mutually exclusive string patterns, and can easily be distinguished. |
| 1070 | required. The requirements are discussed in detail in the Common IM, change_control package. They can be summarised as follows: |
| 1071 | |
| 1072 | * it must be possible to distinguish two versions of the same logical entity, i.e. know from the identifier if they are the same or different versions of the same thing; |
| 1073 | * it must be possible to distinguish two versions of the same logical entity created in two distinct systems; |
| 1074 | * it must be possible to tell the relationship between the items in a versioned lineage, from the version identifiers. |
| 1075 | |
| 1076 | Referencing of Informational Entities |
| 1077 | |
| 1078 | Within a distributed information environment, there is a need for entities not connected by direct references in the same memory space to be able to refer to each other. There are two competing requirements: |
| 1079 | |
| 1080 | * that the separation of objects in a distributed computing environment not compromise the semantics of the model; |
| 1081 | * that different types of information can be managed relatively independently; for example EHR and demographic information can be managed by different groups in an organisation or community, each with at least some freedom to change implementation and model details. |
| 1082 | |
| 1083 | === 4.2 Design === #LinkTarget_17533 |
| 1084 | This package models only informational identifiers, i.e. transparent identifiers understood by openEHR or related computational systems. Real World Entity Identifiers such as driver’s license numbers are modelled using the data type DV_IDENTIFIER. This is not to imply that such identifiers are any less systematic or well-managed than the system identifiers defined here, only that from the point of view of openEHR, they have the same status as other informational attributes such as name, address etc of a Person. |
| 1085 | |
| 1086 | A key design decision has been to choose a string representation for all identifiers, with subparts being made available by appropriate functions which perform simple parsing on the string. This ensures that the data representation of identifiers (e.g. in XML) is as small as possible, while not losing object-oriented typing. |
| 1087 | |
| 1088 | === 4.2.1 Primitive Identifiers === #LinkTarget_17538 |
| 1089 | Three kinds of types are defined in this package. The abstract UIDtype and its subtypes correspond to permanent, computationally reliable, primitive identifiers. Such identifiers are regarded as ‘primitive’ because they are treated as having no further internal structure, in the sense that part of such an identifier is not in general meaningful. The three subtypes UUID, ISO_OID and INTERNET_ID all have these properties, and are commonly accepted ways of uniquely identifying entities in computer systems. In openEHR (and generally in health informatics) they are usually used as parts of other identifiers. |
| 1090 | |
| 1091 | A consequence of the string representation approach used in these classes is that to set an attribute of type UID from a string value, as would be done when reading from a database, deserialising from XML or another text form, a piece of code that inspects the string structure has to be used in order to decide which of the subtypes of UID it is. This is a safe thing to do, since all three subtypes have mutually exclusive string patterns, and can easily be distinguished. |
1172 | | |
1173 | | === 4.2.2 Composite Identifiers === #LinkTarget_17560 |
1174 | | The OBJECT_ID type and its hierarchy of subtypes correspond to composite identifier types whose structure and semantics are defined by openEHR (rather than external organisations), and are the main means of identifying information items in an openEHR system. The abstract type UID_BASED_IDand its two subtypes HIER_OBJECT_IDand OBJECT_VERSION_IDprovide respectively, UID-based identifiers for non-versioned and versioned items. The design of the latter subtype is explained in the openEHR Common IM, change_control package. |
1175 | | |
1176 | | The other subtypes, ARCHETYPE_ID and TERMINOLOGY_ID define different kinds of identifier, the former being a multi-axial identifier for archetypes, and the latter being a globally unique single string identifier for terminologies. The ARCHETYPE_ID class explicitly includes archetype version as part of the identifier, while terminology identifier values are assumed to include this, either as part of the name (e.g. as is done in the US National Library of Medicine UMLS identifiers - see http://www.nlm.nih.gov/research/umls/metaa1.html ), or according to the syntax defined in [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_18094 section 4.3.12] below. |
1177 | | |
1178 | | Identifying Versions |
1179 | | |
1180 | | The OBJECT_VERSION_ID defines the semantics of the scheme used in openEHR for identifying versions, and uses a three-part identifier, consisting of: |
1181 | | |
1182 | | • object_id: the identifier of the version container, in the form of an UID; |
1183 | | |
1184 | | |
1185 | | * version_tree_id: the location in the version tree, as a 1- or 3-part numeric identifier, where the latter variant expresses branching; this is modelled using the VERSION_TREE_ID type; |
1186 | | * creating_system_id: the identifier of the system in which this version was created, or type UID. |
1187 | | |
1188 | | Under this scheme, multiple versions in the same container all have the same value for object_id, while their location in the version tree is given by the combination of the version tree identifier and the identifier of the creating system. |
1189 | | |
1190 | | The requirements on the third part of the identifier are that it be unique per system, and that it be easy to obtain or generate. It is also helpful if it is a meaningful identifier. The two most practical candidates appear to be GUIDs (which are not meaningful, but are easy to generate) and reverse internet domain identifiers, as recommended in ![3] (these are easy to determine if the system has an internet address, and are meaningful and directly processible, however unconnected systems pose a problem). ISO Oids might also be used. All of these identifier types are accommodated via the use of UID. |
1191 | | |
1192 | | A full explanation of the version identification scheme and its capabilities is given in the change_control section of the Common IM. |
1193 | | |
1194 | | |
1195 | | === 4.2.3 References === #LinkTarget_17585 |
1196 | | All OBJECT_IDs are used as identifier attributes within the thing they identify, in the same way as a database primary key. To refer to an identified object from another object, an instance of the class OBJECT_REF should generally be used, in the same way as a database foreign key. The class OBJECT_REF is provided as a means of distributed referencing, and includes the object namespace (typically !1:1 with some service, such as “terminology”) and type. The general principle of object references is to be able to refer to an object available in a particular namespace or service. Usually they are used to refer to objects in other services, such as a demographic entity from within an EHR, but they may be used to refer to local objects as well. The type may be the concrete type of the referred-to object (e.g. “GP”) or any proper ancestor (e.g. “PARTY”). |
| 1099 | === 4.2.2 Composite Identifiers === #LinkTarget_17560 |
| 1100 | The OBJECT_ID type and its hierarchy of subtypes correspond to composite identifier types whose structure and semantics are defined by openEHR (rather than external organisations), and are the main means of identifying information items in an openEHR system. The abstract type UID_BASED_IDand its two subtypes HIER_OBJECT_IDand OBJECT_VERSION_IDprovide respectively, UID-based identifiers for non-versioned and versioned items. The design of the latter subtype is explained in the openEHR Common IM, change_control package. |
| 1101 | |
| 1102 | The other subtypes, ARCHETYPE_ID and TERMINOLOGY_ID define different kinds of identifier, the former being a multi-axial identifier for archetypes, and the latter being a globally unique single string identifier for terminologies. The ARCHETYPE_ID class explicitly includes archetype version as part of the identifier, while terminology identifier values are assumed to include this, either as part of the name (e.g. as is done in the US National Library of Medicine UMLS identifiers - see http://www.nlm.nih.gov/research/umls/metaa1.html ), or according to the syntax defined in [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_18094 section 4.3.12] below. |
| 1103 | |
| 1104 | Identifying Versions |
| 1105 | |
| 1106 | The OBJECT_VERSION_ID defines the semantics of the scheme used in openEHR for identifying versions, and uses a three-part identifier, consisting of: |
| 1107 | |
| 1108 | • object_id: the identifier of the version container, in the form of an UID; |
| 1109 | |
| 1110 | * version_tree_id: the location in the version tree, as a 1- or 3-part numeric identifier, where the latter variant expresses branching; this is modelled using the VERSION_TREE_ID type; |
| 1111 | * creating_system_id: the identifier of the system in which this version was created, or type UID. |
| 1112 | |
| 1113 | Under this scheme, multiple versions in the same container all have the same value for object_id, while their location in the version tree is given by the combination of the version tree identifier and the identifier of the creating system. |
| 1114 | |
| 1115 | The requirements on the third part of the identifier are that it be unique per system, and that it be easy to obtain or generate. It is also helpful if it is a meaningful identifier. The two most practical candidates appear to be GUIDs (which are not meaningful, but are easy to generate) and reverse internet domain identifiers, as recommended in ![3] (these are easy to determine if the system has an internet address, and are meaningful and directly processible, however unconnected systems pose a problem). ISO Oids might also be used. All of these identifier types are accommodated via the use of UID. |
| 1116 | |
| 1117 | A full explanation of the version identification scheme and its capabilities is given in the change_control section of the Common IM. |
| 1118 | |
| 1119 | === 4.2.3 References === #LinkTarget_17585 |
| 1120 | All OBJECT_IDs are used as identifier attributes within the thing they identify, in the same way as a database primary key. To refer to an identified object from another object, an instance of the class OBJECT_REF should generally be used, in the same way as a database foreign key. The class OBJECT_REF is provided as a means of distributed referencing, and includes the object namespace (typically !1:1 with some service, such as “terminology”) and type. The general principle of object references is to be able to refer to an object available in a particular namespace or service. Usually they are used to refer to objects in other services, such as a demographic entity from within an EHR, but they may be used to refer to local objects as well. The type may be the concrete type of the referred-to object (e.g. “GP”) or any proper ancestor (e.g. “PARTY”). |
1204 | | 4.3 Class Descriptions |
1205 | | |
1206 | | 4.3.1 UID Class |
1207 | | |
1208 | | |
1209 | | ||CLASS ||UID (abstract) || |
1210 | | ||Purpose ||Abstract parent of classes representing unique identifiers which identify information entities in a durable way. UIDs only ever identify one IE in time or space and are never re-used. || |
1211 | | ||HL7 ||The HL7v3 UID Data type. || |
1212 | | ||Attributes ||Signature ||Meaning || |
1213 | | ||||value: String ||The value of the id. || |
1214 | | ||Invariant ||Value_exists: value /= Void and then not value.empty || |
1215 | | |
1216 | | 4.3.2 ISO_OID Class |
1217 | | |
1218 | | |
1219 | | ||CLASS ||ISO_OID || |
1220 | | ||Purpose ||Model of ISO’s Object Identifier (oid) as defined by the standard ISO/IEC 8824 . Oids are formed from integers separated by dots. Each non-leaf node in an Oid starting from the left corresponds to an assigning authority, and identifies that authority’s namespace, inside which the remaining part of the identifier is locally unique. || |
1221 | | ||HL7 ||The HL7v3 OID Data type. || |
1222 | | ||Inherit ||UID || |
1223 | | ||Functions ||Signature ||Meaning || |
1224 | | ||Invariant |||| |
1225 | | |
1226 | | 4.3.3 UUID Class |
1227 | | |
1228 | | |
1229 | | ||CLASS ||UUID || |
1230 | | ||Purpose ||Model of the DCE Universal Unique Identifier or UUID which takes the form of hexadecimal integers separated by hyphens, following the pattern 8-4-4-4-12 as defined by the Open Group, CDE 1.1 Remote Procedure Call specification, Appendix A. Also known as a GUID. || |
1231 | | ||HL7 ||The HL7v3 UUID Data type. || |
1232 | | ||Inherit ||UID || |
| 1128 | 4.3 Class Descriptions |
| 1129 | |
| 1130 | 4.3.1 UID Class |
| 1131 | |
| 1132 | ||CLASS||UID (abstract)|| |
| 1133 | ||Purpose||Abstract parent of classes representing unique identifiers which identify information entities in a durable way. UIDs only ever identify one IE in time or space and are never re-used.|| |
| 1134 | ||HL7||The HL7v3 UID Data type.|| |
| 1135 | ||Attributes||Signature||Meaning|| |
| 1136 | ||||value: String||The value of the id.|| |
| 1137 | ||Invariant||Value_exists: value /= Void and then not value.empty|| |
| 1138 | |
| 1139 | 4.3.2 ISO_OID Class |
| 1140 | |
| 1141 | ||CLASS||ISO_OID|| |
| 1142 | ||Purpose||Model of ISO’s Object Identifier (oid) as defined by the standard ISO/IEC 8824 . Oids are formed from integers separated by dots. Each non-leaf node in an Oid starting from the left corresponds to an assigning authority, and identifies that authority’s namespace, inside which the remaining part of the identifier is locally unique.|| |
| 1143 | ||HL7||The HL7v3 OID Data type.|| |
| 1144 | ||Inherit||UID|| |
| 1145 | ||Functions||Signature||Meaning|| |
| 1146 | ||Invariant|||| |
| 1147 | |
| 1148 | 4.3.3 UUID Class |
| 1149 | |
| 1150 | ||CLASS||UUID|| |
| 1151 | ||Purpose||Model of the DCE Universal Unique Identifier or UUID which takes the form of hexadecimal integers separated by hyphens, following the pattern 8-4-4-4-12 as defined by the Open Group, CDE 1.1 Remote Procedure Call specification, Appendix A. Also known as a GUID.|| |
| 1152 | ||HL7||The HL7v3 UUID Data type.|| |
| 1153 | ||Inherit||UID|| |
1281 | | |
1282 | | ||CLASS ||OBJECT_ID (abstract) || |
1283 | | ||Attributes ||Signature ||Meaning || |
1284 | | ||||value: String ||The value of the id in the form defined below. || |
1285 | | ||Invariant ||Value_exists: value /= Void and then not value.empty || |
1286 | | |
1287 | | 4.3.6 UID_BASED_ID Class |
1288 | | |
1289 | | |
1290 | | ||CLASS ||UID_BASED_ID (abstract) || |
1291 | | ||Purpose ||Abstract model of UID-based identifiers consisting of a root part and an optional extension; lexical form: root ‘::’ extension || |
1292 | | ||Inherit ||''OBJECT_ID ''|| |
1293 | | ||Functions ||Signature ||Meaning || |
1294 | | ||1..1 ||root: UID ||The identifier of the conceptual namespace in which the object exists, within the identification scheme. Returns the part to the left of the first ‘::’ separator, if any, or else the whole string. || |
1295 | | ||1..1 ||extension: String ||Optional local identifier of the object within the context of the root identifier. Returns the part to the right of the first ‘::’ separator if any, or else any empty String. || |
1296 | | ||||has_extension: Boolean ||True if extension /= Void || |
1297 | | ||Invariant ||Root_valid: root /= Void Extension_validity: extension /= Void Has_extension_validity: extension.is_empty xor has_extension || |
1298 | | |
1299 | | |
1300 | | ==== 4.3.6.1 Identifier Syntax ==== #LinkTarget_17794 |
1301 | | The syntax of the value attribute by default follows the following production rules (EBNF): |
1302 | | |
1303 | | value: root [ ‘::’ extension ] root: uid -- see UID above extension: string |
1304 | | |
1305 | | 4.3.7 HIER_OBJECT_ID Class |
1306 | | |
1307 | | Concrete type corresponding to hierarchical identifiers of the form defined by UID_BASED_ID. |
| 1199 | ||CLASS||OBJECT_ID (abstract)|| |
| 1200 | ||Attributes||Signature||Meaning|| |
| 1201 | ||||value: String||The value of the id in the form defined below.|| |
| 1202 | ||Invariant||Value_exists: value /= Void and then not value.empty|| |
| 1203 | |
| 1204 | 4.3.6 UID_BASED_ID Class |
| 1205 | |
| 1206 | ||CLASS||UID_BASED_ID (abstract)|| |
| 1207 | ||Purpose||Abstract model of UID-based identifiers consisting of a root part and an optional extension; lexical form: root ‘::’ extension|| |
| 1208 | ||Inherit||''OBJECT_ID ''|| |
| 1209 | ||Functions||Signature||Meaning|| |
| 1210 | ||1..1||root: UID||The identifier of the conceptual namespace in which the object exists, within the identification scheme. Returns the part to the left of the first ‘::’ separator, if any, or else the whole string.|| |
| 1211 | ||1..1||extension: String||Optional local identifier of the object within the context of the root identifier. Returns the part to the right of the first ‘::’ separator if any, or else any empty String.|| |
| 1212 | ||||has_extension: Boolean||True if extension /= Void|| |
| 1213 | ||Invariant||Root_valid: root /= Void Extension_validity: extension /= Void Has_extension_validity: extension.is_empty xor has_extension|| |
| 1214 | |
| 1215 | ==== 4.3.6.1 Identifier Syntax ==== #LinkTarget_17794 |
| 1216 | The syntax of the value attribute by default follows the following production rules (EBNF): |
| 1217 | |
| 1218 | value: root [ ‘::’ extension ] root: uid -- see UID above extension: string |
| 1219 | |
| 1220 | 4.3.7 HIER_OBJECT_ID Class |
| 1221 | |
| 1222 | Concrete type corresponding to hierarchical identifiers of the form defined by UID_BASED_ID. |
1315 | | |
1316 | | ||CLASS ||HIER_OBJECT_ID || |
1317 | | ||HL7 ||The HL7v3 II Data type. || |
1318 | | ||Inherit ||''UID_BASED_ID ''|| |
1319 | | ||Functions ||Signature ||Meaning || |
1320 | | ||Invariant |||| |
1321 | | |
1322 | | 4.3.8 OBJECT_VERSION_ID Class |
1323 | | |
1324 | | |
1325 | | ||CLASS ||OBJECT_VERSION_ID || |
1326 | | ||Purpose ||Globally unique identifier for one version of a versioned object; lexical form: object_id ‘::’ creating_system_id ‘::’ version_tree_id || |
1327 | | ||Inherit ||''UID_BASED_ID ''|| |
1328 | | ||Functions ||Signature ||Meaning || |
1329 | | ||1..1 ||object_id: UID ||Unique identifier for logical object of which this identifier identifies one version; normally the object_id will be the unique identifier of the version container containing the version referred to by this OBJECT_VERSION_ID instance. || |
1330 | | ||1..1 ||version_tree_id: VERSION_TREE_ID ||Tree identifier of this version with respect to other versions in the same version tree, as either 1 or 3 part dot-separated numbers, e.g. “1”, “2.1.4”. || |
1331 | | ||1..1 ||creating_system_id: UID ||Identifier of the system that created the Version corresponding to this Object version id. || |
1332 | | ||||is_branch: Boolean ||True if this version identifier represents a branch. || |
1333 | | ||Invariants ||Object_valid: object_id /= Void Version_tree_id_valid: version_tree_id /= Void creating_system_id_valid: creating_system_id /= Void || |
1334 | | |
1335 | | 4.3.8.1 Identifier Syntax |
1336 | | |
1337 | | The string form of an OBJECT_VERSION_ID stored in its value attribute consists of three segments separated by double colons (“::”), i.e. (EBNF): |
1338 | | |
1339 | | value: object_id ‘::’ creating_system_id ‘::’ version_tree_id object_id: uid -- see UID below creating_system_id: |
| 1230 | ||CLASS||HIER_OBJECT_ID|| |
| 1231 | ||HL7||The HL7v3 II Data type.|| |
| 1232 | ||Inherit||''UID_BASED_ID ''|| |
| 1233 | ||Functions||Signature||Meaning|| |
| 1234 | ||Invariant|||| |
| 1235 | |
| 1236 | 4.3.8 OBJECT_VERSION_ID Class |
| 1237 | |
| 1238 | ||CLASS||OBJECT_VERSION_ID|| |
| 1239 | ||Purpose||Globally unique identifier for one version of a versioned object; lexical form: object_id ‘::’ creating_system_id ‘::’ version_tree_id|| |
| 1240 | ||Inherit||''UID_BASED_ID ''|| |
| 1241 | ||Functions||Signature||Meaning|| |
| 1242 | ||1..1||object_id: UID||Unique identifier for logical object of which this identifier identifies one version; normally the object_id will be the unique identifier of the version container containing the version referred to by this OBJECT_VERSION_ID instance.|| |
| 1243 | ||1..1||version_tree_id: VERSION_TREE_ID||Tree identifier of this version with respect to other versions in the same version tree, as either 1 or 3 part dot-separated numbers, e.g. “1”, “2.1.4”.|| |
| 1244 | ||1..1||creating_system_id: UID||Identifier of the system that created the Version corresponding to this Object version id.|| |
| 1245 | ||||is_branch: Boolean||True if this version identifier represents a branch.|| |
| 1246 | ||Invariants||Object_valid: object_id /= Void Version_tree_id_valid: version_tree_id /= Void creating_system_id_valid: creating_system_id /= Void|| |
| 1247 | |
| 1248 | 4.3.8.1 Identifier Syntax |
| 1249 | |
| 1250 | The string form of an OBJECT_VERSION_ID stored in its value attribute consists of three segments separated by double colons (“::”), i.e. (EBNF): |
| 1251 | |
| 1252 | value: object_id ‘::’ creating_system_id ‘::’ version_tree_id object_id: uid -- see UID below creating_system_id: |
1347 | | An example is as follows: |
1348 | | |
1349 | | F7C5C7B7-75DB-4b39-9A1E-C0BA9BFDBDEC::87284370-2D4B4e3d-A3F3-F303D2F4F34B::2 |
1350 | | |
1351 | | 4.3.9 VERSION_TREE_ID Class |
1352 | | |
1353 | | |
1354 | | ||CLASS ||VERSION_TREE_ID || |
1355 | | ||Purpose ||Version tree identifier for one version. Lexical form: trunk_version [ ‘.’ branch_number ‘.’ branch_version ] || |
1356 | | ||Attributes ||Signature ||Meaning || |
1357 | | ||1..1 ||value: String ||String form of this identifier. || |
1358 | | ||Functions ||Signature ||Meaning || |
1359 | | ||1..1 ||trunk_version: String ||Trunk version number; numbering starts at 1. || |
1360 | | ||0..1 ||branch_number: String ||Number of branch from the trunk point; numbering starts at 1. || |
1361 | | ||0..1 ||branch_version: String ||Version of the branch; numbering starts at 1. || |
1362 | | ||1..1 ||is_branch: Boolean ||True if this version identifier represents a branch, i.e. has branch_number and branch_version parts. || |
1363 | | ||1..1 ||is_first: Boolean ||True if this version identifier corresponds to the first version, i.e. trunk_version = “1” || |
1364 | | ||Invariants ||Value_valid: value /= Void and then not value.is_empty Trunk_version_valid: trunk_version /= Void and then trunk_version.is_integer and then trunk_version.as_integer >= 1 Branch_number_valid: branch_number /= Void implies branch_number.is_integer and then branch_number.as_integer >= 1 Branch_version_valid: branch_version /= Void implies branch_version.is_integer and then branch_version.as_integer >= 1 Branch_validity: (branch_number = Void and branch_version = Void ) xor (branch_number /= Void and branch_version /= Void ) Is_branch_validity: is_branch xor branch_number = Void Is_first_validity: not is_first xor trunk_version.is_equal(“1”) || |
1365 | | |
1366 | | 4.3.9.1 Syntax |
1367 | | |
1368 | | The format of the value attribute is (EBNF): |
1369 | | |
1370 | | value: trunk_version [ ‘.’ branch_number ‘.’ branch_version ] trunk_version: { digit }+ branch_number: { digit }+ branch_version: { digit }+ |
| 1260 | An example is as follows: |
| 1261 | |
| 1262 | F7C5C7B7-75DB-4b39-9A1E-C0BA9BFDBDEC::87284370-2D4B4e3d-A3F3-F303D2F4F34B::2 |
| 1263 | |
| 1264 | 4.3.9 VERSION_TREE_ID Class |
| 1265 | |
| 1266 | ||CLASS||VERSION_TREE_ID|| |
| 1267 | ||Purpose||Version tree identifier for one version. Lexical form: trunk_version [ ‘.’ branch_number ‘.’ branch_version ]|| |
| 1268 | ||Attributes||Signature||Meaning|| |
| 1269 | ||1..1||value: String||String form of this identifier.|| |
| 1270 | ||Functions||Signature||Meaning|| |
| 1271 | ||1..1||trunk_version: String||Trunk version number; numbering starts at 1.|| |
| 1272 | ||0..1||branch_number: String||Number of branch from the trunk point; numbering starts at 1.|| |
| 1273 | ||0..1||branch_version: String||Version of the branch; numbering starts at 1.|| |
| 1274 | ||1..1||is_branch: Boolean||True if this version identifier represents a branch, i.e. has branch_number and branch_version parts.|| |
| 1275 | ||1..1||is_first: Boolean||True if this version identifier corresponds to the first version, i.e. trunk_version = “1”|| |
| 1276 | ||Invariants||Value_valid: value /= Void and then not value.is_empty Trunk_version_valid: trunk_version /= Void and then trunk_version.is_integer and then trunk_version.as_integer >= 1 Branch_number_valid: branch_number /= Void implies branch_number.is_integer and then branch_number.as_integer >= 1 Branch_version_valid: branch_version /= Void implies branch_version.is_integer and then branch_version.as_integer >= 1 Branch_validity: (branch_number = Void and branch_version = Void ) xor (branch_number /= Void and branch_version /= Void ) Is_branch_validity: is_branch xor branch_number = Void Is_first_validity: not is_first xor trunk_version.is_equal(“1”)|| |
| 1277 | |
| 1278 | 4.3.9.1 Syntax |
| 1279 | |
| 1280 | The format of the value attribute is (EBNF): |
| 1281 | |
| 1282 | value: trunk_version [ ‘.’ branch_number ‘.’ branch_version ] trunk_version: { digit }+ branch_number: { digit }+ branch_version: { digit }+ |
1378 | | 4.3.10 ARCHETYPE_ID Class |
1379 | | |
1380 | | |
1381 | | ||CLASS ||ARCHETYPE_ID || |
1382 | | ||Purpose ||Identifier for archetypes. Lexical form: rm_originator ‘-’ rm_name ‘-’ rm_entity ‘.’ concept_name { ‘-’ specialisation }* ‘.v’ number || |
1383 | | ||Inherit ||''OBJECT_ID ''|| |
1384 | | ||Functions ||Signature ||Meaning || |
1385 | | ||1..1 ||qualified_rm_entity: String ||Globally qualified reference model entity, e.g. “openehr-composition-OBSERVATION”. || |
1386 | | ||1..1 ||domain_concept: String ||Name of the concept represented by this archetype, including specialisation, e.g. “biochemistry_result-cholesterol”. || |
1387 | | ||1..1 ||rm_originator: String ||Organisation originating the reference model on which this archetype is based, e.g. “openehr”, “cen”, “hl7”. || |
1388 | | ||1..1 ||rm_name: String ||Name of the reference model, e.g. “rim”, “ehr_rm”, “en13606”. || |
1389 | | ||1..1 ||rm_entity: String ||Name of the ontological level within the reference model to which this archetype is targeted, e.g. for openEHR, “folder”, “composition”, “section”, “entry”. || |
1390 | | ||1..1 ||specialisation: String ||Name of specialisation of concept, if this archetype is a specialisation of another archetype, e.g. “cholesterol”. || |
1391 | | ||1..1 ||version_id: String ||Version of this archetype. || |
1392 | | ||Invariant ||Qualified_rm_entity_valid: qualified_rm_entity /= Void and then not qualified_rm_entity.is_empty Domain_concept_valid: domain_concept /= Void and then not domain_concept.is_empty Rm_originator_valid: rm_originator /= Void and then not rm_originator.is_empty Rm_name_valid: rm_name /= Void and then not rm_name.is_empty Rm_entity_valid: rm_entity /= Void and then not rm_entity.is_empty Specialisation_valid: specialisation /= Void implies not specialisation.is_empty Version_id_valid: version_id /= Void and then not version_id.is_empty || |
| 1290 | 4.3.10 ARCHETYPE_ID Class |
| 1291 | |
| 1292 | ||CLASS||ARCHETYPE_ID|| |
| 1293 | ||Purpose||Identifier for archetypes. Lexical form: rm_originator ‘-’ rm_name ‘-’ rm_entity ‘.’ concept_name { ‘-’ specialisation }* ‘.v’ number|| |
| 1294 | ||Inherit||''OBJECT_ID ''|| |
| 1295 | ||Functions||Signature||Meaning|| |
| 1296 | ||1..1||qualified_rm_entity: String||Globally qualified reference model entity, e.g. “openehr-composition-OBSERVATION”.|| |
| 1297 | ||1..1||domain_concept: String||Name of the concept represented by this archetype, including specialisation, e.g. “biochemistry_result-cholesterol”.|| |
| 1298 | ||1..1||rm_originator: String||Organisation originating the reference model on which this archetype is based, e.g. “openehr”, “cen”, “hl7”.|| |
| 1299 | ||1..1||rm_name: String||Name of the reference model, e.g. “rim”, “ehr_rm”, “en13606”.|| |
| 1300 | ||1..1||rm_entity: String||Name of the ontological level within the reference model to which this archetype is targeted, e.g. for openEHR, “folder”, “composition”, “section”, “entry”.|| |
| 1301 | ||1..1||specialisation: String||Name of specialisation of concept, if this archetype is a specialisation of another archetype, e.g. “cholesterol”.|| |
| 1302 | ||1..1||version_id: String||Version of this archetype.|| |
| 1303 | ||Invariant||Qualified_rm_entity_valid: qualified_rm_entity /= Void and then not qualified_rm_entity.is_empty Domain_concept_valid: domain_concept /= Void and then not domain_concept.is_empty Rm_originator_valid: rm_originator /= Void and then not rm_originator.is_empty Rm_name_valid: rm_name /= Void and then not rm_name.is_empty Rm_entity_valid: rm_entity /= Void and then not rm_entity.is_empty Specialisation_valid: specialisation /= Void implies not specialisation.is_empty Version_id_valid: version_id /= Void and then not version_id.is_empty|| |
1400 | | 4.3.10.1 Archetype ID Syntax |
1401 | | |
1402 | | Archetype identifiers are “multi-axial”, meaning that each identifier instance denotes a single archetype within a multi-dimensional space. In this case, the space is essentially a versioned 3-dimensional space, with the dimensions being: |
1403 | | |
1404 | | |
1405 | | * reference model entity, i.e. target of archetype |
1406 | | * domain concept |
1407 | | * version |
1408 | | |
1409 | | As with any multi-axial identifier, the underlying principle of an archetype id is that all parts of the id must be able to be considered immutable. This means that no variable characteristic of an archetype |
1410 | | |
1411 | | (e.g. accrediting authority, which might change due to later accreditation by another authority, or may be multiple) can be included in its identifier. The syntax of an ARCHETYPE_ID is as follows (EBNF): |
1412 | | |
1413 | | archetype_id: qualified_rm_entity ‘.’ domain_concept ‘.’ version_id |
1414 | | |
1415 | | qualified_rm_entity: rm_originator ‘-’ rm_name ‘-’ rm_entity rm_originator: V_NAME rm_name: V_NAME rm_entity: V_NAME |
1416 | | |
1417 | | domain_concept: concept_name { ‘-’ specialisation }* concept_name: V_NAME specialisation: V_NAME |
1418 | | |
1419 | | version_id: ‘v’ V_NUMBER |
1420 | | |
1421 | | NUMBER: ![0-9]* NAME: [a-z][a-z0-9()/%$#&]* |
1422 | | |
1423 | | The field meanings are as follows: |
1424 | | |
1425 | | rm_originator: id of organisation originating the reference model on which this archetype is based; |
1426 | | |
1427 | | rm_name: id of the reference model on which the archetype is based; |
1428 | | |
1429 | | rm_entity: ontological level in the reference model; |
1430 | | |
1431 | | domain_concept: the domain concept name, including any specialisations; |
1432 | | |
1433 | | version_id: numeric version identifier; |
1434 | | |
1435 | | Examples of archetype identifiers include: |
1436 | | |
1437 | | • openehr-composition-SECTION.physical_examination.v2 • openehr-composition-SECTION.physical_examination-prenatal.v1 |
1438 | | |
1439 | | • hl7-rim-act.progress_note.v1 • openehr-composition-OBSERVATION.progress_note-naturopathy.v2 |
1440 | | |
1441 | | Archetypes can also be identified by other means, such as ISO oids. |
1442 | | |
1443 | | 4.3.11 TEMPLATE_ID Class |
1444 | | |
1445 | | Identifier for templates. Lexical form to be determined. |
| 1311 | 4.3.10.1 Archetype ID Syntax |
| 1312 | |
| 1313 | Archetype identifiers are “multi-axial”, meaning that each identifier instance denotes a single archetype within a multi-dimensional space. In this case, the space is essentially a versioned 3-dimensional space, with the dimensions being: |
| 1314 | |
| 1315 | * reference model entity, i.e. target of archetype |
| 1316 | * domain concept |
| 1317 | * version |
| 1318 | |
| 1319 | As with any multi-axial identifier, the underlying principle of an archetype id is that all parts of the id must be able to be considered immutable. This means that no variable characteristic of an archetype |
| 1320 | |
| 1321 | (e.g. accrediting authority, which might change due to later accreditation by another authority, or may be multiple) can be included in its identifier. The syntax of an ARCHETYPE_ID is as follows (EBNF): |
| 1322 | |
| 1323 | archetype_id: qualified_rm_entity ‘.’ domain_concept ‘.’ version_id |
| 1324 | |
| 1325 | qualified_rm_entity: rm_originator ‘-’ rm_name ‘-’ rm_entity rm_originator: V_NAME rm_name: V_NAME rm_entity: V_NAME |
| 1326 | |
| 1327 | domain_concept: concept_name { ‘-’ specialisation }* concept_name: V_NAME specialisation: V_NAME |
| 1328 | |
| 1329 | version_id: ‘v’ V_NUMBER |
| 1330 | |
| 1331 | NUMBER: ![0-9]* NAME: [a-z][a-z0-9()/%$#&]* |
| 1332 | |
| 1333 | The field meanings are as follows: |
| 1334 | |
| 1335 | rm_originator: id of organisation originating the reference model on which this archetype is based; |
| 1336 | |
| 1337 | rm_name: id of the reference model on which the archetype is based; |
| 1338 | |
| 1339 | rm_entity: ontological level in the reference model; |
| 1340 | |
| 1341 | domain_concept: the domain concept name, including any specialisations; |
| 1342 | |
| 1343 | version_id: numeric version identifier; |
| 1344 | |
| 1345 | Examples of archetype identifiers include: |
| 1346 | |
| 1347 | • openehr-composition-SECTION.physical_examination.v2 • openehr-composition-SECTION.physical_examination-prenatal.v1 |
| 1348 | |
| 1349 | • hl7-rim-act.progress_note.v1 • openehr-composition-OBSERVATION.progress_note-naturopathy.v2 |
| 1350 | |
| 1351 | Archetypes can also be identified by other means, such as ISO oids. |
| 1352 | |
| 1353 | 4.3.11 TEMPLATE_ID Class |
| 1354 | |
| 1355 | Identifier for templates. Lexical form to be determined. |
1453 | | |
1454 | | ||CLASS ||||TEMPLATE_ID |||| |
1455 | | ||Inherit ||''OBJECT_ID ''|||||| |
1456 | | ||Functions ||Signature ||||||Meaning || |
1457 | | ||Invariant |||||||| |
1458 | | |
1459 | | 4.3.12 TERMINOLOGY_ID Class |
1460 | | |
1461 | | |
1462 | | ||CLASS ||TERMINOLOGY_ID || |
1463 | | ||Purpose ||Identifier for terminologies such accessed via a terminology query service. In this class, the value attribute identifies the Terminology in the terminology service, e.g. “SNOMED-CT”. A terminology is assumed to be in a particular language, which must be explicitly specified. The value if the id attribute is the precise terminology id identifier, including actual release (i.e. actual “version”), local modifications etc; e.g. “ICPC2”. Lexical form: name [ ‘(’ version ‘)’ ] || |
1464 | | ||Inherit ||''OBJECT_ID ''|| |
1465 | | ||Functions ||Signature ||Meaning || |
1466 | | ||1..1 ||name: String ||Return the terminology id (which includes the “version” in some cases). Distinct names correspond to distinct (i.e. non-compatible) terminologies. Thus the names “ICD10AM” and “ICD10” refer to distinct terminologies. || |
1467 | | ||1..1 ||version_id: String ||Version of this terminology, if versioning supported, else the empty string. || |
1468 | | ||Invariants ||Name_valid: name /= Void and then not name.is_empty Version_id_valid: version_id /= Void || |
1469 | | |
1470 | | 4.3.12.1 Identifier Syntax |
1471 | | |
1472 | | The syntax of the value attribute is as follows: |
| 1363 | ||CLASS||||TEMPLATE_ID|||| |
| 1364 | ||Inherit||''OBJECT_ID ''|||||| |
| 1365 | ||Functions||Signature||||||Meaning|| |
| 1366 | ||Invariant|||||||| |
| 1367 | |
| 1368 | 4.3.12 TERMINOLOGY_ID Class |
| 1369 | |
| 1370 | ||CLASS||TERMINOLOGY_ID|| |
| 1371 | ||Purpose||Identifier for terminologies such accessed via a terminology query service. In this class, the value attribute identifies the Terminology in the terminology service, e.g. “SNOMED-CT”. A terminology is assumed to be in a particular language, which must be explicitly specified. The value if the id attribute is the precise terminology id identifier, including actual release (i.e. actual “version”), local modifications etc; e.g. “ICPC2”. Lexical form: name [ ‘(’ version ‘)’ ]|| |
| 1372 | ||Inherit||''OBJECT_ID ''|| |
| 1373 | ||Functions||Signature||Meaning|| |
| 1374 | ||1..1||name: String||Return the terminology id (which includes the “version” in some cases). Distinct names correspond to distinct (i.e. non-compatible) terminologies. Thus the names “ICD10AM” and “ICD10” refer to distinct terminologies.|| |
| 1375 | ||1..1||version_id: String||Version of this terminology, if versioning supported, else the empty string.|| |
| 1376 | ||Invariants||Name_valid: name /= Void and then not name.is_empty Version_id_valid: version_id /= Void|| |
| 1377 | |
| 1378 | 4.3.12.1 Identifier Syntax |
| 1379 | |
| 1380 | The syntax of the value attribute is as follows: |
1490 | | cable here - “A concept's meaning cannot change and it cannot be deleted from the vocabulary”. However, there maybe older terminologies, or specialised terminologies which may not have obeyed these rules, but which are still used; version ids should always be used for these. |
1491 | | |
1492 | | 4.3.13 GENERIC_ID Class |
1493 | | |
1494 | | |
1495 | | ||CLASS ||GENERIC_ID || |
1496 | | ||Purpose ||Generic identifier type for identifiers whose format is othterwise unknown to openEHR. Includes an attribute for naming the identification scheme (which may well be local). || |
1497 | | ||Inherit ||''OBJECT_ID ''|| |
1498 | | ||attributes ||Signature ||Meaning || |
1499 | | ||1..1 ||scheme: String ||Name of the scheme to which this identifier conforms. Ideally this name will be recognisable globally but realistically it may be a local ad hoc scheme whose name is not controlled or standardised in any way. || |
1500 | | ||Invariants ||Scheme_valid: scheme /= Void and then not scheme.is_empty || |
1501 | | |
1502 | | 4.3.14 OBJECT_REF Class |
1503 | | |
1504 | | |
1505 | | ||CLASS ||OBJECT_REF || |
1506 | | ||Purpose ||Class describing a reference to another object, which may exist locally or be maintained outside the current namespace, e.g. in another service. Services are usually external, e.g. available in a LAN (including on the same host) or the internet via Corba, SOAP, or some other distributed protocol. However, in small systems they may be part of the same executable as the data containing the Id. || |
1507 | | ||Attributes ||Signature ||Meaning || |
1508 | | ||1..1 ||id: ''OBJECT_ID ''||Globally unique id of an object, regardless of where it is stored. || |
1509 | | ||1..1 ||namespace: String ||Namespace to which this identifier belongs in the local system context (and possibly in any other openEHR compliant environment) e.g. “terminology”, “demographic”. These names are not yet standardised. Legal values for the namespace are “local” | “unknown” | “[a-zAZ]![a-zA-Z0-9_-:/&+?]*” || |
| 1397 | cable here - “A concept's meaning cannot change and it cannot be deleted from the vocabulary”. However, there maybe older terminologies, or specialised terminologies which may not have obeyed these rules, but which are still used; version ids should always be used for these. |
| 1398 | |
| 1399 | 4.3.13 GENERIC_ID Class |
| 1400 | |
| 1401 | ||CLASS||GENERIC_ID|| |
| 1402 | ||Purpose||Generic identifier type for identifiers whose format is othterwise unknown to openEHR. Includes an attribute for naming the identification scheme (which may well be local).|| |
| 1403 | ||Inherit||''OBJECT_ID ''|| |
| 1404 | ||attributes||Signature||Meaning|| |
| 1405 | ||1..1||scheme: String||Name of the scheme to which this identifier conforms. Ideally this name will be recognisable globally but realistically it may be a local ad hoc scheme whose name is not controlled or standardised in any way.|| |
| 1406 | ||Invariants||Scheme_valid: scheme /= Void and then not scheme.is_empty|| |
| 1407 | |
| 1408 | 4.3.14 OBJECT_REF Class |
| 1409 | |
| 1410 | ||CLASS||OBJECT_REF|| |
| 1411 | ||Purpose||Class describing a reference to another object, which may exist locally or be maintained outside the current namespace, e.g. in another service. Services are usually external, e.g. available in a LAN (including on the same host) or the internet via Corba, SOAP, or some other distributed protocol. However, in small systems they may be part of the same executable as the data containing the Id.|| |
| 1412 | ||Attributes||Signature||Meaning|| |
| 1413 | ||1..1||id: ''OBJECT_ID ''||Globally unique id of an object, regardless of where it is stored.|| |
| 1414 | ||1..1||namespace: String||Namespace to which this identifier belongs in the local system context (and possibly in any other openEHR compliant environment) e.g. “terminology”, “demographic”. These names are not yet standardised. Legal values for the namespace are “local” | “unknown” | “[a-zAZ]![a-zA-Z0-9_-:/&+?]*”|| |
1517 | | |
1518 | | ||CLASS ||OBJECT_REF || |
1519 | | ||1..1 ||type: String ||Name of the class (concrete or abstract) of object to which this identifier type refers, e.g. “PARTY”, “PERSON”, “GUIDELINE” etc. These class names are from the relevant reference model. The type name “ANY” can be used to indicate that any type is accepted (e.g. if the type is unknown). || |
1520 | | ||Invariant ||Id_exists: id /= Void Namespace_exists: namespace /= Void and then not namespace.is_empty Type_exists: type /= Void and then not type.is_empty || |
1521 | | |
1522 | | 4.3.15 ACCESS_GROUP_REF Class |
1523 | | |
1524 | | |
1525 | | ||CLASS ||ACCESS_GROUP_REF || |
1526 | | ||Purpose ||Reference to access group in an access control service. || |
1527 | | ||Inherit ||OBJECT_REF || |
1528 | | ||Functions ||Signature ||Meaning || |
1529 | | ||Invariant ||Type_validity: type.is_equal(“ACCESS_GROUP”) || |
1530 | | |
1531 | | 4.3.16 PARTY_REF Class |
1532 | | |
1533 | | |
1534 | | ||CLASS ||PARTY_REF || |
1535 | | ||Purpose ||Identifier for parties in a demographic or identity service. There are typically a number of subtypes of the PARTY class, including PERSON, ORGANISATION, etc. Abstract supertypes are allowed if the referenced object is of a type not known by the current implementation of this class (in other words, if the demographic model is changed by the addition of a new PARTY or ACTOR subtypes, valid PARTY_REFs can still be constructed to them). || |
1536 | | ||Inherit ||OBJECT_REF || |
1537 | | ||Functions ||Signature Meaning Type_validity: type.is_equal(“PERSON”) or type.is_equal(“ORGANISATION”) or type.is_equal(“GROUP”) or type.is_equal(“AGENT”)or type.is_equal(“ROLE”) or type.is_equal(“PARTY”) or type.is_equal(“ACTOR”) || |
1538 | | ||Invariant || |
| 1422 | ||CLASS||OBJECT_REF|| |
| 1423 | ||1..1||type: String||Name of the class (concrete or abstract) of object to which this identifier type refers, e.g. “PARTY”, “PERSON”, “GUIDELINE” etc. These class names are from the relevant reference model. The type name “ANY” can be used to indicate that any type is accepted (e.g. if the type is unknown).|| |
| 1424 | ||Invariant||Id_exists: id /= Void Namespace_exists: namespace /= Void and then not namespace.is_empty Type_exists: type /= Void and then not type.is_empty|| |
| 1425 | |
| 1426 | 4.3.15 ACCESS_GROUP_REF Class |
| 1427 | |
| 1428 | ||CLASS||ACCESS_GROUP_REF|| |
| 1429 | ||Purpose||Reference to access group in an access control service.|| |
| 1430 | ||Inherit||OBJECT_REF|| |
| 1431 | ||Functions||Signature||Meaning|| |
| 1432 | ||Invariant||Type_validity: type.is_equal(“ACCESS_GROUP”)|| |
| 1433 | |
| 1434 | 4.3.16 PARTY_REF Class |
| 1435 | |
| 1436 | ||CLASS||PARTY_REF|| |
| 1437 | ||Purpose||Identifier for parties in a demographic or identity service. There are typically a number of subtypes of the PARTY class, including PERSON, ORGANISATION, etc. Abstract supertypes are allowed if the referenced object is of a type not known by the current implementation of this class (in other words, if the demographic model is changed by the addition of a new PARTY or ACTOR subtypes, valid PARTY_REFs can still be constructed to them).|| |
| 1438 | ||Inherit||OBJECT_REF|| |
| 1439 | ||Functions||Signature Meaning Type_validity: type.is_equal(“PERSON”) or type.is_equal(“ORGANISATION”) or type.is_equal(“GROUP”) or type.is_equal(“AGENT”)or type.is_equal(“ROLE”) or type.is_equal(“PARTY”) or type.is_equal(“ACTOR”)|| |
| 1440 | ||Invariant|| |
1571 | | Terminology Package |
1572 | | |
1573 | | 5.1 Overview |
1574 | | |
1575 | | This section describes the terminology package, which contains classes for accessing terminologies and code sets, including the openEHR Support Terminology, from within instances of classes defined in the reference model. The classes shown here would normally be inherited via the classes EXTERNAL_ENVIRONMENT_ACCESS and OPENEHR_DEFINITIONS, although the exact details of how this is done may vary depending on implementation language. |
1576 | | |
1577 | | 5.2 Service Interface |
1578 | | |
1579 | | 5.2.1 Code Sets |
1580 | | |
1581 | | A simple terminology service interface is defined according to FIGURE 6, enabling openEHR code sets and terminology to be referenced formally from within the Reference Model. Two types of coded entities are distinguished in openEHR, and are accessible via the service interface. The first is codes from ‘code sets’, which are the kind of terminology where the code stands for itself, such as the ISO 639-1 language codes. The identifiers themselves of these code sets do not appear to be standardised, but names such as “ISO_639-1” are expected to be used (see below). |
1582 | | |
1583 | | In any case, code sets needed within the openEHR models themselves (e.g. for attributes whose value is a language code) are not referred to directly by an external name such as “ISO_639-1”, but via an internal constant, in this case, the constant Code_set_id_languages, whose value is defined to be “languages”. These constants are defined in the class OPENEHR_CODE_SET_IDENTIFIERS in FIGURE |
1584 | | |
1585 | | 6. The mapping between the internal identifiers and external names should be done in configuration files. The service function TERMINOLOGY_SERVICE.code_set_for_id() is used to retrieve code sets on the basis of a constant. The current mapping and external identifiers assumed in openEHR is defined in the openEHR Support Terminology document. This use of indirection is employed to ensure that the obsoleting and superseding of code-sets does not directly affect openEHR software. |
1586 | | |
1587 | | For code sets not mapped to internally used constants, i.e. code sets not required in the openEHR model itself, but otherwise known in the terminology service, the function TERMINOLOGY_SERVICE.code_set() can be used to retrieve these code sets by their external identifier. |
1588 | | |
1589 | | 5.2.2 Terminologies |
1590 | | |
1591 | | Terminologies, including the openEHR Support Terminology are accessed via the TERMINOLOGY_SERVICEfunctions terminology() and terminology_identifiers(), where the argument includes “openehr”, “centc251” (for CEN TC/251codes) and names from the US NLM terminologies list (see below). The openEHR Terminology supports groups, and the set of groups required by the reference model is defined in the class OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS. These groups correspond to coded attributes found in the openEHR Reference Model. |
1592 | | |
1593 | | 5.2.3 Terms and Codes in the openEHR Reference Model |
1594 | | |
1595 | | True coded attributes in the Reference Model (i.e. attributes of type DV_CODED_TEXT), such as FEEDER_AUDIT.change_type are defined by an invariant in the enclosing class, such as the following: |
| 1472 | Terminology Package |
| 1473 | |
| 1474 | 5.1 Overview |
| 1475 | |
| 1476 | This section describes the terminology package, which contains classes for accessing terminologies and code sets, including the openEHR Support Terminology, from within instances of classes defined in the reference model. The classes shown here would normally be inherited via the classes EXTERNAL_ENVIRONMENT_ACCESS and OPENEHR_DEFINITIONS, although the exact details of how this is done may vary depending on implementation language. |
| 1477 | |
| 1478 | 5.2 Service Interface |
| 1479 | |
| 1480 | 5.2.1 Code Sets |
| 1481 | |
| 1482 | A simple terminology service interface is defined according to FIGURE 6, enabling openEHR code sets and terminology to be referenced formally from within the Reference Model. Two types of coded entities are distinguished in openEHR, and are accessible via the service interface. The first is codes from ‘code sets’, which are the kind of terminology where the code stands for itself, such as the ISO 639-1 language codes. The identifiers themselves of these code sets do not appear to be standardised, but names such as “ISO_639-1” are expected to be used (see below). |
| 1483 | |
| 1484 | In any case, code sets needed within the openEHR models themselves (e.g. for attributes whose value is a language code) are not referred to directly by an external name such as “ISO_639-1”, but via an internal constant, in this case, the constant Code_set_id_languages, whose value is defined to be “languages”. These constants are defined in the class OPENEHR_CODE_SET_IDENTIFIERS in FIGURE |
| 1485 | |
| 1486 | 6. The mapping between the internal identifiers and external names should be done in configuration files. The service function TERMINOLOGY_SERVICE.code_set_for_id() is used to retrieve code sets on the basis of a constant. The current mapping and external identifiers assumed in openEHR is defined in the openEHR Support Terminology document. This use of indirection is employed to ensure that the obsoleting and superseding of code-sets does not directly affect openEHR software. |
| 1487 | |
| 1488 | For code sets not mapped to internally used constants, i.e. code sets not required in the openEHR model itself, but otherwise known in the terminology service, the function TERMINOLOGY_SERVICE.code_set() can be used to retrieve these code sets by their external identifier. |
| 1489 | |
| 1490 | 5.2.2 Terminologies |
| 1491 | |
| 1492 | Terminologies, including the openEHR Support Terminology are accessed via the TERMINOLOGY_SERVICEfunctions terminology() and terminology_identifiers(), where the argument includes “openehr”, “centc251” (for CEN TC/251codes) and names from the US NLM terminologies list (see below). The openEHR Terminology supports groups, and the set of groups required by the reference model is defined in the class OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS. These groups correspond to coded attributes found in the openEHR Reference Model. |
| 1493 | |
| 1494 | 5.2.3 Terms and Codes in the openEHR Reference Model |
| 1495 | |
| 1496 | True coded attributes in the Reference Model (i.e. attributes of type DV_CODED_TEXT), such as FEEDER_AUDIT.change_type are defined by an invariant in the enclosing class, such as the following: |
1599 | | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
1600 | | |
1601 | | terminology |
1602 | | |
1603 | | OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS |
1604 | | |
1605 | | const Terminology_id_openehr: String is “openehr” const Group_id_audit_change_type: String is “audit change type” const Group_id_attestation_reason: String is “attestation reason” const Group_id_composition_category: String is “composition category” const Group_id_event_math_function: String is “event math function” const Group_id_instruction_states: String is “instruction states” const Group_id_instruction_transitions: String is “instruction transitions” const Group_id_null_flavours: String is “null flavours” const Group_id_property: String is “property” const Group_id_participation_function: String is “participation function” const Group_id_participation_mode: String is “participation mode” const Group_id_setting: String is “setting” const Group_id_term_mapping_purpose: String is “term mapping purpose” const Group_id_subject_relationship: String is “subject relationship” const Group_id_version_lifecycle_state: String is “version lifecycle state” |
1606 | | |
1607 | | valid_group_id(an_id: String): Boolean |
1608 | | |
1609 | | TERMINOLOGY_SERVICE |
1610 | | |
1611 | | OPENEHR_CODE_SET_IDENTIFIERS |
1612 | | |
1613 | | const Code_set_id_character_sets: String is “character sets” const Code_set_id_compression_algorithms: String is “compression algorithms” const Code_set_id_countries: String is “countries” const Code_set_id_integrity_check_algorithms: String is “integrity check algorithms” const Code_set_id_languages: String is “languages” const Code_set_id_media_types: String is “media types” const Code_set_id_normal_statuses: String is “normal statuses” |
1614 | | |
1615 | | valid_code_set_id(an_id: String): Boolean |
1616 | | |
1617 | | CODE_SET_ACCESS <<interface>> |
1618 | | |
1619 | | id: Stringall_codes: Set<CODE_PHRASE> has_lang (...): Boolean has_code (...): Boolean terminology (name: String): TERMINOLOGY_ACCESS code_set (name: String): CODE_SET_ACCESS code_set_for_id (id: String): CODE_SET_ACCESS has_terminology (name: String): Boolean has_code_set (name: String): Boolean terminology_identifiers: List<String>openehr_code_sets: Hash<String, String> code_set_identifiers: List<String> |
1620 | | |
1621 | | |
1622 | | ||TERMINOLOGY_ACCESS <<interface>> || |
| 1500 | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
| 1501 | |
| 1502 | terminology |
| 1503 | |
| 1504 | OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS |
| 1505 | |
| 1506 | const Terminology_id_openehr: String is “openehr” const Group_id_audit_change_type: String is “audit change type” const Group_id_attestation_reason: String is “attestation reason” const Group_id_composition_category: String is “composition category” const Group_id_event_math_function: String is “event math function” const Group_id_instruction_states: String is “instruction states” const Group_id_instruction_transitions: String is “instruction transitions” const Group_id_null_flavours: String is “null flavours” const Group_id_property: String is “property” const Group_id_participation_function: String is “participation function” const Group_id_participation_mode: String is “participation mode” const Group_id_setting: String is “setting” const Group_id_term_mapping_purpose: String is “term mapping purpose” const Group_id_subject_relationship: String is “subject relationship” const Group_id_version_lifecycle_state: String is “version lifecycle state” |
| 1507 | |
| 1508 | valid_group_id(an_id: String): Boolean |
| 1509 | |
| 1510 | TERMINOLOGY_SERVICE |
| 1511 | |
| 1512 | OPENEHR_CODE_SET_IDENTIFIERS |
| 1513 | |
| 1514 | const Code_set_id_character_sets: String is “character sets” const Code_set_id_compression_algorithms: String is “compression algorithms” const Code_set_id_countries: String is “countries” const Code_set_id_integrity_check_algorithms: String is “integrity check algorithms” const Code_set_id_languages: String is “languages” const Code_set_id_media_types: String is “media types” const Code_set_id_normal_statuses: String is “normal statuses” |
| 1515 | |
| 1516 | valid_code_set_id(an_id: String): Boolean |
| 1517 | |
| 1518 | CODE_SET_ACCESS <<interface>> |
| 1519 | |
| 1520 | id: Stringall_codes: Set<CODE_PHRASE> has_lang (...): Boolean has_code (...): Boolean terminology (name: String): TERMINOLOGY_ACCESS code_set (name: String): CODE_SET_ACCESS code_set_for_id (id: String): CODE_SET_ACCESS has_terminology (name: String): Boolean has_code_set (name: String): Boolean terminology_identifiers: List<String>openehr_code_sets: Hash<String, String> code_set_identifiers: List<String> |
| 1521 | |
| 1522 | ||TERMINOLOGY_ACCESS <<interface>>|| |
1630 | | Change_type_valid:terminology(Terminology_id_openehr).has_code_for_group_id (Group_id_audit_change_type, change_type.defining_code) |
1631 | | |
1632 | | This is a formal way of saying that the attribute change_type must have a value such that its defining_code (its CODE_PHRASE) is in the set of CODE_PHRASEs in the openEHR Terminology which are in the group whose indentifier is Group_id_audit_change_type. |
1633 | | |
1634 | | A similar invariant is used for attributes of type CODE_PHRASE, which come from a code_set. The following invariant appears in the class ENTRY (rm.composition.content.entry package): |
1635 | | |
1636 | | Language_valid: media_type /= Void and then code_set(Code_set_languages).has_code(language) |
1637 | | |
1638 | | 5.3 Identifiers |
1639 | | |
1640 | | In openEHR, the identifier of a terminology or code set is found in the terminology_id attribute of the class CODE_PHRASE (Data Types Information Model, text package). |
1641 | | |
1642 | | 5.3.1 Code Set Identifiers |
1643 | | |
1644 | | Internal code set identifiers (such as “languages”) used in openEHR are defined in the class OPENEHR_CODE_SET_IDENTIFIERS; assumed external identifiers (such as “ISO_639-1”) for code sets used by the openEHR Reference Model are defined in the openEHR Support Terminology document. |
1645 | | |
1646 | | 5.3.2 Terminology Identifiers |
1647 | | |
1648 | | Valid identifiers that can be used for this attribute for terminologies include but are not limited to the following: |
1649 | | |
1650 | | |
1651 | | * “openehr” |
1652 | | * “centc251” |
1653 | | * an identifier value from the first column of the US National Library or Medicine (NLM) UMLS terminology identifiers table below, in either of two forms: |
1654 | | |
1655 | | -as is, e.g. “ICD10AM_2000”, “ICPC93”; -with any trailing section starting with an underscore removed, e.g. “ICD10AM”. |
1656 | | |
1657 | | Other identification schemes are used in some standards, such as ISO Oids. These are not specified for direct use in openEHR for various reasons: |
1658 | | |
1659 | | |
1660 | | * they are not currently used by the NLM, and no definitive published list of terminology identifiers is available; |
1661 | | * ISO Oids are long identifiers and may significantly increase the size of persisted information due to the ubiquity of coded terms; |
1662 | | * determing the identity of the terminology in data always requires a request to a service containing the Oid / name mapping; |
1663 | | * there is a safety factor in having human readable terminology identifiers in the data. |
1664 | | |
1665 | | The use of Oid-based or other terminology identification schemes is not however incompatible with openEHR; all that is required is a terminology identifier / name mapping service or table. |
| 1530 | Change_type_valid:terminology(Terminology_id_openehr).has_code_for_group_id (Group_id_audit_change_type, change_type.defining_code) |
| 1531 | |
| 1532 | This is a formal way of saying that the attribute change_type must have a value such that its defining_code (its CODE_PHRASE) is in the set of CODE_PHRASEs in the openEHR Terminology which are in the group whose indentifier is Group_id_audit_change_type. |
| 1533 | |
| 1534 | A similar invariant is used for attributes of type CODE_PHRASE, which come from a code_set. The following invariant appears in the class ENTRY (rm.composition.content.entry package): |
| 1535 | |
| 1536 | Language_valid: media_type /= Void and then code_set(Code_set_languages).has_code(language) |
| 1537 | |
| 1538 | 5.3 Identifiers |
| 1539 | |
| 1540 | In openEHR, the identifier of a terminology or code set is found in the terminology_id attribute of the class CODE_PHRASE (Data Types Information Model, text package). |
| 1541 | |
| 1542 | 5.3.1 Code Set Identifiers |
| 1543 | |
| 1544 | Internal code set identifiers (such as “languages”) used in openEHR are defined in the class OPENEHR_CODE_SET_IDENTIFIERS; assumed external identifiers (such as “ISO_639-1”) for code sets used by the openEHR Reference Model are defined in the openEHR Support Terminology document. |
| 1545 | |
| 1546 | 5.3.2 Terminology Identifiers |
| 1547 | |
| 1548 | Valid identifiers that can be used for this attribute for terminologies include but are not limited to the following: |
| 1549 | |
| 1550 | * “openehr” |
| 1551 | * “centc251” |
| 1552 | * an identifier value from the first column of the US National Library or Medicine (NLM) UMLS terminology identifiers table below, in either of two forms: |
| 1553 | |
| 1554 | -as is, e.g. “ICD10AM_2000”, “ICPC93”; -with any trailing section starting with an underscore removed, e.g. “ICD10AM”. |
| 1555 | |
| 1556 | Other identification schemes are used in some standards, such as ISO Oids. These are not specified for direct use in openEHR for various reasons: |
| 1557 | |
| 1558 | * they are not currently used by the NLM, and no definitive published list of terminology identifiers is available; |
| 1559 | * ISO Oids are long identifiers and may significantly increase the size of persisted information due to the ubiquity of coded terms; |
| 1560 | * determing the identity of the terminology in data always requires a request to a service containing the Oid / name mapping; |
| 1561 | * there is a safety factor in having human readable terminology identifiers in the data. |
| 1562 | |
| 1563 | The use of Oid-based or other terminology identification schemes is not however incompatible with openEHR; all that is required is a terminology identifier / name mapping service or table. |
1673 | | The following table is a snapshot of the US National Library of Medicine UMLS terminology identifiers list. A definitive up-to-date list may be found on the NLM website at http://www.nlm.nih.gov/research/umls/metaa1.html . |
1674 | | |
1675 | | |
1676 | | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
1677 | | |
1678 | | ||||UMLS 2003 Terminology Identifiers || |
1679 | | ||Identifier ||Description || |
1680 | | ||AIR93 ||AI/RHEUM,1993 || |
1681 | | ||ALT2000 ||Alternative Billing Concepts, 2000 || |
1682 | | ||AOD2000 ||Alcohol and Other Drug Thesaurus, 2000 || |
1683 | | ||BI98 ||Beth Israel Vocabulary, 1.0 || |
1684 | | ||BRMP2002 ||Portuguese translation of the Medical Subject Headings, 2002 || |
1685 | | ||BRMS2002 ||Spanish translation of the Medical Subject Headings, 2002 || |
1686 | | ||CCPSS99 ||Canonical Clinical Problem Statement System, 1999 || |
1687 | | ||CCS99 ||Clinical Classifications Software, 1999 || |
1688 | | ||CDT4 ||Current Dental Terminology(CDT), 4 || |
1689 | | ||COSTAR_89-95 ||COSTAR, 1989-1995 || |
1690 | | ||CPM93 ||Medical Entities Dictionary, 1993 || |
1691 | | ||CPT01SP ||Physicians' Current Procedural Terminology, Spanish Translation, 2001 || |
1692 | | ||CPT2003 ||Physicians' Current Procedural Terminology, 2003 || |
1693 | | ||CSP2002 ||CRISP Thesaurus, 2002 || |
1694 | | ||CST95 ||COSTART, 1995 || |
1695 | | ||DDB00 ||Diseases Database, 2000 || |
1696 | | ||DMD2003 ||German translation of the Medical Subject Headings, 2003 || |
1697 | | ||DMDICD10_1995 ||German translation of ICD10, 1995 || |
1698 | | ||DMDUMD_1996 ||German translation of UMDNS, 1996 || |
1699 | | ||DSM3R_1987 ||DSM-III-R, 1987 || |
1700 | | ||DSM4_1994 ||DSM-IV, 1994 || |
1701 | | ||DUT2001 ||Dutch Translation of the Medical Subject Headings, 2001 || |
1702 | | ||DXP94 ||DXplain, 1994 || |
1703 | | ||FIN2003 ||Finnish translations of the Medical Subject Headings, 2003 || |
1704 | | ||HCDT4 ||HCPCS Version of Current Dental Terminology(CDT), 4 || |
1705 | | ||HCPCS03 ||Healthcare Common Procedure Coding System, 2003 || |
1706 | | ||HCPT03 ||HCPCS Version of Current Procedural Terminology(CPT), 2003 || |
1707 | | ||HHC96 ||Home Health Care Classification, 1996 || |
1708 | | ||HL7_1998-2002 ||Health Level Seven Vocabulary, 1998-2002 || |
1709 | | ||HLREL_1998 ||ICPC2E-ICD10 relationships from Dr. Henk Lamberts, 1998 || |
1710 | | ||HPC99 ||Health Product Comparison System, 1999 || |
1711 | | ||ICD10AE_1998 ||ICD10, American English Equivalents, 1998 || |
1712 | | ||ICD10AMAE_2000 ||International Statistical Classification of Diseases and Related Health Problems, Australian Modification, Americanized English Equivalents, 2000 || |
1713 | | ||ICD10AM_2000 ||International Statistical Classification of Diseases and Related Health Problems, 10th Revision, Australian Modification, January 2000 Release || |
1714 | | ||ICD10_1998 ||ICD10, 1998 || |
| 1571 | The following table is a snapshot of the US National Library of Medicine UMLS terminology identifiers list. A definitive up-to-date list may be found on the NLM website at http://www.nlm.nih.gov/research/umls/metaa1.html . |
| 1572 | |
| 1573 | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
| 1574 | |
| 1575 | ||||UMLS 2003 Terminology Identifiers|| |
| 1576 | ||Identifier||Description|| |
| 1577 | ||AIR93||AI/RHEUM,1993|| |
| 1578 | ||ALT2000||Alternative Billing Concepts, 2000|| |
| 1579 | ||AOD2000||Alcohol and Other Drug Thesaurus, 2000|| |
| 1580 | ||BI98||Beth Israel Vocabulary, 1.0|| |
| 1581 | ||BRMP2002||Portuguese translation of the Medical Subject Headings, 2002|| |
| 1582 | ||BRMS2002||Spanish translation of the Medical Subject Headings, 2002|| |
| 1583 | ||CCPSS99||Canonical Clinical Problem Statement System, 1999|| |
| 1584 | ||CCS99||Clinical Classifications Software, 1999|| |
| 1585 | ||CDT4||Current Dental Terminology(CDT), 4|| |
| 1586 | ||COSTAR_89-95||COSTAR, 1989-1995|| |
| 1587 | ||CPM93||Medical Entities Dictionary, 1993|| |
| 1588 | ||CPT01SP||Physicians' Current Procedural Terminology, Spanish Translation, 2001|| |
| 1589 | ||CPT2003||Physicians' Current Procedural Terminology, 2003|| |
| 1590 | ||CSP2002||CRISP Thesaurus, 2002|| |
| 1591 | ||CST95||COSTART, 1995|| |
| 1592 | ||DDB00||Diseases Database, 2000|| |
| 1593 | ||DMD2003||German translation of the Medical Subject Headings, 2003|| |
| 1594 | ||DMDICD10_1995||German translation of ICD10, 1995|| |
| 1595 | ||DMDUMD_1996||German translation of UMDNS, 1996|| |
| 1596 | ||DSM3R_1987||DSM-III-R, 1987|| |
| 1597 | ||DSM4_1994||DSM-IV, 1994|| |
| 1598 | ||DUT2001||Dutch Translation of the Medical Subject Headings, 2001|| |
| 1599 | ||DXP94||DXplain, 1994|| |
| 1600 | ||FIN2003||Finnish translations of the Medical Subject Headings, 2003|| |
| 1601 | ||HCDT4||HCPCS Version of Current Dental Terminology(CDT), 4|| |
| 1602 | ||HCPCS03||Healthcare Common Procedure Coding System, 2003|| |
| 1603 | ||HCPT03||HCPCS Version of Current Procedural Terminology(CPT), 2003|| |
| 1604 | ||HHC96||Home Health Care Classification, 1996|| |
| 1605 | ||HL7_1998-2002||Health Level Seven Vocabulary, 1998-2002|| |
| 1606 | ||HLREL_1998||ICPC2E-ICD10 relationships from Dr. Henk Lamberts, 1998|| |
| 1607 | ||HPC99||Health Product Comparison System, 1999|| |
| 1608 | ||ICD10AE_1998||ICD10, American English Equivalents, 1998|| |
| 1609 | ||ICD10AMAE_2000||International Statistical Classification of Diseases and Related Health Problems, Australian Modification, Americanized English Equivalents, 2000|| |
| 1610 | ||ICD10AM_2000||International Statistical Classification of Diseases and Related Health Problems, 10th Revision, Australian Modification, January 2000 Release|| |
| 1611 | ||ICD10_1998||ICD10, 1998|| |
1720 | | |
1721 | | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
1722 | | |
1723 | | ||||UMLS 2003 Terminology Identifiers || |
1724 | | ||Identifier ||Description || |
1725 | | ||ICD9CM_2003 ||ICD-9-CM, 2003 || |
1726 | | ||ICPC2AE_1998 ||International Classification of Primary Care, Americanized English Equivalents, 2E, 1998 || |
1727 | | ||ICPC2E_1998 ||International Classification of Primary Care 2nd Edition, Electronic, 2E, 1998 || |
1728 | | ||ICPC2P_2000 ||International Classification of Primary Care, Version2-Plus, 2000 || |
1729 | | ||ICPC93 ||International Classification of Primary Care, 1993 || |
1730 | | ||ICPCBAQ_1993 ||ICPC, Basque Translation, 1993 || |
1731 | | ||ICPCDAN_1993 ||ICPC, Danish Translation, 1993 || |
1732 | | ||ICPCDUT_1993 ||ICPC, Dutch Translation, 1993 || |
1733 | | ||ICPCFIN_1993 ||ICPC, Finnish Translation, 1993 || |
1734 | | ||ICPCFRE_1993 ||ICPC, French Translation, 1993 || |
1735 | | ||ICPCGER_1993 ||ICPC, German Translation, 1993 || |
1736 | | ||ICPCHEB_1993 ||ICPC, Hebrew Translation, 1993 || |
1737 | | ||ICPCHUN_1993 ||ICPC, Hungarian Translation, 1993 || |
1738 | | ||ICPCITA_1993 ||ICPC, Italian Translation, 1993 || |
1739 | | ||ICPCNOR_1993 ||ICPC, Norwegian Translation, 1993 || |
1740 | | ||ICPCPAE_2000 ||International Classification of Primary Care ,Version2-Plus, Americanized English Equivalents, 2000 || |
1741 | | ||ICPCPOR_1993 ||ICPC, Portuguese Translation, 1993 || |
1742 | | ||ICPCSPA_1993 ||ICPC, Spanish Translation, 1993 || |
1743 | | ||ICPCSWE_1993 ||ICPC, Swedish Translation, 1993 || |
1744 | | ||INS2002 ||French translation of the Medical Subject Headings, 2002 || |
1745 | | ||ITA2003 ||Italian translation of Medical Subject Headings, 2003 || |
1746 | | ||JABL99 ||Online Congenital Multiple Anomaly/ Mental Retardation Syndromes, 1999 || |
1747 | | ||LCH90 ||Library of Congress Subject Headings, 1990 || |
1748 | | ||LNC205 ||LOINC, 2.05 || |
1749 | | ||LOINC ||LOINC || |
1750 | | ||MCM92 ||!McMaster University Epidemiology Terms, 1992 || |
1751 | | ||MDDB99 ||!MasterDrug !DataBase, 1999 || |
1752 | | ||MDR51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1 || |
1753 | | ||MDRAE51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), American English Equivalents, 5.1 || |
1754 | | ||MDREA51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), American English, with expanded abbreviations, 5.1 || |
1755 | | ||MDREX51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), with expanded abbreviations, 5.1 || |
1756 | | ||MDRPOR51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1, Portuguese Edition || |
| 1617 | © 2003-2006 The openEHR Foundation email: info@openEHR.org web: !http://www.openEHR.org |
| 1618 | |
| 1619 | ||||UMLS 2003 Terminology Identifiers|| |
| 1620 | ||Identifier||Description|| |
| 1621 | ||ICD9CM_2003||ICD-9-CM, 2003|| |
| 1622 | ||ICPC2AE_1998||International Classification of Primary Care, Americanized English Equivalents, 2E, 1998|| |
| 1623 | ||ICPC2E_1998||International Classification of Primary Care 2nd Edition, Electronic, 2E, 1998|| |
| 1624 | ||ICPC2P_2000||International Classification of Primary Care, Version2-Plus, 2000|| |
| 1625 | ||ICPC93||International Classification of Primary Care, 1993|| |
| 1626 | ||ICPCBAQ_1993||ICPC, Basque Translation, 1993|| |
| 1627 | ||ICPCDAN_1993||ICPC, Danish Translation, 1993|| |
| 1628 | ||ICPCDUT_1993||ICPC, Dutch Translation, 1993|| |
| 1629 | ||ICPCFIN_1993||ICPC, Finnish Translation, 1993|| |
| 1630 | ||ICPCFRE_1993||ICPC, French Translation, 1993|| |
| 1631 | ||ICPCGER_1993||ICPC, German Translation, 1993|| |
| 1632 | ||ICPCHEB_1993||ICPC, Hebrew Translation, 1993|| |
| 1633 | ||ICPCHUN_1993||ICPC, Hungarian Translation, 1993|| |
| 1634 | ||ICPCITA_1993||ICPC, Italian Translation, 1993|| |
| 1635 | ||ICPCNOR_1993||ICPC, Norwegian Translation, 1993|| |
| 1636 | ||ICPCPAE_2000||International Classification of Primary Care ,Version2-Plus, Americanized English Equivalents, 2000|| |
| 1637 | ||ICPCPOR_1993||ICPC, Portuguese Translation, 1993|| |
| 1638 | ||ICPCSPA_1993||ICPC, Spanish Translation, 1993|| |
| 1639 | ||ICPCSWE_1993||ICPC, Swedish Translation, 1993|| |
| 1640 | ||INS2002||French translation of the Medical Subject Headings, 2002|| |
| 1641 | ||ITA2003||Italian translation of Medical Subject Headings, 2003|| |
| 1642 | ||JABL99||Online Congenital Multiple Anomaly/ Mental Retardation Syndromes, 1999|| |
| 1643 | ||LCH90||Library of Congress Subject Headings, 1990|| |
| 1644 | ||LNC205||LOINC, 2.05|| |
| 1645 | ||LOINC||LOINC|| |
| 1646 | ||MCM92||!McMaster University Epidemiology Terms, 1992|| |
| 1647 | ||MDDB99||!MasterDrug !DataBase, 1999|| |
| 1648 | ||MDR51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1|| |
| 1649 | ||MDRAE51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), American English Equivalents, 5.1|| |
| 1650 | ||MDREA51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), American English, with expanded abbreviations, 5.1|| |
| 1651 | ||MDREX51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), with expanded abbreviations, 5.1|| |
| 1652 | ||MDRPOR51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1, Portuguese Edition|| |
1762 | | |
1763 | | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
1764 | | |
1765 | | ||||UMLS 2003 Terminology Identifiers || |
1766 | | ||Identifier ||Description || |
1767 | | ||MDRSPA51 ||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1, Spanish Edition || |
1768 | | ||MIM93 ||Online Mendelian Inheritance in Man, 1993 || |
1769 | | ||MMSL01 ||Multum !MediSource Lexicon, 2001 || |
1770 | | ||MMX01 ||Micromedex DRUGDEX, 2001-08 || |
1771 | | ||MSH2003_2002_10_24 ||Medical Subject Headings, 2002_10_24 || |
1772 | | ||MTH ||UMLS Metathesaurus || |
1773 | | ||MTHCH03 ||Metathesaurus CPT Hierarchical Terms, 2003 || |
1774 | | ||MTHHH03 ||Metathesaurus HCPCS Hierarchical Terms, 2003 || |
1775 | | ||MTHICD9_2003 ||Metathesaurus additional entry terms for ICD-9-CM, 2003 || |
1776 | | ||MTHMST2001 ||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, 2001 || |
1777 | | ||MTHMSTFRE_2001 ||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, French Translation, 2001 || |
1778 | | ||MTHMSTITA_2001 ||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, Italian Translation, 2001 || |
1779 | | ||NAN99 ||Classification of Nursing Diagnoses, 1999 || |
1780 | | ||NCBI2001 ||NCBI Taxonomy, 2001 || |
1781 | | ||NCI2001a ||NCI Thesaurus, 2001a || |
1782 | | ||NCISEER_1999 ||NCISEER ICD Neoplasm Code Mappings, 1999 || |
1783 | | ||NDDF01 ||!FirstDataBank National Drug !DataFile, 2001-07 || |
1784 | | ||NEU99 ||Neuronames Brain Hierarchy, 1999 || |
1785 | | ||NIC99 ||Nursing Interventions Classification, 1999 || |
1786 | | ||NOC97 ||Nursing Outcomes Classification, 1997 || |
1787 | | ||OMIM97 ||OMIM, Online Mendelian Inheritance in Man, 1997 || |
1788 | | ||OMS94 ||Omaha System, 1994 || |
1789 | | ||PCDS97 ||Patient Care Data Set, 1997 || |
1790 | | ||PDQ2002 ||Physician Data Query, 2002 || |
1791 | | ||PPAC98 ||Pharmacy Practice Activity Classification , 1998 || |
1792 | | ||PSY2001 ||Thesaurus of Psychological Index Terms, 2001 || |
1793 | | ||QMR96 ||Quick Medical Reference (QMR), 1996 || |
1794 | | ||RAM99 ||QMR clinically related terms from Randolph A. Miller, 1999 || |
1795 | | ||RCD99 ||Clinical Terms Version 3 (CTV3) (Read Codes), 1999 || |
1796 | | ||RCDAE_1999 ||Read thesaurus, American English Equivalents, 1999 || |
1797 | | ||RCDSA_1999 ||Read thesaurus Americanized Synthesized Terms, 1999 || |
1798 | | ||RCDSY_1999 ||Read thesaurus, Synthesized Terms, 1999 || |
1799 | | ||RUS2003 ||Russian Translation of MeSH, 2003 || |
1800 | | ||RXNORM_03AA ||RXNORM Project, META2003AA || |
1801 | | ||SNM2 ||SNOMED-2, 2 || |
1802 | | ||SNMI98 ||SNOMED International, 1998 || |
| 1658 | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
| 1659 | |
| 1660 | ||||UMLS 2003 Terminology Identifiers|| |
| 1661 | ||Identifier||Description|| |
| 1662 | ||MDRSPA51||Medical Dictionary for Regulatory Activities Terminology (MedDRA), 5.1, Spanish Edition|| |
| 1663 | ||MIM93||Online Mendelian Inheritance in Man, 1993|| |
| 1664 | ||MMSL01||Multum !MediSource Lexicon, 2001|| |
| 1665 | ||MMX01||Micromedex DRUGDEX, 2001-08|| |
| 1666 | ||MSH2003_2002_10_24||Medical Subject Headings, 2002_10_24|| |
| 1667 | ||MTH||UMLS Metathesaurus|| |
| 1668 | ||MTHCH03||Metathesaurus CPT Hierarchical Terms, 2003|| |
| 1669 | ||MTHHH03||Metathesaurus HCPCS Hierarchical Terms, 2003|| |
| 1670 | ||MTHICD9_2003||Metathesaurus additional entry terms for ICD-9-CM, 2003|| |
| 1671 | ||MTHMST2001||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, 2001|| |
| 1672 | ||MTHMSTFRE_2001||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, French Translation, 2001|| |
| 1673 | ||MTHMSTITA_2001||Metathesaurus Version of Minimal Standard Terminology Digestive Endoscopy, Italian Translation, 2001|| |
| 1674 | ||NAN99||Classification of Nursing Diagnoses, 1999|| |
| 1675 | ||NCBI2001||NCBI Taxonomy, 2001|| |
| 1676 | ||NCI2001a||NCI Thesaurus, 2001a|| |
| 1677 | ||NCISEER_1999||NCISEER ICD Neoplasm Code Mappings, 1999|| |
| 1678 | ||NDDF01||!FirstDataBank National Drug !DataFile, 2001-07|| |
| 1679 | ||NEU99||Neuronames Brain Hierarchy, 1999|| |
| 1680 | ||NIC99||Nursing Interventions Classification, 1999|| |
| 1681 | ||NOC97||Nursing Outcomes Classification, 1997|| |
| 1682 | ||OMIM97||OMIM, Online Mendelian Inheritance in Man, 1997|| |
| 1683 | ||OMS94||Omaha System, 1994|| |
| 1684 | ||PCDS97||Patient Care Data Set, 1997|| |
| 1685 | ||PDQ2002||Physician Data Query, 2002|| |
| 1686 | ||PPAC98||Pharmacy Practice Activity Classification , 1998|| |
| 1687 | ||PSY2001||Thesaurus of Psychological Index Terms, 2001|| |
| 1688 | ||QMR96||Quick Medical Reference (QMR), 1996|| |
| 1689 | ||RAM99||QMR clinically related terms from Randolph A. Miller, 1999|| |
| 1690 | ||RCD99||Clinical Terms Version 3 (CTV3) (Read Codes), 1999|| |
| 1691 | ||RCDAE_1999||Read thesaurus, American English Equivalents, 1999|| |
| 1692 | ||RCDSA_1999||Read thesaurus Americanized Synthesized Terms, 1999|| |
| 1693 | ||RCDSY_1999||Read thesaurus, Synthesized Terms, 1999|| |
| 1694 | ||RUS2003||Russian Translation of MeSH, 2003|| |
| 1695 | ||RXNORM_03AA||RXNORM Project, META2003AA|| |
| 1696 | ||SNM2||SNOMED-2, 2|| |
| 1697 | ||SNMI98||SNOMED International, 1998|| |
1808 | | |
1809 | | ||||UMLS 2003 Terminology Identifiers || |
1810 | | ||Identifier ||Description || |
1811 | | ||SNOMED-CT ||SNOMED International Clinical Terms, 2002 || |
1812 | | ||SPN02 ||Standard Product Nomenclature, 2002 || |
1813 | | ||SRC ||Metathesaurus Source Terminology Names || |
1814 | | ||ULT93 ||UltraSTAR, 1993 || |
1815 | | ||UMD2003 ||UMDNS: product category thesaurus, 2003 || |
1816 | | ||UMLS ||UMLS: National Library of Medicine, USA || |
1817 | | ||UWDA155 ||University of Washington Digital Anatomist, 1.5.5 || |
1818 | | ||VANDF01 ||Veterans Health Administration National Drug File, 2001 || |
1819 | | ||WHO97 ||WHO Adverse Reaction Terminology, 1997 || |
1820 | | ||WHOFRE_1997 ||WHOART, French Translation, 1997 || |
1821 | | ||WHOGER_1997 ||WHOART, German Translation, 1997 || |
1822 | | ||WHOPOR_1997 ||WHOART, Portuguese Translation, 1997 || |
1823 | | ||WHOSPA_1997 ||WHOART, Spanish Translation, 1997 || |
| 1703 | ||||UMLS 2003 Terminology Identifiers|| |
| 1704 | ||Identifier||Description|| |
| 1705 | ||SNOMED-CT||SNOMED International Clinical Terms, 2002|| |
| 1706 | ||SPN02||Standard Product Nomenclature, 2002|| |
| 1707 | ||SRC||Metathesaurus Source Terminology Names|| |
| 1708 | ||ULT93||UltraSTAR, 1993|| |
| 1709 | ||UMD2003||UMDNS: product category thesaurus, 2003|| |
| 1710 | ||UMLS||UMLS: National Library of Medicine, USA|| |
| 1711 | ||UWDA155||University of Washington Digital Anatomist, 1.5.5|| |
| 1712 | ||VANDF01||Veterans Health Administration National Drug File, 2001|| |
| 1713 | ||WHO97||WHO Adverse Reaction Terminology, 1997|| |
| 1714 | ||WHOFRE_1997||WHOART, French Translation, 1997|| |
| 1715 | ||WHOGER_1997||WHOART, German Translation, 1997|| |
| 1716 | ||WHOPOR_1997||WHOART, Portuguese Translation, 1997|| |
| 1717 | ||WHOSPA_1997||WHOART, Spanish Translation, 1997|| |
1831 | | 5.4 Class Definitions |
1832 | | |
1833 | | 5.4.1 TERMINOLOGY_SERVICE Class |
1834 | | |
1835 | | |
1836 | | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
1837 | | |
1838 | | ||CLASS ||TERMINOLOGY_SERVICE || |
1839 | | ||Purpose ||Defines an object providing proxy access to a terminology service. || |
1840 | | ||Inherit ||OPENEHR_CODE_SET_IDENTIFIERS, OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS || |
1841 | | ||Functions ||Signature ||Meaning || |
1842 | | ||||terminology (name: String): ||Return an interface to the terminology || |
1843 | | ||||TERMINOLOGY_ACCESS ||named name. Allowable names include || |
1844 | | ||||require ||• “openehr”|| |
1845 | | ||||name /= Void and then has_terminology (name) ensure Result /= Void ||[http://www.nlm.nih.gov/research/umls/metaa1.html • “centc251” • any name from are taken from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
1846 | | ||||code_set (name: String): CODE_SET_ACCESS require name /= Void and then has_code_set (name) ensure Result /= Void ||Return an interface to the code_set identified by the external identifier name (e.g. “ISO_639-1”). || |
1847 | | ||||code_set_for_id(id: String): CODE_SET_ACCESS require id /= Void and then valid_code_set_id (id) ensure Result /= Void has_terminology (name: String): Boolean require name /= Void and then not name.is_empty ||[http://www.nlm.nih.gov/research/umls/metaa1.html Return an interface to the code_set identified internally in openEHR by id. True if terminology named name known by this service. Allowable names include • “openehr” • “centc251” • any name from are taken from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
| 1725 | 5.4 Class Definitions |
| 1726 | |
| 1727 | 5.4.1 TERMINOLOGY_SERVICE Class |
| 1728 | |
| 1729 | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
| 1730 | |
| 1731 | ||CLASS||TERMINOLOGY_SERVICE|| |
| 1732 | ||Purpose||Defines an object providing proxy access to a terminology service.|| |
| 1733 | ||Inherit||OPENEHR_CODE_SET_IDENTIFIERS, OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS|| |
| 1734 | ||Functions||Signature||Meaning|| |
| 1735 | ||||terminology (name: String):||Return an interface to the terminology|| |
| 1736 | ||||TERMINOLOGY_ACCESS||named name. Allowable names include|| |
| 1737 | ||||require||• “openehr”|| |
| 1738 | ||||name /= Void and then has_terminology (name) ensure Result /= Void||[http://www.nlm.nih.gov/research/umls/metaa1.html • “centc251” • any name from are taken from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
| 1739 | ||||code_set (name: String): CODE_SET_ACCESS require name /= Void and then has_code_set (name) ensure Result /= Void||Return an interface to the code_set identified by the external identifier name (e.g. “ISO_639-1”).|| |
| 1740 | ||||code_set_for_id(id: String): CODE_SET_ACCESS require id /= Void and then valid_code_set_id (id) ensure Result /= Void has_terminology (name: String): Boolean require name /= Void and then not name.is_empty||[http://www.nlm.nih.gov/research/umls/metaa1.html Return an interface to the code_set identified internally in openEHR by id. True if terminology named name known by this service. Allowable names include • “openehr” • “centc251” • any name from are taken from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
1854 | | |
1855 | | ||CLASS ||TERMINOLOGY_SERVICE || |
1856 | | ||||has_code_set (name: String): Boolean require name /= Void and then not name.is_empty ||True if code_set linked to internal name (e.g. “languages”) is available. || |
1857 | | ||||terminology_identifiers: List<String> ||[http://www.nlm.nih.gov/research/umls/metaa1.html Set of all terminology identifiers known in the terminology service. Values from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
1858 | | ||||code_set_identifiers: List<String> ||Set of all code set identifiers known in the terminology service. || |
1859 | | ||||openehr_code_sets: Hash<String, String> ||Set of all code sets identifiers for which there is an internal openEHR name; returned as a Hash of ids keyed by internal name. || |
1860 | | ||Invariants |||| |
1861 | | |
1862 | | 5.4.2 TERMINOLOGY_ACCESS Class |
1863 | | |
1864 | | |
1865 | | ||CLASS ||TERMINOLOGY_ACCESS || |
1866 | | ||Purpose ||Defines an object providing proxy access to a terminology. || |
1867 | | ||Functions ||Signature ||Meaning || |
1868 | | ||||id: String ||Identification of this Terminology || |
1869 | | ||||all_codes: Set<CODE_PHRASE> ||Return all codes known in this terminology || |
1870 | | ||||codes_for_group_id (group_id: String): Set<CODE_PHRASE> ||Return all codes under grouper ‘group_id’ from this terminology || |
1871 | | ||||has_code_for_group_id (group_id: String; a_code: CODE_PHRASE): Boolean codes_for_group_name (name, lang: String): Set<CODE_PHRASE> ||True if ‘a_code’ is known in group ‘group_id’ in the openEHR terminology. Return all codes under grouper whose name in ‘lang’ is ‘name’ from this terminology || |
| 1747 | ||CLASS||TERMINOLOGY_SERVICE|| |
| 1748 | ||||has_code_set (name: String): Boolean require name /= Void and then not name.is_empty||True if code_set linked to internal name (e.g. “languages”) is available.|| |
| 1749 | ||||terminology_identifiers: List<String>||[http://www.nlm.nih.gov/research/umls/metaa1.html Set of all terminology identifiers known in the terminology service. Values from the US NLM UMLS meta-data list at http://www.nlm.nih.gov/research/umls/metaa1.html]|| |
| 1750 | ||||code_set_identifiers: List<String>||Set of all code set identifiers known in the terminology service.|| |
| 1751 | ||||openehr_code_sets: Hash<String, String>||Set of all code sets identifiers for which there is an internal openEHR name; returned as a Hash of ids keyed by internal name.|| |
| 1752 | ||Invariants|||| |
| 1753 | |
| 1754 | 5.4.2 TERMINOLOGY_ACCESS Class |
| 1755 | |
| 1756 | ||CLASS||TERMINOLOGY_ACCESS|| |
| 1757 | ||Purpose||Defines an object providing proxy access to a terminology.|| |
| 1758 | ||Functions||Signature||Meaning|| |
| 1759 | ||||id: String||Identification of this Terminology|| |
| 1760 | ||||all_codes: Set<CODE_PHRASE>||Return all codes known in this terminology|| |
| 1761 | ||||codes_for_group_id (group_id: String): Set<CODE_PHRASE>||Return all codes under grouper ‘group_id’ from this terminology|| |
| 1762 | ||||has_code_for_group_id (group_id: String; a_code: CODE_PHRASE): Boolean codes_for_group_name (name, lang: String): Set<CODE_PHRASE>||True if ‘a_code’ is known in group ‘group_id’ in the openEHR terminology. Return all codes under grouper whose name in ‘lang’ is ‘name’ from this terminology|| |
1882 | | 5.4.3 CODE_SET_ACCESS Class |
1883 | | |
1884 | | |
1885 | | ||CLASS ||CODE_SET_ACCESS || |
1886 | | ||Purpose ||Defines an object providing proxy access to a code_set. || |
1887 | | ||Functions ||Signature ||Meaning || |
1888 | | ||||id: String ||External identifier of this code set || |
1889 | | ||||all_codes: Set<CODE_PHRASE> ||Return all codes known in this code set || |
1890 | | ||||has_lang (a_lang: CODE_PHRASE): Boolean ||True if code set knows about ‘a_lang’ || |
1891 | | ||||has_code (a_code: CODE_PHRASE): Boolean ||True if code set knows about ‘a_code’ || |
1892 | | ||Invariants ||Id_valid: id /= Void and then not id.is_empty || |
1893 | | |
1894 | | 5.4.4 OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS Class |
1895 | | |
1896 | | |
1897 | | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
1898 | | |
1899 | | ||CLASS ||OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS || |
1900 | | ||Purpose ||List of identifiers for groups in the openEHR terminology. || |
1901 | | ||Constants ||Signature ||Meaning || |
1902 | | ||||Terminology_id: Stringis “openehr” ||Name of openEHR’s own terminology || |
1903 | | ||||Group_id_audit_change_type: String is “audit change type” |||| |
1904 | | ||||Group_id_attestation_reason: String is “attestation reason” |||| |
1905 | | ||||Group_id_composition_category: Stringis “composition category” |||| |
1906 | | ||||Group_id_event_math_function: String is “event math function” |||| |
1907 | | ||||Group_id_instruction_states: Stringis “instruction states” |||| |
1908 | | ||||Group_id_instruction_transitions: String is “instruction transitions” |||| |
1909 | | ||||Group_id_null_flavours: String is “null flavours” |||| |
| 1773 | 5.4.3 CODE_SET_ACCESS Class |
| 1774 | |
| 1775 | ||CLASS||CODE_SET_ACCESS|| |
| 1776 | ||Purpose||Defines an object providing proxy access to a code_set.|| |
| 1777 | ||Functions||Signature||Meaning|| |
| 1778 | ||||id: String||External identifier of this code set|| |
| 1779 | ||||all_codes: Set<CODE_PHRASE>||Return all codes known in this code set|| |
| 1780 | ||||has_lang (a_lang: CODE_PHRASE): Boolean||True if code set knows about ‘a_lang’|| |
| 1781 | ||||has_code (a_code: CODE_PHRASE): Boolean||True if code set knows about ‘a_code’|| |
| 1782 | ||Invariants||Id_valid: id /= Void and then not id.is_empty|| |
| 1783 | |
| 1784 | 5.4.4 OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS Class |
| 1785 | |
| 1786 | [file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_15429 © 2003-2006 The openEHR Foundation] email: info@openEHR.org web: !http://www.openEHR.org |
| 1787 | |
| 1788 | ||CLASS||OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS|| |
| 1789 | ||Purpose||List of identifiers for groups in the openEHR terminology.|| |
| 1790 | ||Constants||Signature||Meaning|| |
| 1791 | ||||Terminology_id: Stringis “openehr”||Name of openEHR’s own terminology|| |
| 1792 | ||||Group_id_audit_change_type: String is “audit change type”|||| |
| 1793 | ||||Group_id_attestation_reason: String is “attestation reason”|||| |
| 1794 | ||||Group_id_composition_category: Stringis “composition category”|||| |
| 1795 | ||||Group_id_event_math_function: String is “event math function”|||| |
| 1796 | ||||Group_id_instruction_states: Stringis “instruction states”|||| |
| 1797 | ||||Group_id_instruction_transitions: String is “instruction transitions”|||| |
| 1798 | ||||Group_id_null_flavours: String is “null flavours”|||| |
1915 | | |
1916 | | ||CLASS ||OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS || |
1917 | | ||||Group_id_property: Stringis “property” |||| |
1918 | | ||||Group_id_participation_function: Stringis “participation function” |||| |
1919 | | ||||Group_id_participation_mode: String is “participation mode” |||| |
1920 | | ||||Group_id_subject_relationship: String is “subject relationship” |||| |
1921 | | ||||Group_id_setting: String is “setting” |||| |
1922 | | ||||Group_id_term_mapping_purpose: String is “term mapping purpose” |||| |
1923 | | ||||Group_id_version_lifecycle_state: Stringis “version lifecycle state” |||| |
1924 | | ||Functions ||Signature ||Meaning || |
1925 | | ||||valid_terminology_group_id (an_id: String): Boolean ||Validity function to test if an identifier is in the set defined by this class. || |
1926 | | ||Invariants |||| |
1927 | | |
1928 | | 5.4.5 OPENEHR_CODE_SET_IDENTIFIERS Class |
1929 | | |
1930 | | |
1931 | | ||CLASS ||OPENEHR_CODE_SET_IDENTIFIERS || |
1932 | | ||Purpose ||List of identifiers for code sets in the openEHR terminology. || |
1933 | | ||Constants ||Signature ||Meaning || |
1934 | | ||||Code_set_id_character_sets: String is “character sets” |||| |
1935 | | ||||Code_set_id_compression_algorithms: Stringis “compression algorithms” |||| |
1936 | | ||||Code_set_id_countries: String is “countries” |||| |
1937 | | ||||Code_set_id_integrity_check_algorithms: Stringis “integrity check algorithms” |||| |
1938 | | ||||Code_set_id_languages: String is “languages” |||| |
| 1804 | ||CLASS||OPENEHR_TERMINOLOGY_GROUP_IDENTIFIERS|| |
| 1805 | ||||Group_id_property: Stringis “property”|||| |
| 1806 | ||||Group_id_participation_function: Stringis “participation function”|||| |
| 1807 | ||||Group_id_participation_mode: String is “participation mode”|||| |
| 1808 | ||||Group_id_subject_relationship: String is “subject relationship”|||| |
| 1809 | ||||Group_id_setting: String is “setting”|||| |
| 1810 | ||||Group_id_term_mapping_purpose: String is “term mapping purpose”|||| |
| 1811 | ||||Group_id_version_lifecycle_state: Stringis “version lifecycle state”|||| |
| 1812 | ||Functions||Signature||Meaning|| |
| 1813 | ||||valid_terminology_group_id (an_id: String): Boolean||Validity function to test if an identifier is in the set defined by this class.|| |
| 1814 | ||Invariants|||| |
| 1815 | |
| 1816 | 5.4.5 OPENEHR_CODE_SET_IDENTIFIERS Class |
| 1817 | |
| 1818 | ||CLASS||OPENEHR_CODE_SET_IDENTIFIERS|| |
| 1819 | ||Purpose||List of identifiers for code sets in the openEHR terminology.|| |
| 1820 | ||Constants||Signature||Meaning|| |
| 1821 | ||||Code_set_id_character_sets: String is “character sets”|||| |
| 1822 | ||||Code_set_id_compression_algorithms: Stringis “compression algorithms”|||| |
| 1823 | ||||Code_set_id_countries: String is “countries”|||| |
| 1824 | ||||Code_set_id_integrity_check_algorithms: Stringis “integrity check algorithms”|||| |
| 1825 | ||||Code_set_id_languages: String is “languages”|||| |
2010 | | Definition Package |
2011 | | |
2012 | | 7.1 Overview |
2013 | | |
2014 | | The definition[file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_19330 package, illustrated in FIGURE 8, defines symbolic definitions used by the] openEHR models. Only a small number are currently defined. |
2015 | | |
2016 | | definition |
2017 | | |
2018 | | BASIC_DEFINITIONS |
2019 | | |
2020 | | CR: Character is ‘\015’ LF: Character is ‘\012’ |
2021 | | |
2022 | | OPENEHR_DEFINITIONS |
2023 | | |
2024 | | |
2025 | | ||FIGURE 8 rm.support.definition Package || |
2026 | | ||7.2 ||Class Definitions || |
2027 | | ||7.2.1 ||OPENEHR_DEFINITIONS Class || |
2028 | | |
2029 | | |
2030 | | ||CLASS ||OPENEHR_DEFINITIONS || |
2031 | | ||Purpose ||Inheritance class to provide access to constants defined in other packages. || |
2032 | | ||Inherit ||BASIC_DEFINITIONS || |
2033 | | ||Attributes ||Signature ||Meaning || |
2034 | | ||Invariants |||| |
2035 | | |
2036 | | 7.2.2 BASIC_DEFINITIONS Class |
2037 | | |
2038 | | |
2039 | | ||CLASS ||BASIC_DEFINITIONS || |
2040 | | ||Purpose ||Defines globally used constant values. || |
2041 | | ||Attributes ||Signature ||Meaning || |
2042 | | ||||CR: Character is ‘\015’ ||Carriage return character || |
2043 | | ||||LF: Character is ‘\012’ ||Linefeed character || |
2044 | | ||Invariants |||| |
| 1891 | Definition Package |
| 1892 | |
| 1893 | 7.1 Overview |
| 1894 | |
| 1895 | The definition[file:///home/skoba/src/openehr-jp/adl/trunk/pdf2html/rm/support_im/support_im.htm#LinkTarget_19330 package, illustrated in FIGURE 8, defines symbolic definitions used by the] openEHR models. Only a small number are currently defined. |
| 1896 | |
| 1897 | definition |
| 1898 | |
| 1899 | BASIC_DEFINITIONS |
| 1900 | |
| 1901 | CR: Character is ‘\015’ LF: Character is ‘\012’ |
| 1902 | |
| 1903 | OPENEHR_DEFINITIONS |
| 1904 | |
| 1905 | ||FIGURE 8 rm.support.definition Package|| |
| 1906 | ||7.2||Class Definitions|| |
| 1907 | ||7.2.1||OPENEHR_DEFINITIONS Class|| |
| 1908 | |
| 1909 | ||CLASS||OPENEHR_DEFINITIONS|| |
| 1910 | ||Purpose||Inheritance class to provide access to constants defined in other packages.|| |
| 1911 | ||Inherit||BASIC_DEFINITIONS|| |
| 1912 | ||Attributes||Signature||Meaning|| |
| 1913 | ||Invariants|||| |
| 1914 | |
| 1915 | 7.2.2 BASIC_DEFINITIONS Class |
| 1916 | |
| 1917 | ||CLASS||BASIC_DEFINITIONS|| |
| 1918 | ||Purpose||Defines globally used constant values.|| |
| 1919 | ||Attributes||Signature||Meaning|| |
| 1920 | ||||CR: Character is ‘\015’||Carriage return character|| |
| 1921 | ||||LF: Character is ‘\012’||Linefeed character|| |
| 1922 | ||Invariants|||| |