wiseml-ruby 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module WiseML
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -9,7 +9,7 @@ module WiseML
9
9
  xml_accessor :name
10
10
  xml_accessor :datatype
11
11
  xml_accessor :unit
12
- xml_accessor :defaultValue
12
+ xml_accessor :default
13
13
  xml_accessor :nodes, :as => [Node]
14
14
  xml_accessor :links, :as => [Link]
15
15
  xml_accessor :description
@@ -6,12 +6,12 @@ module WiseML
6
6
  # properties of a node. Setters and getters are implicitly defined
7
7
  # trough the accesors
8
8
 
9
- xml_accessor :id, :as => Integer
10
- xml_accessor :capabilities, :as => [Capability]
9
+ xml_accessor :id, :from => "@id"
11
10
  xml_accessor :position, :as => Position
11
+ xml_accessor :gateway
12
12
  xml_accessor :nodeType
13
13
  xml_accessor :description
14
- xml_accessor :gateway
14
+ xml_accessor :capabilities, :as => [Capability]
15
15
  xml_accessor :programDetails
16
16
  xml_accessor :data, :as => [Data]
17
17
  xml_accessor :message, :as => Trace::Message
@@ -6,12 +6,12 @@ module WiseML
6
6
  # properties of a setup. Setters and getters are implicitly defined
7
7
  # trough the accesors
8
8
 
9
- xml_accessor :id
9
+ xml_accessor :id, :as => Integer
10
10
  xml_accessor :origin, :as => Origin
11
11
  xml_accessor :timeinfo, :as => TimeInfo
12
12
  xml_accessor :interpolation
13
- xml_accessor :description
14
13
  xml_accessor :coordinateType
14
+ xml_accessor :description
15
15
  xml_accessor :defaults, :as => Defaults
16
16
  xml_accessor :nodes, :as => [Node]
17
17
  xml_accessor :link, :as => [Link]
@@ -7,7 +7,7 @@ module WiseML
7
7
  # trough the accesors
8
8
 
9
9
  xml_accessor :timestamp
10
- xml_accessor :id
10
+ xml_accessor :id, :from => "@id"
11
11
  xml_accessor :data
12
12
 
13
13
  end
@@ -6,7 +6,7 @@ module WiseML
6
6
  # properties of a Trace. Setters and getters are implicitly defined
7
7
  # trough the accesors
8
8
 
9
- xml_accessor :id
9
+ xml_accessor :id, :as => Integer
10
10
  xml_accessor :timestamp, :as => [Scenario::Timestamp]
11
11
  xml_accessor :children
12
12
 
@@ -7,11 +7,27 @@ module WiseML
7
7
 
8
8
  include ROXML
9
9
 
10
- xml_accessor :version
11
- xml_accessor :xmlns
10
+ NAMESPACE = "http://wisebed.eu/ns/wiseml/1.0"
11
+
12
+ xml_accessor :version, :from => "@version"
12
13
  xml_accessor :setup, :as => Setup::Setup
13
14
  xml_accessor :scenario, :as => Scenario::Scenario
14
15
  xml_accessor :trace, :as => Trace::Trace
16
+
17
+ def to_xmldoc
18
+ doc = Nokogiri::XML::Document.new
19
+ doc.root = self.to_xml
20
+ doc.root.add_namespace_definition(nil, NAMESPACE)
21
+ doc
22
+ end
23
+
24
+ def write_to(string_or_io)
25
+ to_xmldoc.write_to(string_or_io, :encoding => 'UTF-8')
26
+ end
27
+
28
+ def to_s
29
+ to_xmldoc.root.to_s
30
+ end
15
31
 
16
32
  end
17
33
  end
@@ -1,6 +1,6 @@
1
1
  require "test/unit"
2
2
 
3
- require File.dirname(__FILE__) + '/../lib/wise_ml.rb'
3
+ require File.dirname(__FILE__) + '/../lib/wiseml.rb'
4
4
 
5
5
  class TestXml < Test::Unit::TestCase
6
6
 
@@ -22,12 +22,16 @@ class TestXml < Test::Unit::TestCase
22
22
  end
