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
(New page: == for RMIM attribute rendering == <attribute> :== <attName> “: “ <type> “ “ <cardinality> <defaultValue>? <hl7Metadata> <attName> :== <lowerCamelCase> <type> :== <typeBase> <flavo...)
 
 
(16 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== for RMIM attribute rendering ==
 
== for RMIM attribute rendering ==
<attribute> :== <attName> “: “ <type> “ “ <cardinality> <defaultValue>? <hl7Metadata>
+
<pre>
<attName> :== <lowerCamelCase>
+
attribute           ::= attName “: “ type “ “ cardinality defaultValue? hl7Metadata
<type> :== <typeBase> <flavorExtension>? ( “(“ <typeArguments> “)” )?
+
attName             ::= lowerCamelCase
<typeBase> :== ( ‘A’-‘Z’ )+
+
type                 ::= typeBase flavorExtension? ( “(“ typeArguments “)” )?
<flavorExtension> :== ( “.” <typeBase> )+
+
typeBase             ::= ( ‘A’-‘Z’ )+
<typeArguments> :== <type> ( “,” <type> )*
+
flavorExtension     ::= ( “.” typeBase )+
<defaultValue> :== “= “ <anyText> <!-- Must prohibit the “{“ character 
+
typeArguments       ::= type ( “,” type )*
<hl7Metadata> :== “{“ <mandatoryConf> (<vocabBinding> | <fixedValue> | <enumeration> | <allowedRange| <lengthLimits>)? <updateMode> ? <extensionOid> ? <businessNames>? “ }”
+
cardinality          ::= “[“ number ”..” numberOrStar “] “
<mandatoryConf> :== “ M” <!-- isMandatory = true, required -->
+
numberOrStar        ::= (number | "*")
  | “ R” <!-- isMandatory = false, required -->
+
defaultValue         ::= “= “ anyDefaultText
  | “ NP” <!-- isMandatory = false, not permitted -->
+
hl7Metadata         ::= “ { “ mandatoryConf (vocabBinding | fixedValue | enumeration | allowedRange | lengthLimits)?  
  | “ I” <!-- isMandatory = false, ignored -->
+
                        updateMode? extensionOid? businessNames? “ }”
  | “ U” <!-- isMandatory = false, unspecified -->
+
 
<vocabBinding> :== < conceptDomainBinding> | <valueSetBinding> | <codeBinding>
+
mandatoryConf       ::= “M” (* isMandatory = true, required *)
< conceptDomainBinding> :== “ < CD: ” ( <domainName> | ( “x_” <domainName> ) )
+
                      | “R” (* isMandatory = false, required *)
<domainName> :== <upperCamelCase>
+
                      | “NP” (* isMandatory = false, not permitted *)
<valueSetBinding> :== <valueSetFull> <!-- used for all non-immutable codes -->
+
                      | “I” (* isMandatory = false, ignored *)
  | <valueSetShort> <!-- used for all immutable codes  -->
+
                      | “U” (* isMandatory = false, unspecified *)
<valueSetFull> :== “ < V:” ( <valueSetName> | <oid> ) <valueSetVersion>? <strength> <anyText>
+
 
<valueSetShort> :== <valueSetLT> | <valueSetLE>
+
vocabBinding         ::= conceptDomainBinding | valueSetBinding | codeBinding
<valueSetLT> :== “ < “ ( ‘A’-‘Z’ )+  <!-- all specializations of specified root  code -->
+
conceptDomainBinding ::= “ < D:” ( domainName | ( “x_” domainName ) )
<valueSetLE> :== “ <= “ ( ‘A’-‘Z’ )+  <!-- —specified root code and all specializations -->
+
domainName           ::= upperCamelCase
<valueSetName> :== <upperCamelCase> | ( “x_” <upperCamelCase> ) )
+
valueSetBinding     ::= valueSetFull (* used for all non-immutable codes *)
<valueSetVersion> :== “#” ( ‘0’-‘9’ ){8} ( ( ‘0’-‘9’ ){6} )? <!-- date with optional time -->
+
                      | valueSetShort (* used for all immutable codes  *)
<strength> :== “ CWE” | “ CNE”
+
 
<codeBinding> :== <codeFull> <!-- used for all non-immutable codes -->
+
valueSetFull         ::= “ < V:” ( valueSetName | oid ) valueSetVersion? strength
  | <codeShort> <!-- used for all immutable codes  -->
+
valueSetShort       ::= valueSetLT | valueSetLE
<codeFull > :== “ < = C:” ( <codeSystemName> | <oid> ) “#” <anyText>
+
valueSetLT           ::= “ < “ ( ‘A’-‘Z’ )+  (* all specializations of specified root  code *)
<codeSystemName> :== <upperCamelCase>
+
valueSetLE           ::= “ <= “ ( ‘A’-‘Z’ )+  (* —specified root code and all specializations *)
<codeShort> :== “ =” <anyText>
+
valueSetName         ::= upperCamelCase | ( “x_” upperCamelCase ) )
<fixedValue> :== ‘ = “’ <anyText> ‘”’
+
valueSetVersion     ::= “#” ( ‘0’-‘9’ ){8} ( ( ‘0’-‘9’ ){6} )? (* date with optional time *)
<enumeration> :== “ = [“ <enumerationVals> “]”
+
strength             ::= “ CWE” | “ CNE”
<enumerationVals> :== ‘”’ <anyText> ‘”’ ( ‘, “’ <anyText> ‘”’ )*
+
codeBinding         ::= codeFull (* used for all non-immutable codes *)
<allowedRange> :== “ = [“ <number> “..” <number> “]”
+
                      | codeShort (* used for all immutable codes  *)
