This wiki has undergone a migration to Confluence found Here
<meta name="googlebot" content="noindex">

Difference between revisions of "Static Model BNF Grammar"

From HL7Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
 
== for RMIM attribute rendering ==
 
== for RMIM attribute rendering ==
<attribute> :== <attName> “: “ <type> “ <cardinality> <defaultValue>? <hl7Metadata>
+
<pre>
 +
attribute           :== attName “: “ type “ “ cardinality defaultValue? hl7Metadata
 +
attName              :== lowerCamelCase
 +
type                :== typeBase flavorExtension? ( “(“ typeArguments “)” )?
 +
typeBase            :== ( ‘A’-‘Z’ )+
 +
flavorExtension      :== ( “.” typeBase )+
 +
typeArguments        :== <type> ( ,” <type> )*
 +
defaultValue         :== “= “ anyText <!-- Must prohibit the “{“ character 
 +
hl7Metadata         :== “{“ mandatoryConf (vocabBinding | fixedValue | enumeration | allowedRange | lengthLimits)?
 +
                        updateMode? extensionOid? businessNames? “ }”
  
<attName> :== <lowerCamelCase>
+
mandatoryConf        :== “ M”  <!-- isMandatory = true, required -->
 +
                      | “ R”  <!-- isMandatory = false, required -->
 +
                      | “ NP” <!-- isMandatory = false, not permitted -->
 +
                      | “ I”  <!-- isMandatory = false, ignored -->
 +
                      | “ U”  <!-- isMandatory = false, unspecified -->
  
<type> :== <typeBase> <flavorExtension>? ( “(“ <typeArguments> “)” )?
+
vocabBinding        :== conceptDomainBinding | valueSetBinding | codeBinding
 +
conceptDomainBinding :== “ < CD: ” ( domainName | ( “x_” domainName ) )
 +
domainName          :== upperCamelCase
 +
valueSetBinding      :== valueSetFull <!-- used for all non-immutable codes -->
 +
                      | valueSetShort <!-- used for all immutable codes  -->
  
<typeBase> :== ( ‘A’-‘Z’ )+
+
valueSetFull         :== “ < V:” ( valueSetName | oid ) valueSetVersion? strength anyText
 
+
valueSetShort       :== valueSetLT | valueSetLE
<flavorExtension> :== ( “.” <typeBase> )+
+
valueSetLT           :== “ < “ ( ‘A’-‘Z’ )+  <!-- all specializations of specified root  code -->
 
+
valueSetLE           :== “ <= “ ( ‘A’-‘Z’ )+  <!-- —specified root code and all specializations -->
<typeArguments> :== <type> ( “,” <type> )*
+
valueSetName         :== upperCamelCase | ( “x_” upperCamelCase ) )
 
+
valueSetVersion     :== “#” ( ‘0’-‘9’ ){8} ( ( ‘0’-‘9’ ){6} )? <!-- date with optional time -->
<defaultValue> :== “= “ <anyText> <!-- Must prohibit the “{“ character 
+
strength             :== “ CWE” | “ CNE”
 
+
codeBinding         :== codeFull <!-- used for all non-immutable codes -->
<hl7Metadata> :== “{“ <mandatoryConf> (<vocabBinding> | <fixedValue> | <enumeration> | <allowedRange>  | <lengthLimits>)?
+
                      | codeShort <!-- used for all immutable codes  -->
<updateMode> ? <extensionOid> ? <businessNames>? “ }”
 
 
 
<mandatoryConf> :== “ M”  <!-- isMandatory = true, required -->
 
 
 
  | “ R”  <!-- isMandatory = false, required -->
 
 
 
  | “ NP” <!-- isMandatory = false, not permitted -->
 
 
 
  | “ I”  <!-- isMandatory = false, ignored -->
 
 
 
  | “ U”  <!-- isMandatory = false, unspecified -->
 
 
 
<vocabBinding> :== < conceptDomainBinding> | <valueSetBinding> | <codeBinding>
 
 
 
< conceptDomainBinding> :== “ <  CD: ” ( <domainName> | ( “x_” <domainName> ) )
 
 
 
<domainName> :== <upperCamelCase>
 
 
 
<valueSetBinding> :== <valueSetFull> <!-- used for all non-immutable codes -->
 
 
 
  | <valueSetShort> <!-- used for all immutable codes  -->
 
 
 
<valueSetFull> :== “ < V:” ( <valueSetName> | <oid> ) <valueSetVersion>? <strength> <anyText>
 
 
 
<valueSetShort> :== <valueSetLT> | <valueSetLE>
 
 
 
<valueSetLT> :== “ < “ ( ‘A’-‘Z’ )+  <!-- all specializations of specified root  code -->
 
 
 
<valueSetLE> :== “ <= “ ( ‘A’-‘Z’ )+  <!-- —specified root code and all specializations -->
 
 
 
<valueSetName> :== <upperCamelCase> | ( “x_” <upperCamelCase> ) )
 
 
 
