2011-03-10

Meta for Message

Meta-Meta for Message

When you define the structure and constraint of message, in other word, meta for and message instance. It is convenient if there is meta-meta (meta for meta).

message-meta.rnc : meta-meta for message

grammer{
start = element message-meta {
 element name { xsd:string },
 element id { xsd:string },
 element version { xsd:string },
 element date { xsd:string },
 element owner { xsd:string },
 description-element*,
 format-element,
 header-element*,
 element input-data { data-content },
 element output-data { data-content },
 element input-output-data { data-content }?
}

format-element = element format{
 element type = { string : "fixed-width-plain-text" |
                  string : "delimiter-separated-plain-text" |
                  string : "key-value-paired-plain-text" |
                  string : "xml" |
                  string : "json" 
                 },
 element text-encoding { xsd:string },
 element endianness { string "big-endian" | string "little-endian" },
 element item-align-default { text },
 element item-padding-char-default { text },
 element compression { text },
 element encryption { text }
}               

header-element = element header{
 attribute name = { xsd:string },
 attribute scope-type = { string "global" | string "local" },
 attribute scope-name = { xsd:string },
 item-element*
}

data-content =
 linear-data-element* &
 square-data-element*

linear-data-element = element linear-data{
 attribute name = { xsd:string },
 attribute meaning = { text }?,
 description-element*,
 item*
}

square-data-element = element square-element{
 attribute name = { xsd:string },
 attribute meaning = { text }?,
 attribute has-fixed-rows = { xsd:boolean },
 attribute rows = { xsd:nonNegativeInteger },
 description-element*,
 item*
} 

item-element = element item{
 element name = { xsd:string },
 element meaning = { xsd:string },
 description-element*,
 element is-required = { xsd:boolean },
 datatype-element,
 value-constraints-content,
 element encoding-type = { string "text" | string "binary" },
 element item-length = { xsd:positiveInteger }?,
 element needs-encryption = { xsd:boolean }?,
 element encryption-type = { text }?,
 element align = { text }?,
 element padding-char = { text }?,
}

datatype-element = element datatype{
 string "string" |
 string "int16" | # 2-byte integer
 string "int32" | # 4-byte integer
 string "int64" | # 8-byte integer
 string "decimal32" | # 4-byte floating point type
 string "decimal64" | # 8-byte floating point type
 string "decimal" | # decimal number without restriction on precision and scale
 string "binary"
 # need to review the built-in data types of XML Schema
}

value-constraints-content = 
 element value-enums = { text }?,
 element value-min-length = { xsd:nonNegativeInteger }?,
 element value-max-length = { xsd:nonNegativeInteger }?,
 element value-max-inclusive = { text }?,
 element value-max-exclusive = { text }?,
 element value-min-inclusive = { text }?,
 element value-min-exclusive = { text }?,
 element value-pattern = { text }
}

description-element = element description{
 attribute locale = { xsd:string },
 text
} 

Message Parser/Builder Framework Using Message Meta

Architecture

No comments:

Post a Comment