<lengthLimits> :== “ Len=” ( <fixedLength> | <lengthRange)
+
 
<fixedLength> :== <number>
+
codeFull             ::= “ = C:” ( codeSystemName | oid ) “#” anyText
<lengthRange> :== <number> “..” <number>
+
codeSystemName       ::= upperCamelCase
<updateMode> :== “ {“ <mode> ( “: “ <modeList> )? “}”
+
codeShort           ::= “ =” anyText
<modeList> :== <mode> | <mode> “,” <modeList>
+
fixedValue           ::= ‘ = “’ anyDefaultText ‘”’
<mode> ::= 'A' | ‘AR’ | 'D' | ‘K’ | ‘N’ | ‘R’ | ‘REF’ | 'U'
+
enumeration         ::= “ = [“ enumerationVals “]”
<extensionOid> :== “ EXT:” <oid>
+
enumerationVals     ::= ‘”’ anyText ‘”’ ( ‘, “’ anyText ‘”’ )*
<businessNames> :== <businessName> (“ “ <businessNames>)?
+
allowedRange         ::= “ = [“ number “..” number “]”
<businessName> :== “ (“ <realm>? <anyText> “)” <!-- Must exclude “(“ -->
+
lengthLimits         ::= “ Len=” ( fixedLength | lengthRange )
<realm> :== (‘A’-‘Z’){2} “-“
+
fixedLength         ::= number
<oid> :== “2” (“.” ( ‘0’-‘9’ )* )+
+
lengthRange         ::= number “..” number
<number> :== ( ‘0’-‘9’ )+
+
updateMode           ::= “ {“ mode ( “: “ modeList )? “}”
<upperCamelCase> :== ( ‘A’-’Z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
+
modeList             ::= mode | mode “,” modeList
<lowerCamelCase> :== ( ‘a’-’z’ )+ ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ )*
+
mode                 ::= 'A' | ‘AR’ | 'D' | ‘K’ | ‘N’ | ‘R’ | ‘REF’ | 'U'
<anyText> :== ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ )*
+
extensionOid         ::= “ EXT:” oid
 +
businessNames       ::= businessName (“ “ businessNames)?
 +