<valueSetVersion> :== “#” ( ‘0’-‘9’ ){8} ( ( ‘0’-‘9’ ){6} )? <!-- date with optional time -->
 
 
 
<strength> :== “ CWE” | “ CNE”
 
 
 
<codeBinding> :== <codeFull> <!-- used for all non-immutable codes -->
 
 
 
  | <codeShort> <!-- used for all immutable codes  -->
 
 
 
<codeFull > :== “ < = C:” ( <codeSystemName> | <oid> ) “#” <anyText>
 
 
 
<codeSystemName> :== <upperCamelCase>
 
 
 
<codeShort> :== “ =” <anyText>
 
 
 
<fixedValue> :== ‘ = “’ <anyText> ‘”’
 
 
 
<enumeration> :== “ = [“ <enumerationVals> “]”
 
 
 
<enumerationVals> :== ‘”’ <anyText> ‘”’ ( ‘, “’ <anyText> ‘”’ )*
 
 
 
<allowedRange> :== “ = [“ <number> “..” <number> “]”
 
 
 
<lengthLimits> :== “ Len=” ( <fixedLength> | <lengthRange>  )
 
 
 
<fixedLength> :== <number>
 
 
 
<lengthRange> :== <number> “..” <number>
 
 
 
<updateMode> :== “ {“ <mode> ( “: “ <modeList> )? “}”
 
 
 
<modeList> :== <mode> | <mode> “,” <modeList>
 
 
 
<mode> ::= 'A' | ‘AR’ | 'D' | ‘K’ | ‘N’ | ‘R’ | ‘REF’ | 'U'
 
 
 
<extensionOid> :== “ EXT:” <oid>
 
 
 
<businessNames> :== <businessName> (“ “ <businessNames>)?
 
 
 