23
23
 
24
24
  def test_write_to_xml
25
- # xsd file seems outdated and is itself invalid...
26
- #xsd = Nokogiri::XML::Schema("wiseml.model.xsd")
27
25
 
28
- doc = Nokogiri::XML::Document.new
29
- doc.root = @wisexml.to_xml
26
+ # writes the xml document to a file
27
+ @wisexml.write_to(File.open("out.xml","w"))
30
28
 
29
+ # and read both schema and document to validate
30
+ xsd = Nokogiri::XML::Schema(File.read("wiseml.xsd"))
31
+ doc = Nokogiri::XML(File.read("out.xml"))
32
+
33
+ # empty as in not a single error -> validates
34
+ assert(xsd.validate(doc).empty?)
31
35
  end
32
36
 
33
37
  end
@@ -0,0 +1,306 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ W3C XML schema for WiseML, version 1.0
4
+
5
+ NOTE: This W3C XML schema is converted from the RELAX NG schema.
6
+ It is unsupported and unmaintained.
7
+
8
+ Created by Martin Bor (m.c.bor@tudelt.nl) on 2010-03-16.
9
+ Copyright 2010 TU Delft. All rights reserved.
10
+ -->
11
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
12
+ targetNamespace="http://wisebed.eu/ns/wiseml/1.0" xmlns:wiseml="http://wisebed.eu/ns/wiseml/1.0">
13
+ <!-- ROOT -->
14
+ <xs:element name="wiseml">
15
+ <xs:complexType>
16
+ <xs:sequence>
17
+ <xs:element ref="wiseml:setup" />
18
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:scenario" />
19
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:trace" />
20
+ </xs:sequence>
21
+ <xs:attribute name="version" use="required">
22
+ <xs:simpleType>
23
+ <xs:restriction base="xs:token">
24
+ <xs:enumeration value="1.0" />
25
+ </xs:restriction>
26
+ </xs:simpleType>
27
+ </xs:attribute>
28
+ </xs:complexType>
29
+ </xs:element>
30
+ <!-- SETUP -->
31
+ <xs:element name="setup">
32
+ <xs:complexType>
33
+ <xs:sequence>
34
+ <xs:group minOccurs="0" ref="wiseml:setup.properties" />
35
+ <xs:element minOccurs="0" ref="wiseml:defaults" />
36
+ <xs:group maxOccurs="unbounded" ref="wiseml:node" />
37
+ <xs:group minOccurs="0" maxOccurs="unbounded" ref="wiseml:link" />
38
+ </xs:sequence>
39
+ </xs:complexType>
40
+ </xs:element>
41
+ <xs:group name="setup.properties">
42
+ <xs:sequence>
43
+ <xs:element minOccurs="0" ref="wiseml:origin" />
44
+ <xs:element minOccurs="0" ref="wiseml:timeinfo" />
45
+ <xs:element minOccurs="0" ref="wiseml:interpolation" />
46
+ <xs:element minOccurs="0" ref="wiseml:coordinateType" />
47
+ <xs:element minOccurs="0" ref="wiseml:description" />
48
+ </xs:sequence>
49
+ </xs:group>
50
+ <xs:element name="origin" type="wiseml:coordinate" />
51
+ <xs:element name="timeinfo" type="wiseml:timeinfo" />
52
+ <xs:element name="interpolation" type="wiseml:interpolation" />
53
+ <xs:element name="coordinateType" type="xs:string" />
54
+ <xs:element name="description" type="xs:string" />
55
+ <xs:complexType name="timeinfo">
56
+ <xs:sequence>
57
+ <xs:element ref="wiseml:start" />
58
+ <xs:choice>
59
+ <xs:element ref="wiseml:end" />
60
+ <xs:element ref="wiseml:duration" />
61
+ </xs:choice>
62
+ <xs:element ref="wiseml:unit" />
63
+ </xs:sequence>
64
+ </xs:complexType>
65
+ <xs:element name="start" type="xs:dateTime" />
66
+ <xs:element name="end" type="xs:dateTime" />
67
+ <xs:element name="duration" type="xs:string" />
68
+ <xs:element name="unit" type="xs:string" />
69
+ <!-- DEFAULTS -->
70
+ <xs:element name="defaults">
71
+ <xs:complexType>
72
+ <xs:sequence>
73
+ <xs:element minOccurs="0" name="node" type="wiseml:node.properties" />
74
+ <xs:element minOccurs="0" name="link" type="wiseml:link.properties" />
75
+ </xs:sequence>
76
+ </xs:complexType>
77
+ </xs:element>
78
+ <!-- NODE -->
79
+ <xs:group name="node">
80
+ <xs:sequence>
81
+ <xs:element name="node">
82
+ <xs:complexType>
83
+ <xs:complexContent>
84
+ <xs:extension base="wiseml:node.properties">
85
+ <xs:attribute name="id" use="required" />
86
+ </xs:extension>
87
+ </xs:complexContent>
88
+ </xs:complexType>
89
+ </xs:element>
90
+ </xs:sequence>
91
+ </xs:group>
92
+ <xs:complexType name="node.properties">
93
+ <xs:sequence>
94
+ <xs:element minOccurs="0" ref="wiseml:position" />
95
+ <xs:element minOccurs="0" ref="wiseml:gateway" />
96
+ <xs:element minOccurs="0" ref="wiseml:programDetails" />
97
+ <xs:element minOccurs="0" ref="wiseml:nodeType" />
98
+ <xs:element minOccurs="0" ref="wiseml:description" />
99
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:capability" />
100
+ </xs:sequence>
101
+ </xs:complexType>
102
+ <xs:element name="position" type="wiseml:coordinate" />
103
+ <xs:element name="gateway" type="xs:boolean" />
104
+ <xs:element name="programDetails" type="xs:string" />
105
+ <xs:element name="nodeType" type="xs:string" />
106
+ <!-- LINK -->
107
+ <xs:group name="link">
108
+ <xs:sequence>
109
+ <xs:element name="link">
110
+ <xs:complexType>
111
+ <xs:complexContent>
112
+ <xs:extension base="wiseml:link.properties">
113
+ <xs:attribute name="source" use="required" />
114
+ <xs:attribute name="target" use="required" />
115
+ </xs:extension>
116
+ </xs:complexContent>
117
+ </xs:complexType>
118
+ </xs:element>
119
+ </xs:sequence>
120
+ </xs:group>
121
+ <xs:complexType name="link.properties">
122
+ <xs:sequence>
123
+ <xs:element minOccurs="0" ref="wiseml:encrypted" />
124
+ <xs:element minOccurs="0" ref="wiseml:virtual" />
125
+ <xs:element minOccurs="0" ref="wiseml:rssi" />
126
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:capability" />
127
+ </xs:sequence>
128
+ </xs:complexType>
129
+ <xs:element name="encrypted" type="xs:boolean" />
130
+ <xs:element name="virtual" type="xs:boolean" />
131
+ <xs:element name="rssi">
132
+ <xs:complexType>
133
+ <xs:attribute name="datatype" use="required" type="wiseml:dtypes" />
134
+ <xs:attribute name="unit" use="required" type="wiseml:units" />
135
+ <xs:attribute name="default" use="required" />
136
+ </xs:complexType>
137
+ </xs:element>
138
+ <!-- SETUP COMMON ELEMENTS -->
139
+ <xs:element name="capability">
140
+ <xs:complexType>
141
+ <xs:sequence>
142
+ <xs:element ref="wiseml:name" />
143
+ <xs:element ref="wiseml:datatype" />
144
+ <xs:element name="unit" type="wiseml:units" />
145
+ <xs:element ref="wiseml:default" />
146
+ </xs:sequence>
147
+ </xs:complexType>
148
+ </xs:element>
149
+ <xs:element name="name" type="xs:string" />
150
+ <xs:element name="datatype" type="wiseml:dtypes" />
151
+ <xs:element name="default" type="xs:string" />
152
+ <!-- SCENARIO -->
153
+ <xs:element name="scenario">
154
+ <xs:complexType>
155
+ <xs:group maxOccurs="unbounded" ref="wiseml:scenario.item" />
156
+ <xs:attribute name="id" use="required" />
157
+ </xs:complexType>
158
+ </xs:element>
159
+ <xs:group name="scenario.item">
160
+ <xs:sequence>
161
+ <xs:element ref="wiseml:timestamp" />
162
+ <xs:choice maxOccurs="unbounded">
163
+ <xs:element ref="wiseml:enableNode" />
164
+ <xs:element ref="wiseml:disableNode" />
165
+ <xs:element ref="wiseml:enableLink" />
166
+ <xs:element ref="wiseml:disableLink" />
167
+ <xs:group ref="wiseml:node.scenario" />
168
+ </xs:choice>
169
+ </xs:sequence>
170
+ </xs:group>
171
+ <xs:element name="enableNode">
172
+ <xs:complexType>
173
+ <xs:attribute name="id" use="required" />
174
+ </xs:complexType>
175
+ </xs:element>
176
+ <xs:element name="disableNode">
177
+ <xs:complexType>
178
+ <xs:attribute name="id" use="required" />
179
+ </xs:complexType>
180
+ </xs:element>
181
+ <xs:element name="enableLink">
182
+ <xs:complexType>
183
+ <xs:attribute name="source" use="required" />
184
+ <xs:attribute name="target" use="required" />
185
+ </xs:complexType>
186
+ </xs:element>
187
+ <xs:element name="disableLink">
188
+ <xs:complexType>
189
+ <xs:attribute name="source" use="required" />
190
+ <xs:attribute name="target" use="required" />
191
+ </xs:complexType>
192
+ </xs:element>
193
+ <xs:group name="node.scenario">
194
+ <xs:sequence>
195
+ <xs:element name="node">
196
+ <xs:complexType>
197
+ <xs:sequence maxOccurs="unbounded">
198
+ <xs:element minOccurs="0" ref="wiseml:position" />
199
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:data" />
200
+ </xs:sequence>
201
+ <xs:attribute name="id" use="required" />
202
+ </xs:complexType>
203
+ </xs:element>
204
+ </xs:sequence>
205
+ </xs:group>
206
+ <xs:element name="data">
207
+ <xs:complexType mixed="true">
208
+ <xs:attribute name="key" use="required" />
209
+ </xs:complexType>
210
+ </xs:element>
211
+ <!-- TRACE -->
212
+ <xs:element name="trace">
213
+ <xs:complexType>
214
+ <xs:group maxOccurs="unbounded" ref="wiseml:trace.item" />
215
+ <xs:attribute name="id" use="required" />
216
+ </xs:complexType>
217
+ </xs:element>
218
+ <xs:group name="trace.item">
219
+ <xs:sequence>
220
+ <xs:element ref="wiseml:timestamp" />
221
+ <xs:choice maxOccurs="unbounded">
222
+ <xs:group ref="wiseml:node.traceitem" />
223
+ <xs:group ref="wiseml:link.traceitem" />
224
+ </xs:choice>
225
+ </xs:sequence>
226
+ </xs:group>
227
+ <xs:element name="timestamp" type="xs:string" />
228
+ <xs:group name="node.traceitem">
229
+ <xs:sequence>
230
+ <xs:element name="node">
231
+ <xs:complexType>
232
+ <xs:sequence>
233
+ <xs:element minOccurs="0" ref="wiseml:position" />
234
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:data" />
235
+ </xs:sequence>
236
+ <xs:attribute name="id" use="required" />
237
+ </xs:complexType>
238
+ </xs:element>
239
+ </xs:sequence>
240
+ </xs:group>
241
+ <xs:group name="link.traceitem">
242
+ <xs:sequence>
243
+ <xs:element name="link">
244
+ <xs:complexType>
245
+ <xs:sequence>
246
+ <xs:element minOccurs="0" name="rssi" type="xs:string" />
247
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="wiseml:data" />
248
+ </xs:sequence>
249
+ <xs:attribute name="source" use="required" />
250
+ <xs:attribute name="target" use="required" />
251
+ </xs:complexType>
252
+ </xs:element>
253
+ </xs:sequence>
254
+ </xs:group>
255
+ <!-- DATA TYPES -->
256
+ <xs:simpleType name="dtypes">
257
+ <xs:restriction base="xs:token">
258
+ <xs:enumeration value="decimal" />
259
+ <xs:enumeration value="integer" />
260
+ </xs:restriction>
261
+ </xs:simpleType>
262
+ <xs:simpleType name="units">
263
+ <xs:restriction base="xs:token">
264
+ <xs:enumeration value="meters" />
265
+ <xs:enumeration value="centimeters" />
266
+ <xs:enumeration value="radians" />
267
+ <xs:enumeration value="degrees" />
268
+ <xs:enumeration value="seconds" />
269
+ <xs:enumeration value="milliseconds" />
270
+ <xs:enumeration value="dBm" />
271
+ <xs:enumeration value="kelvin" />
272
+ <xs:enumeration value="percentage" />
273
+ <xs:enumeration value="lux" />
274
+ <xs:enumeration value="raw" />
275
+ </xs:restriction>
276
+ </xs:simpleType>
277
+ <xs:simpleType name="interpolation">
278
+ <xs:restriction base="xs:token">
279
+ <xs:enumeration value="none" />
280
+ <xs:enumeration value="linear" />
281
+ <xs:enumeration value="polynomial" />
282
+ <xs:enumeration value="cubic" />
283
+ <xs:enumeration value="spline" />
284
+ </xs:restriction>
285
+ </xs:simpleType>
286
+ <xs:attributeGroup name="unit">
287
+ <xs:attribute name="unit" use="required" type="wiseml:units" />
288
+ </xs:attributeGroup>
289
+ <xs:attributeGroup name="dtype">
290
+ <xs:attribute name="datatype" use="required" type="wiseml:dtypes" />
291
+ </xs:attributeGroup>
292
+ <xs:complexType name="coordinate">
293
+ <xs:sequence>
294
+ <xs:element ref="wiseml:x" />
295
+ <xs:element ref="wiseml:y" />
296
+ <xs:element minOccurs="0" ref="wiseml:z" />
297
+ <xs:element minOccurs="0" ref="wiseml:phi" />
298
+ <xs:element minOccurs="0" ref="wiseml:theta" />
299
+ </xs:sequence>
300
+ </xs:complexType>
301
+ <xs:element name="x" type="xs:double" />
302
+ <xs:element name="y" type="xs:double" />
303
+ <xs:element name="z" type="xs:double" />
304
+ <xs:element name="phi" type="xs:double" />
305
+ <xs:element name="theta" type="xs:double" />
306
+ </xs:schema>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wiseml-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-01 00:00:00.000000000 Z
12
+ date: 2012-06-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -89,7 +89,7 @@ files:
89
89
  - test/test_xml.rb
