4 | Inclusive { value : Double }
\r
5 | Exclusive { value : Double }
\r
6 | InclusiveLong { value : Long }
\r
7 | ExclusiveLong { value : Long }
\r
9 type Range = { lower : Limit, upper : Limit }
\r
11 type Component = { name : String, type : DataType }
\r
12 type DataTypeDefinition = { name : String, type : DataType }
\r
16 | ByteType { unit : Optional(String), range : Optional(Range) }
\r
17 | IntegerType { unit : Optional(String), range : Optional(Range) }
\r
18 | LongType { unit : Optional(String), range : Optional(Range) }
\r
19 | FloatType { unit : Optional(String), range : Optional(Range) }
\r
20 | DoubleType { unit : Optional(String), range : Optional(Range) }
\r
21 | StringType { pattern : Optional(String), mimeType : Optional(String), length : Optional(String) }
\r
22 | RecordType referable { referable : Boolean, components : Component[] }
\r
23 | ArrayType { componentType : DataType, length : Optional(Range) }
\r
24 | MapType { keyType : DataType, valueType : DataType }
\r
25 | OptionalType { componentType : DataType }
\r
26 | UnionType UnionType
\r
29 type UnionType = { components : Component[] }
\r
31 type UUID = { mostSigBits : Long, leastSigBits : Long }
\r
34 type LocalizedText = Map(String, String)
\r
37 methodDefinitions : Map(MethodTypeDefinition, {})
\r
39 type InterfaceDefinition = {
\r
44 requestType : DataType,
\r
45 responseType : DataType,
\r
46 errorType : UnionType
\r
48 type MethodTypeDefinition = {
\r
54 type Handshake = | Version0
\r
56 recvMsgLimit : Integer,
\r
57 sendMsgLimit : Integer,
\r
58 methods : MethodTypeDefinition[]
\r
60 type Message = | RequestHeader RequestHeader
\r
61 | ResponseHeader ResponseHeader
\r
62 | ExecutionError_ ExecutionError_
\r
63 | Exception_ Exception_
\r
64 | InvalidMethodError InvalidMethodError
\r
65 | ResponseTooLarge ResponseTooLarge
\r
66 type RequestHeader = {
\r
67 requestId : Integer,
\r
70 type ResponseHeader = {
\r
73 type ExecutionError_ = {
\r
76 type InvalidMethodError = {
\r
80 requestId : Integer,
\r
83 type ResponseTooLarge = {
\r
84 requestId : Integer
\r
87 type AccessorReference = | ArrayIndexReference { childReference : Optional(AccessorReference), index : Integer }
\r
88 | KeyReference { childReference : Optional(AccessorReference), key : Variant }
\r
89 | OptionalValueReference { childReference : Optional(AccessorReference) }
\r
90 | FieldIndexReference { childReference : Optional(AccessorReference), index : Integer }
\r
91 | FieldNameReference { childReference : Optional(AccessorReference), fieldName : String }
\r
92 | TagReference { childReference : Optional(AccessorReference) }
\r
93 | TagIndexReference { childReference : Optional(AccessorReference), tag : Integer }
\r
94 | TagNameReference { childReference : Optional(AccessorReference), tag : String }
\r
95 | VariantValueReference { childReference : Optional(AccessorReference) }
\r
96 | LabelReference { childReference : Optional(AccessorReference), label : String }
\r
98 type Event = | ArrayElementAdded { reference : Optional( AccessorReference ), index : Integer, value : Optional( Variant ) }
\r
99 | ArrayElementRemoved { reference : Optional( AccessorReference ), index : Integer }
\r
100 | MapEntryAdded { reference : Optional( AccessorReference ), key : Variant, value : Optional( Variant ) }
\r
101 | MapEntryRemoved { reference : Optional( AccessorReference ), key : Variant }
\r
102 | UnionValueAssigned { reference : Optional( AccessorReference ), tag : Integer, newValue : Optional( Variant ) }
\r
103 | OptionalValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }
\r
104 | OptionalValueRemoved { reference : Optional( AccessorReference ) }
\r
105 | ValueAssigned { reference : Optional( AccessorReference ), newValue : Optional( Variant ) }
\r
106 | InvalidatedEvent { reference : Optional( AccessorReference ) }
\r
108 type ChangeSet = { events : Event[] }
\r
110 type InterestSet = | BooleanInterestSet { notification : Boolean, value : Boolean }
\r
111 | ByteInterestSet { notification : Boolean, value : Boolean }
\r
112 | IntegerInterestSet { notification : Boolean, value : Boolean }
\r
113 | LongInterestSet { notification : Boolean, value : Boolean }
\r
114 | FloatInterestSet { notification : Boolean, value : Boolean }
\r
115 | DoubleInterestSet { notification : Boolean, value : Boolean }
\r
116 | StringInterestSet { notification : Boolean, value : Boolean }
\r
117 | RecordInterestSet { notification : Boolean, notifications : Boolean[], value : Boolean, values : Boolean[] }
\r
118 | ArrayInterestSet { notification : Boolean, notifications : Integer[], value : Boolean, values : Integer[] }
\r
119 | MapInterestSet { notification : Boolean, notifications : Variant[], value : Boolean, values : Variant[], componentInterest : InterestSet, componentInterests : Map( Variant, InterestSet ) }
\r
120 | OptionalInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet }
\r
121 | UnionInterestSet { notification : Boolean, value : Boolean, componentInterests : InterestSet[] }
\r
122 | VariantInterestSet { notification : Boolean, value : Boolean, componentInterest : InterestSet, completeComponent : Boolean }
\r
124 type Datasource = {
\r
125 nodes : Map(Variant, Node)
\r
129 labels : LocalizedText,
\r
130 children : Variant[],
\r
131 value : Optional(Variant)
\r
136 nanoSeconds : Integer(range=[0..999999999])
\r
141 nanoSeconds : Integer(range=[0..999999999])
\r
144 type LocalDate = {
\r
146 monthOfYear : Integer(range=[1..12]),
\r
147 dayOfMonth : Integer(range=[1..31])
\r
150 type LocalTime = {
\r
151 hourOfDay : Integer(range=[0..23]),
\r
152 minuteOfHour : Integer(range=[0..59]),
\r
153 secondOfMinute : Integer(range=[0..59]),
\r
154 nanoOfSecond : Integer(range=[0..999999999])
\r
157 type LocalDateTime = {
\r
159 monthOfYear : Integer(range=[1..12]),
\r
160 dayOfMonth : Integer(range=[1..31]),
\r
161 hourOfDay : Integer(range=[0..23]),
\r
162 minuteOfHour : Integer(range=[0..59]),
\r
163 secondOfMinute : Integer(range=[0..59]),
\r
164 nanoOfSecond : Integer(range=[0..999999999])
\r
167 type ZonedDateTime = {
\r
173 type TimeZone = { zoneId : String }
\r
175 // A result of a data capturing session
\r
176 type RecordingSession = {
\r
177 // An optional Datasource URL
\r
178 datasource : Optional( String ),
\r
180 // Events that occured in the data source during sampling, a map of Event Id to Event
\r
181 events: Map( Integer, Event ),
\r
183 // A collection of events that are promoted to milestones, a map of Milestone Id to Event Id
\r
184 milestones : Map( Integer, Integer ),
\r
186 // All records, a map of NodeId to Recording(T, V)
\r
187 recordings : Map( Variant, Variant )
\r
190 type SubscriptionParameters = {
\r
192 deadband : Optional( Variant ),
\r
193 interval : Optional( Variant )
\r
196 type SamplingConfiguration = {
\r
197 // Capture events, if true events are captured
\r
198 captureEvents : Boolean,
\r
199 // Subscribed Variables
\r
200 subscriptions : SubscriptionParameters[]
\r
204 // Session unique identifier
\r
207 // Timevalue, a number type e.g. Double(unit="s"), or a date type (See #Time_Types)
\r
211 title : Optional(String),
\r
216 // NodeId of the sender object, optional
\r
217 source : Optional(Variant),
\r
219 // Event Type: alarm, action, error, info, debug
\r
222 // System Text, generated by the source system, eg.
\94YD11D001 started
\94\r
223 systemText : Optional(String),
\r
226 comments : Comment[],
\r
229 metadata : Map(String, String)
\r
233 user : Optional(String),
\r