<businessName> :== “ (“ <realm>? <anyText> “)” <!-- Must exclude “(“ -->
 
 
 
<realm> :== (‘A’-‘Z’){2} “-“
 
 
 
<oid> :== “2” (“.” ( ‘0’-‘9’ )* )+
 
 
 
<number> :== ( ‘0’-‘9’ )+
 
 
 
<upperCamelCase> :== ( ‘A’-’Z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
 
 
 
<lowerCamelCase> :== ( ‘a’-’z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
 
 
 
<anyText> :== ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ )*
 
  
 +
codeFull            :== “ < = C:” ( codeSystemName | oid ) “#” anyText
 +
codeSystemName      :== upperCamelCase
 +
codeShort            :== “ =” anyText
 +
fixedValue          :== ‘ = “’ anyText ‘”’
 +
enumeration          :== “ = [“ enumerationVals “]”
 +
enumerationVals      :== ‘”’ anyText ‘”’ ( ‘, “’ anyText ‘”’ )*
 +
allowedRange        :== “ = [“ number “..” number “]”
 +
lengthLimits        :== “ Len=” ( fixedLength | lengthRange )
 +
fixedLength          :== number
 +
lengthRange          :== number “..” number
 +
updateMode          :== “ {“ mode ( “: “ modeList )? “}”
 +
modeList            :== mode | mode “,” modeList
 +
mode                :== 'A' | ‘AR’ | 'D' | ‘K’ | ‘N’ | ‘R’ | ‘REF’ | 'U'
 +
extensionOid        :== “ EXT:” oid
 +
businessNames        :== businessName (“ “ businessNames)?
 +
businessName        :== “ (“ realm? anyText “)” <!-- Must exclude “(“ -->
 +
realm                :== (‘A’-‘Z’){2} “-“
 +
oid                  :== “2” (“.” ( ‘0’-‘9’ )* )+
 +
number              :== ( ‘0’-‘9’ )+
 +
upperCamelCase      :== ( ‘A’-’Z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
 +
lowerCamelCase      :== ( ‘a’-’z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
 +
anyText              :== ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ )*
 +
</pre>
  
 
===Examples: ===
 
===Examples: ===
Line 112: Line 69:
  
 
== RMIM Association rendering ==
 
== RMIM Association rendering ==
<association> :== <cardinality> <hl7AssocMetadata> <EOL> <associationName>
+
<pre>
<cardinality>     :== “[”<number> “..” <number> “]”
+
association     :== cardinality hl7AssocMetadata EOL associationName
<hl7AssocMetadata> :== “{“ <mandatoryConf> <updateMode>? “}”
+
cardinality     :== “[” number “..” number “]”
<associationName> :== <lowerCamelCase>
+
hl7AssocMetadata :== “{“ mandatoryConf updateMode? “}”
 +
associationName :== lowerCamelCase
 +
</pre>
  
 
===Examples:===
 
===Examples:===
Line 125: Line 84:
  
 
== CMET Rendering==
 
== CMET Rendering==
<cmet> :== “<CMET>”<stdText> <EOL> <cmetName> <EOL>” “ <attribution> <EOLseparatorLine> <modelatt>
+
<pre>
<stdTEXT> :== “CMET:” “(“ <definingVocabulary> ”)”
+
cmet             :== “<CMET>” stdText EOL cmetName EOL ” “ attribution EOLseparatorLine modelatt
<cmetName> :== <cmetAct> | <cmetEntity> | <cmetRole> | <cmetOther>
+
stdTEXT             :== “CMET:” “(“ definingVocabulary ”)”
<cmetAct> :== “A_”<upperCamelCase>
+
cmetName           :== cmetAct | cmetEntity | cmetRole | cmetOther
<cmetEntity> :== “E_”<upperCamelCase>
+
cmetAct             :== “A_” upperCamelCase
<cmetOther> :== “O_”<upperCamelCase>
+
cmetEntity         :== “E_” upperCamelCase  
<cmetRole> :== “R_”<upperCamelCase>
+
cmetOther           :== “O_” upperCamelCase
<attribution> :== “[” <cmetAttributionKindanyText> “]”
+
cmetRole           :== “R_” upperCamelCase
<cmetAttributionKind> :== <anyText >
+
attribution         :== “[” cmetAttributionKindanyText “]”
<model> :== “(” <modelId> “)”
+
cmetAttributionKind :== anyText
<att> :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
+
model               :== “(” modelId “)”
 +
att                 :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
 +
</pre>
  
 
===Examples:===
 
===Examples:===
Line 143: Line 104:
  
 
== STUB rendering==
 
== STUB rendering==
<stub> :== <stdText>”<CMET>” <EOL> <stubName> <separatorLine> <att>
+
<pre>
<stdTEXT> :== “STUB:” “(“ <definingVocabulary> | “OTHER”  ”)”
+
stub       :== stdText ”<CMET>” EOL stubName separatorLine <att>
<stubName> :== <stubAct> | <stubEntity> | <stubRole> | <stubOther>
+
stdTEXT   :== “STUB:” “(“ definingVocabulary | “OTHER”  ”)”
<stubAct> :== “A_”<upperCamelCase>
+
stubName   :== stubAct | stubEntity | stubRole | stubOther
<stubEntity> :== “E_”<upperCamelCase>
+
stubAct   :== “A_” upperCamelCase
<stubRole> :== “R_”<upperCamelCase>
+
stubEntity :== “E_” upperCamelCase
<stubbOther> :== “O_”<upperCamelCase>
+
stubRole   :== “R_” upperCamelCase  
<att> :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
+
stubbOther :== “O_” upperCamelCase
 +
att       :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
 +
</pre>
  
 
===Examples:===
 
===Examples:===

Revision as of 23:36, 2 August 2009

for RMIM attribute rendering

attribute            :== attName “: “ type “ “ cardinality defaultValue? hl7Metadata
attName              :== lowerCamelCase
type                 :== typeBase flavorExtension? ( “(“ typeArguments “)” )?
typeBase             :== ( ‘A’-‘Z’ )+
flavorExtension      :== ( “.” typeBase )+
typeArguments        :== <type> ( “,” <type> )*
defaultValue         :== “= “ anyText	<!-- Must prohibit the “{“ character 
hl7Metadata          :== “{“ mandatoryConf (vocabBinding | fixedValue | enumeration | allowedRange | lengthLimits)? 
                         updateMode? extensionOid? businessNames? “ }”

mandatoryConf        :== “ M”  <!-- isMandatory = true, required -->
                       | “ R”  <!-- isMandatory = false, required -->
                       | “ NP” <!-- isMandatory = false, not permitted -->
                       | “ I”  <!-- isMandatory = false, ignored -->
                       | “ U”  <!-- isMandatory = false, unspecified -->

vocabBinding         :== conceptDomainBinding | valueSetBinding | codeBinding
conceptDomainBinding :== “ <  CD: ” ( domainName | ( “x_” domainName ) )
domainName           :== upperCamelCase
valueSetBinding      :== valueSetFull 	<!-- used for all non-immutable codes -->
                       | valueSetShort	<!-- used for all immutable codes  -->

valueSetFull         :== “ < V:” ( valueSetName | oid ) valueSetVersion? strength anyText
valueSetShort        :== valueSetLT | valueSetLE
valueSetLT           :== “ < “ ( ‘A’-‘Z’ )+   <!-- all specializations of specified root   code -->
valueSetLE           :== “ <= “ ( ‘A’-‘Z’ )+  <!-- —specified root code and all specializations -->
valueSetName         :== upperCamelCase | ( “x_” upperCamelCase ) )
valueSetVersion      :== “#” ( ‘0’-‘9’ ){8} ( ( ‘0’-‘9’ ){6} )? <!-- date with optional time -->
strength             :== “ CWE” | “ CNE”
codeBinding          :== codeFull		<!-- used for all non-immutable codes -->
                       | codeShort		<!-- used for all immutable codes  -->

codeFull             :== “ < = C:” ( codeSystemName | oid ) “#” anyText
codeSystemName       :== upperCamelCase
codeShort            :== “ =” anyText
fixedValue           :== ‘ = “’ anyText ‘”’
enumeration          :== “ = [“ enumerationVals “]”
enumerationVals      :== ‘”’ anyText ‘”’ ( ‘, “’ anyText ‘”’ )*
allowedRange         :== “ = [“ number “..” number “]”
lengthLimits         :== “ Len=” ( fixedLength | lengthRange )
fixedLength          :== number
lengthRange          :== number “..” number
updateMode           :== “ {“ mode ( “: “ modeList )? “}”
modeList             :== mode | mode “,” modeList
mode                 :== 'A' | ‘AR’ | 'D' | ‘K’ | ‘N’ | ‘R’ | ‘REF’ | 'U'
extensionOid         :== “ EXT:” oid
businessNames        :== businessName (“ “ businessNames)?
businessName         :== “ (“ realm? anyText “)”	<!-- Must exclude “(“ -->
realm                :== (‘A’-‘Z’){2} “-“
oid                  :== “2” (“.” ( ‘0’-‘9’ )* )+
number               :== ( ‘0’-‘9’ )+
upperCamelCase       :== ( ‘A’-’Z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
lowerCamelCase       :== ( ‘a’-’z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
anyText              :== ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ )*

Examples:

moodCode: CS [1..1] { M <= INT }

code: CD [0..1] { R < CD: ActProcedureCode (CA-Procedure Type) }

code: CV [1..1] { M < = C:LN#123456 }

sequenceNumber: INT [1..1] { M =[1..10] }

addr: DSET(AD) [0..*] { R {A: A,AR,R,D} (Mailing addresses) }

RMIM Association rendering

association      :== cardinality hl7AssocMetadata EOL associationName
cardinality      :== “[” number “..” number “]”
hl7AssocMetadata :== “{“ mandatoryConf updateMode? “}”
associationName  :== lowerCamelCase

Examples:

[1..1] {M}

assignedPerson

[0..1] {R {A: A,AR,R,D}}

assignedPerson

CMET Rendering

cmet 	            :== “<CMET>” stdText  EOL cmetName EOL ” “ attribution EOLseparatorLine modelatt
stdTEXT             :== “CMET:” “(“ definingVocabulary ”)”
cmetName            :== cmetAct  |  cmetEntity  |  cmetRole  | cmetOther
cmetAct             :== “A_” upperCamelCase
cmetEntity          :== “E_” upperCamelCase 
cmetOther           :== “O_” upperCamelCase
cmetRole            :== “R_” upperCamelCase
attribution         :== “[” cmetAttributionKindanyText “]”
cmetAttributionKind :== anyText
model               :== “(” modelId “)”
att                 :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”

Examples:

         <CMET>

R_AssignedPerson universal classCode { < OBS }

STUB rendering

stub       :== stdText ”<CMET>” EOL stubName separatorLine <att>
stdTEXT    :== “STUB:” “(“ definingVocabulary | “OTHER”  ”)”
stubName   :== stubAct | stubEntity | stubRole | stubOther
stubAct    :== “A_” upperCamelCase
stubEntity :== “E_” upperCamelCase
stubRole   :== “R_” upperCamelCase 
stubbOther :== “O_” upperCamelCase
att        :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”

Examples:

 <STUB>

R_Payload classCode { < ROL }