90
90
  - test/wisebed_uzl_demo.json
91
91
  - test/wisebed_uzl_demo.xml
92
- - test/wiseml.model.xsd
92
+ - test/wiseml.xsd
93
93
  - wiseml-ruby.gemspec
94
94
  homepage: ''
95
95
  licenses: []
@@ -119,4 +119,4 @@ test_files:
119
119
  - test/test_xml.rb
120
120
  - test/wisebed_uzl_demo.json
121
121
  - test/wisebed_uzl_demo.xml
122
- - test/wiseml.model.xsd
122
+ - test/wiseml.xsd
@@ -1,89 +0,0 @@
1
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://wiseml.model" xmlns:ns1="http://wiseml.model/setup" elementFormDefault="qualified" targetNamespace="http://wiseml.model">
2
- <xs:import namespace="http://wiseml.model/setup" schemaLocation="setup.xsd"/>
3
- <xs:element type="tns:wiseml" name="wiseml"/>
4
- <xs:complexType name="wiseml">
5
- <xs:sequence>
6
- <xs:element name="setup" minOccurs="0">
7
- <xs:complexType>
8
- <xs:sequence>
9
- <xs:element name="node" minOccurs="0" maxOccurs="unbounded">
10
- <xs:complexType>
11
- <xs:sequence>
12
- <xs:element type="xs:string" name="id" minOccurs="0"/>
13
- <xs:element type="ns1:capability" name="capability" minOccurs="0" maxOccurs="unbounded"/>
14
- <xs:element name="position" minOccurs="0">
15
- <xs:complexType>
16
- <xs:sequence/>
17
- <xs:attribute type="xs:float" use="required" name="x"/>
18
- <xs:attribute type="xs:float" use="required" name="y"/>
19
- <xs:attribute type="xs:float" use="required" name="z"/>
20
- <xs:attribute type="xs:int" use="required" name="phi"/>
21
- <xs:attribute type="xs:int" use="required" name="theta"/>
22
- </xs:complexType>
23
- </xs:element>
24
- <xs:element type="xs:string" name="nodeType" minOccurs="0"/>
25
- <xs:element type="xs:string" name="description" minOccurs="0"/>
26
- <xs:element type="xs:string" name="programDetails" minOccurs="0"/>
27
- </xs:sequence>
28
- <xs:attribute type="xs:int" use="required" name="gateway"/>
29
- </xs:complexType>
30
- </xs:element>
31
- <xs:element name="origin" minOccurs="0">
32
- <xs:complexType>
33
- <xs:sequence/>
34
- <xs:attribute type="xs:float" use="required" name="x"/>
35
- <xs:attribute type="xs:float" use="required" name="y"/>
36
- <xs:attribute type="xs:float" use="required" name="z"/>
37
- <xs:attribute type="xs:int" use="required" name="phi"/>
38
- <xs:attribute type="xs:int" use="required" name="theta"/>
39
- </xs:complexType>
40
- </xs:element>
41
- <xs:element name="timeinfo" minOccurs="0">
42
- <xs:complexType>
43
- <xs:sequence>
44
- <xs:element type="xs:string" name="unit" minOccurs="0"/>
45
- </xs:sequence>
46
- <xs:attribute type="xs:dateTime" name="start"/>
47
- <xs:attribute type="xs:dateTime" name="end"/>
48
- <xs:attribute type="xs:int" use="required" name="duration"/>
49
- </xs:complexType>
50
- </xs:element>
51
- <xs:element type="xs:string" name="interpolation" minOccurs="0"/>
52
- <xs:element type="xs:string" name="description" minOccurs="0"/>
53
- <xs:element name="link" minOccurs="0" maxOccurs="unbounded">
54
- <xs:complexType>
55
- <xs:sequence>
56
- <xs:element type="xs:string" name="source" minOccurs="0"/>
57
- <xs:element type="xs:string" name="target" minOccurs="0"/>
58
- <xs:element type="ns1:capability" name="capability" minOccurs="0" maxOccurs="unbounded"/>
59
- <xs:element name="rssi" minOccurs="0">
60
- <xs:complexType>
61
- <xs:sequence>
62
- <xs:element type="xs:string" name="datatype" minOccurs="0"/>
63
- <xs:element type="xs:string" name="unit" minOccurs="0"/>
64
- </xs:sequence>
65
- </xs:complexType>
66
- </xs:element>
67
- </xs:sequence>
68
- <xs:attribute type="xs:boolean" use="required" name="encrypted"/>
69
- <xs:attribute type="xs:boolean" use="required" name="virtual"/>
70
- </xs:complexType>
71
- </xs:element>
72
- </xs:sequence>
73
- </xs:complexType>
74
- </xs:element>
75
- <xs:element name="scenario" minOccurs="0">
76
- <xs:complexType>
77
- <xs:sequence/>
78
- <xs:attribute type="xs:int" use="required" name="id"/>
79
- </xs:complexType>
80
- </xs:element>
81
- <xs:element name="trace" minOccurs="0">
82
- <xs:complexType>
83
- <xs:sequence/>
84
- <xs:attribute type="xs:int" use="required" name="id"/>
85
- </xs:complexType>
86
- </xs:element>
87
- </xs:sequence>
88
- </xs:complexType>
89
- </xs:schema>