businessName         ::= “ (“ realm? anyText “)” (* Must exclude “(“ *)
 +
realm               ::= (‘A’-‘Z’){2} “-“
 +
oid                 ::= ('0'-'9')+ (“.” ( ‘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’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ | ':' | '/' | '.' )*
 +
anyDefaultText      ::= ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ | ':' | '/' | '.' | '{' | '}' | '[' | ']' | '(' | ')' | ';' | '@' | '+' )*
 +
                        (* Note: Some of the content in anyDefaultText will cause issues with determinism.  Applications will need to rely  *)
 +
                        (*       on the declared type and abstract datatype rules to perform more intelligent parsing.                      *)                 
 +
</pre>
  
 
===Examples: ===
 
===Examples: ===
 
moodCode: CS [1..1] { M <= INT }
 
moodCode: CS [1..1] { M <= INT }
 +
 
code: CD [0..1] { R <  CD: ActProcedureCode (CA-Procedure Type) }
 
code: CD [0..1] { R <  CD: ActProcedureCode (CA-Procedure Type) }
 +
 
code: CV [1..1] { M < =  C:LN#123456  }
 
code: CV [1..1] { M < =  C:LN#123456  }
 +
 
sequenceNumber: INT [1..1] { M =[1..10] }
 
sequenceNumber: INT [1..1] { M =[1..10] }
 +
 
addr: DSET(AD) [0..*] { R {A: A,AR,R,D} (Mailing addresses) }
 
addr: DSET(AD) [0..*] { R {A: A,AR,R,D} (Mailing addresses) }
  
 
== RMIM Association rendering ==
 
== RMIM Association rendering ==
<association> :== <cardinality> <hl7AssocMetadata> <EOL> <associationName>
+
<pre>
<cardinality>     :== “[”<number> “..” <number> “]”
+
association     ::= cardinality hl7AssocMetadata EOL associationName
<hl7AssocMetadata> :== “{“ <mandatoryConf> <updateMode>? “}”
+
hl7AssocMetadata ::= “{“ mandatoryConf (" " updateMode)? “}”
<associationName> :== <lowerCamelCase>
+
associationName ::= lowerCamelCase
 +
</pre>
  
 
===Examples:===
 
===Examples:===
[1..1] {M}
+
1..1 {M}<br/>
assignedPerson
+
assignedPerson
  
[0..1] {R {A: A,AR,R,D}}
+
 
assignedPerson
+
0..1 {R {A: A,AR,R,D}}<br/>
 +
assignedPerson
  
 
== CMET Rendering==
 
== CMET Rendering==
<cmet> :== “<CMET>”<stdText> <EOL> <cmetName> <EOL>” “ <attribution> <EOLseparatorLine> <modelatt>
+
<pre>
<stdTEXT> :== “CMET:” “(“ <definingVocabulary> ”)”
+
cmet               ::= “<CMET>” EOL cmetName ” “ attribution EOL separatorLine att?
<cmetName> :== <cmetAct> | <cmetEntity> | <cmetRole> | <cmetOther>
+
cmetName            ::= cmetAct | cmetEntity | cmetRole | cmetOther
<cmetAct> :== “A_”<upperCamelCase>
+
cmetAct             ::= “A_” upperCamelCase
<cmetEntity> :== “E_”<upperCamelCase>
+
cmetEntity         ::= “E_” upperCamelCase  
<cmetOther> :== “O_”<upperCamelCase>
+
cmetOther           ::= “O_” upperCamelCase
<cmetRole> :== “R_”<upperCamelCase>
+
cmetRole           ::= “R_” upperCamelCase
<attribution> :== “[” <cmetAttributionKindanyText> “]”
+
attribution         ::= “[” cmetAttributionKindanyText “]”
<cmetAttributionKind> :== <anyText >
+
cmetAttributionKind ::= anyText
<model> :== “(” <modelId> “)”
+
att                ::= “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
<att> :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
+
</pre>
  
 
===Examples:===
 
===Examples:===
          <CMET>
+
<CMET><br/>
 
R_AssignedPerson universal
 
R_AssignedPerson universal
 +
 +
--------------------
 +
 
classCode { < OBS }
 
classCode { < OBS }
  
 
== STUB rendering==
 
== STUB rendering==
<stub> :== <stdText>”<CMET>” <EOL> <stubName> <separatorLine> <att>
+
<pre>
<stdTEXT> :== “STUB:” “(“ <definingVocabulary> | “OTHER”  ”)”
+
stub       ::= ”<STUB>” EOL stubName separatorLine att?
<stubName> :== <stubAct> | <stubEntity> | <stubRole> | <stubOther>
+
stubName  ::= stubAct | stubEntity | stubRole | stubOther
<stubAct> :== “A_”<upperCamelCase>
+
stubAct   ::= “A_” upperCamelCase
<stubEntity> :== “E_”<upperCamelCase>
+
stubEntity ::= “E_” upperCamelCase
<stubRole> :== “R_”<upperCamelCase>
+
stubRole   ::= “R_” upperCamelCase  
<stubbOther> :== “O_”<upperCamelCase>
+
stubbOther ::= “O_” upperCamelCase
<att> :== “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
+
att       ::= “classCode { < ” ( ‘A’-‘Z’ )+ “ }”
 +
</pre>
  
 
===Examples:===
 
===Examples:===
  <STUB>
+
<STUB><br/>
 
R_Payload
 
R_Payload
 +
-------------------
 
classCode { < ROL }
 
classCode { < ROL }

Latest revision as of 22:39, 21 February 2011

for RMIM attribute rendering

attribute            ::= attName “: “ type “ “ cardinality defaultValue? hl7Metadata
attName              ::= lowerCamelCase
type                 ::= typeBase flavorExtension? ( “(“ typeArguments “)” )?
typeBase             ::= ( ‘A’-‘Z’ )+
flavorExtension      ::= ( “.” typeBase )+
typeArguments        ::= type ( “,” type )*
cardinality          ::= “[“ number ”..” numberOrStar “] “
numberOrStar         ::= (number | "*")
defaultValue         ::= “= “ anyDefaultText
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 ::= “ < D:” ( 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
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           ::= ‘ = “’ anyDefaultText ‘”’
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                  ::= ('0'-'9')+ (“.” ( ‘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’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ | ':' | '/' | '.' )*
anyDefaultText       ::= ( ‘a’-‘z’ | ’A’-‘Z’ | ‘0’-‘9’ | ‘ ‘ | ‘-‘ | ‘_’ | ‘#’ | ‘&’ | ':' | '/' | '.' | '{' | '}' | '[' | ']' | '(' | ')' | ';' | '@' | '+' )*
                         (* Note: Some of the content in anyDefaultText will cause issues with determinism.  Applications will need to rely  *)
                         (*       on the declared type and abstract datatype rules to perform more intelligent parsing.                      *)                  

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
hl7AssocMetadata ::= “{“ mandatoryConf (" " updateMode)? “}”
associationName  ::= lowerCamelCase

Examples:

1..1 {M}
assignedPerson


0..1 {R {A: A,AR,R,D}}
assignedPerson

CMET Rendering

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

Examples:

<CMET>
R_AssignedPerson universal


classCode { < OBS }

STUB rendering

stub       ::= ”<STUB>” EOL stubName separatorLine att?
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 }