ruby-vast 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +55 -0
  4. data/lib/ruby-vast.rb +1 -0
  5. data/lib/vast.rb +33 -0
  6. data/lib/vast/ad.rb +103 -0
  7. data/lib/vast/companion_creative.rb +81 -0
  8. data/lib/vast/creative.rb +62 -0
  9. data/lib/vast/document.rb +71 -0
  10. data/lib/vast/element.rb +9 -0
  11. data/lib/vast/extension.rb +18 -0
  12. data/lib/vast/icon.rb +87 -0
  13. data/lib/vast/inline_ad.rb +22 -0
  14. data/lib/vast/linear_creative.rb +57 -0
  15. data/lib/vast/mediafile.rb +56 -0
  16. data/lib/vast/non_linear_creative.rb +97 -0
  17. data/lib/vast/version.rb +3 -0
  18. data/lib/vast/wrapper_ad.rb +19 -0
  19. data/lib/vast3_draft.xsd +1036 -0
  20. data/lib/vast_2.0.1.xsd +643 -0
  21. data/test/ad_test.rb +122 -0
  22. data/test/companion_creative_test.rb +38 -0
  23. data/test/creative_test.rb +35 -0
  24. data/test/document_test.rb +72 -0
  25. data/test/examples/document_with_no_ads.xml +3 -0
  26. data/test/examples/document_with_one_inline_ad.xml +121 -0
  27. data/test/examples/document_with_one_inline_and_one_wrapper_ad.xml +105 -0
  28. data/test/examples/document_with_one_wrapper_ad.xml +40 -0
  29. data/test/examples/document_with_two_inline_ads.xml +120 -0
  30. data/test/examples/invalid_document.xml +3 -0
  31. data/test/examples/invalid_document_with_missing_ad_type.xml +58 -0
  32. data/test/examples/invalid_document_with_missing_creative_type.xml +39 -0
  33. data/test/examples/vast3_inline.xml +86 -0
  34. data/test/extension_test.rb +20 -0
  35. data/test/inline_ad_test.rb +14 -0
  36. data/test/linear_creative_test.rb +26 -0
  37. data/test/mediafile_test.rb +20 -0
  38. data/test/non_linear_creative_test.rb +39 -0
  39. data/test/test_helper.rb +13 -0
  40. data/test/vast3_inline_ad_test.rb +23 -0
  41. data/test/wrapper_ad_test.rb +16 -0
  42. metadata +99 -0
@@ -0,0 +1,18 @@
1
+ module VAST
2
+ # The VAST allows any valid XML within the extensions element. Use of extensions will necessarily
3
+ # require offline coordination between VAST sender and VAST receiver.
4
+ class Extension < Element
5
+
6
+ # Extension type
7
+ def type
8
+ source_node[:type]
9
+ end
10
+
11
+ # Access to the XML contents of this extension, as a Nokogiri::XML::Node
12
+ # http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Node.html. Alias of
13
+ # Extension#source_node
14
+ def xml
15
+ source_node
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,87 @@
1
+ module VAST
2
+ # Any number of Mediafile objects can be provided for a single Ad, but it is assumed that all Mediafiles belongs
3
+ # to a single Ad object represent the same creative unit with the same duration, Ad-ID (ISCI code), etc.
4
+ class Icon < Element
5
+
6
+ def program
7
+ source_node[:program]
8
+ end
9
+
10
+ def width
11
+ source_node[:width].to_i
12
+ end
13
+
14
+ def height
15
+ source_node[:height].to_i
16
+ end
17
+
18
+ def xPosition
19
+ source_node[:xPosition].to_i
20
+ end
21
+
22
+ def yPosition
23
+ source_node[:yPosition].to_i
24
+ end
25
+
26
+ def duration
27
+ source_node[:duration].to_i
28
+ end
29
+
30
+ def offset
31
+ source_node[:offset].to_i
32
+ end
33
+
34
+ # Defines the method to use for communication with the companion
35
+ def api_framework
36
+ source_node[:apiFramework]
37
+ end
38
+
39
+ def resource_type
40
+ if source_node.at('StaticResource')
41
+ :static
42
+ elsif source_node.at('IFrameResource')
43
+ :iframe
44
+ elsif source_node.at('HTMLResource')
45
+ :html
46
+ end
47
+ end
48
+
49
+ # Returns MIME type of static creative
50
+ def creative_type
51
+ if resource_type == :static
52
+ source_node.at('StaticResource')[:creativeType]
53
+ end
54
+ end
55
+
56
+ # Returns URI for static or iframe resource
57
+ def resource_url
58
+ case resource_type
59
+ when :static
60
+ URI.parse source_node.at('StaticResource').content.strip
61
+ when :iframe
62
+ URI.parse source_node.at('IFrameResource').content.strip
63
+ end
64
+ end
65
+
66
+ # Returns HTML text for html resource
67
+ def resource_html
68
+ if resource_type == :html
69
+ source_node.at('HTMLResource').content
70
+ end
71
+ end
72
+
73
+ def click_through_url
74
+ URI.parse source_node.at('IconClickThrough').content.strip
75
+ end
76
+
77
+ def click_tracking_url
78
+ URI.parse source_node.at('IconClickTracking').content.strip
79
+ end
80
+
81
+ def view_tracking_url
82
+ URI.parse source_node.at('IconViewTracking').content.strip
83
+ end
84
+
85
+ # end of class
86
+ end
87
+ end
@@ -0,0 +1,22 @@
1
+ module VAST
2
+ # Contains all the information necessary to display the visual experience of one complete ad.
3
+ class InlineAd < Ad
4
+
5
+ # URI of request to survey vendor
6
+ def survey_url
7
+ URI.parse source_node.at('Survey').content.strip
8
+ end
9
+
10
+ # Common name of ad
11
+ def ad_system
12
+ source_node.at('AdSystem').content
13
+ end
14
+
15
+ # Common name of ad
16
+ def ad_title
17
+ source_node.at('AdTitle').content
18
+ end
19
+
20
+ end
21
+ end
22
+
@@ -0,0 +1,57 @@
1
+ module VAST
2
+ # LinearCreative is presented before, in the middle of, or after the video content is consumed by the user,
3
+ # in very much the same way a TV commercial can play before, during or after the chosen program.
4
+ class LinearCreative < Creative
5
+
6
+ # Duration of creative
7
+ def duration
8
+ source_node.at('Duration').content
9
+ end
10
+
11
+ # VAST 3
12
+ def skipoffset
13
+ source_node[:skipoffset]
14
+ end
15
+
16
+ # URI to open as destination page when user clicks on the video
17
+ def click_through_url
18
+ URI.parse source_node.at('ClickThrough').content.strip
19
+ end
20
+
21
+ # An array of URIs to request for tracking purposes when user clicks on the video
22
+ def click_tracking_urls
23
+ source_node.xpath('.//ClickTracking').to_a.collect do |node|
24
+ URI.parse node.content.strip
25
+ end
26
+ end
27
+
28
+ # A hash of URIs to request on custom events such as hotspotted video. This library
29
+ # required custom click urls to identify themselves with an `id` attribute, which is
30
+ # used as the key for this hash
31
+ def custom_click_urls
32
+ custom_click_urls = {}
33
+ source_node.xpath('.//CustomClick').to_a.collect do |node|
34
+ key = underscore(node[:id]).to_sym
35
+ custom_click_urls[key] = URI.parse(node.content.strip)
36
+ end
37
+ custom_click_urls
38
+ end
39
+
40
+ # Returns mediafiles containing the information required to display the linear creative's media
41
+ #
42
+ # It is assumed that all mediafiles accessible represent the same creative unit with the same
43
+ # duration, Ad-ID (ISCI code), etc.
44
+ def mediafiles
45
+ source_node.xpath('.//MediaFile').to_a.collect do |node|
46
+ Mediafile.new(node)
47
+ end
48
+ end
49
+
50
+ def icons
51
+ source_node.xpath('.//Icon').to_a.collect do |node|
52
+ Icon.new(node)
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,56 @@
1
+ module VAST
2
+ # Any number of Mediafile objects can be provided for a single Ad, but it is assumed that all Mediafiles belongs
3
+ # to a single Ad object represent the same creative unit with the same duration, Ad-ID (ISCI code), etc.
4
+ class Mediafile < Element
5
+
6
+ # Location of linear file
7
+ def url
8
+ URI.parse source_node.content.strip
9
+ end
10
+
11
+ def id
12
+ source_node[:id]
13
+ end
14
+
15
+ # Method of delivery of ad, either "streaming" or "progressive"
16
+ def delivery
17
+ source_node[:delivery]
18
+ end
19
+
20
+ # MIME type. Popular MIME types include, but are not limited to “video/x-ms-wmv” for
21
+ # Windows Media, and “video/x-flv” for Flash Video.
22
+ def type
23
+ source_node[:type]
24
+ end
25
+
26
+ # Bitrate of encoded video in Kbps
27
+ def bitrate
28
+ source_node[:bitrate].to_i
29
+ end
30
+
31
+ # Pixel dimensions of video width
32
+ def width
33
+ source_node[:width].to_i
34
+ end
35
+
36
+ # Pixel dimensions of video height
37
+ def height
38
+ source_node[:height].to_i
39
+ end
40
+
41
+ # Defines the method to use for communication with the companion
42
+ def api_framework
43
+ source_node[:apiFramework]
44
+ end
45
+
46
+ # Whether it is acceptable to scale the mediafile.
47
+ def scalable?
48
+ source_node[:scalable]=="true"
49
+ end
50
+
51
+ # Whether the mediafile must have its aspect ratio maintained when scaled
52
+ def maintain_aspect_ratio?
53
+ source_node[:maintainAspectRatio]=="true"
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,97 @@
1
+ module VAST
2
+ # NonLinearCreative runs concurrently with the video content so the users see the ad while viewing
3
+ # the content. Non-linear video ads can be delivered as text, graphical ads, or as video overlays.
4
+ class NonLinearCreative < Creative
5
+
6
+ def id
7
+ source_node[:id]
8
+ end
9
+
10
+ # Width in pixels
11
+ def width
12
+ source_node[:width].to_i
13
+ end
14
+
15
+ # Height in pixels
16
+ def height
17
+ source_node[:height].to_i
18
+ end
19
+
20
+ # Width in pixels when in expanded state
21
+ def expanded_width
22
+ source_node[:expandedWidth].to_i
23
+ end
24
+
25
+ # Height in pixels when in expanded state
26
+ def expanded_height
27
+ source_node[:expandedHeight].to_i
28
+ end
29
+
30
+ # Defines the method to use for communication with the companion
31
+ def api_framework
32
+ source_node[:apiFramework]
33
+ end
34
+
35
+ # URI to open as destination page when user clicks on creative
36
+ def click_through_url
37
+ URI.parse source_node.at('NonLinearClickThrough').content.strip
38
+ end
39
+
40
+ def click_tracking_url
41
+ URI.parse source_node.at('NonLinearClickTracking').content.strip
42
+ end
43
+
44
+ # Whether it is acceptable to scale the mediafile.
45
+ def scalable?
46
+ source_node[:scalable]=="true"
47
+ end
48
+
49
+ # Whether the mediafile must have its aspect ratio maintained when scaled
50
+ def maintain_aspect_ratio?
51
+ source_node[:maintainAspectRatio]=="true"
52
+ end
53
+
54
+ # Suggested duration to display non-linear ad, typically for animation to complete.
55
+ # Expressed in standard time format hh:mm:ss
56
+ def min_suggested_duration
57
+ source_node[:minSuggestedDuration]
58
+ end
59
+
60
+
61
+ # Type of non-linear resource, returned as a symbol. Either :static, :iframe, or :html.
62
+ def resource_type
63
+ if source_node.at('StaticResource')
64
+ :static
65
+ elsif source_node.at('IFrameResource')
66
+ :iframe
67
+ elsif source_node.at('HTMLResource')
68
+ :html
69
+ end
70
+ end
71
+
72
+ # Returns MIME type of static creative
73
+ def creative_type
74
+ if resource_type == :static
75
+ source_node.at('StaticResource')[:creativeType]
76
+ end
77
+ end
78
+
79
+ # Returns URI for static or iframe resource
80
+ def resource_url
81
+ case resource_type
82
+ when :static
83
+ URI.parse source_node.at('StaticResource').content.strip
84
+ when :iframe
85
+ URI.parse source_node.at('IFrameResource').content.strip
86
+ end
87
+ end
88
+
89
+ # Returns HTML text for html resource
90
+ def resource_html
91
+ if resource_type == :html
92
+ source_node.at('HTMLResource').content
93
+ end
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,3 @@
1
+ module VAST
2
+ VERSION = '1.0.6'.freeze
3
+ end
@@ -0,0 +1,19 @@
1
+ module VAST
2
+ # Points to another VAST document on a different server.
3
+ #
4
+ # WrapperAds may include any number of tracking urls to allow CompanionCreatives to be served
5
+ # from an InlineAd response but tracked separately from the Impression. It may also include
6
+ # tracking elements for separately tracking LinearCreative or NonLinearCreative views or events.
7
+ #
8
+ # The server providing the WrapperAd may not know exactly which creative elements are to be
9
+ # delivered downline in inline ads; in that case the WrapperAd should include placeholders for
10
+ # the maximum set of Creatives that could be played within the Video Player.
11
+ class WrapperAd < Ad
12
+
13
+ # URI of ad tag of downstream Secondary Ad Server
14
+ def ad_tag_url
15
+ URI.parse source_node.at('VASTAdTagURI').content.strip
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,1036 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
3
+ <xs:element name="VAST">
4
+ <xs:annotation>
5
+ <xs:documentation>IAB VAST, Video Ad Serving Template, video xml ad response, Version 3.0.0, xml schema prepared by Google</xs:documentation>
6
+ </xs:annotation>
7
+ <xs:complexType>
8
+ <xs:sequence>
9
+ <xs:element name="Ad" maxOccurs="unbounded" minOccurs="0">
10
+ <xs:annotation>
11
+ <xs:documentation>Top-level element, wraps each ad in the response</xs:documentation>
12
+ </xs:annotation>
13
+ <xs:complexType>
14
+ <xs:choice maxOccurs="1" minOccurs="1">
15
+ <xs:element name="InLine" maxOccurs="1" minOccurs="0">
16
+ <xs:annotation>
17
+ <xs:documentation>Second-level element surrounding complete ad data for a single ad</xs:documentation>
18
+ </xs:annotation>
19
+ <xs:complexType>
20
+ <xs:sequence>
21
+ <xs:element name="AdSystem" maxOccurs="1" minOccurs="1" type="AdSystem_type">
22
+ <xs:annotation>
23
+ <xs:documentation>Indicates source ad server</xs:documentation>
24
+ </xs:annotation>
25
+ </xs:element>
26
+ <xs:element name="AdTitle" type="xs:string" maxOccurs="1" minOccurs="1">
27
+ <xs:annotation>
28
+ <xs:documentation>Common name of ad</xs:documentation>
29
+ </xs:annotation>
30
+ </xs:element>
31
+ <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1">
32
+ <xs:annotation>
33
+ <xs:documentation>Longer description of ad</xs:documentation>
34
+ </xs:annotation>
35
+ </xs:element>
36
+ <xs:element name="Advertiser" type="xs:string" minOccurs="0" maxOccurs="1">
37
+ <xs:annotation>
38
+ <xs:documentation>Common name of advertiser</xs:documentation>
39
+ </xs:annotation>
40
+ </xs:element>
41
+ <xs:element name="Pricing" minOccurs="0" maxOccurs="1">
42
+ <xs:annotation>
43
+ <xs:documentation>The price of the ad.</xs:documentation>
44
+ </xs:annotation>
45
+ <xs:complexType>
46
+ <xs:simpleContent>
47
+ <xs:extension base="xs:decimal">
48
+ <xs:attribute name="model" use="required">
49
+ <xs:annotation>
50
+ <xs:documentation>The pricing model used.</xs:documentation>
51
+ </xs:annotation>
52
+ <xs:simpleType>
53
+ <xs:restriction base="xs:NMTOKEN">
54
+ <xs:enumeration value="cpc" />
55
+ <xs:enumeration value="cpm" />
56
+ <xs:enumeration value="cpe" />
57
+ <xs:enumeration value="cpv" />
58
+ </xs:restriction>
59
+ </xs:simpleType>
60
+ </xs:attribute>
61
+ <xs:attribute name="currency" use="required">
62
+ <xs:annotation>
63
+ <xs:documentation>The currency of the pricing.</xs:documentation>
64
+ </xs:annotation>
65
+ <xs:simpleType>
66
+ <xs:restriction base="xs:string">
67
+ <xs:pattern value="[a-zA-Z]{3}" />
68
+ </xs:restriction>
69
+ </xs:simpleType>
70
+ </xs:attribute>
71
+ </xs:extension>
72
+ </xs:simpleContent>
73
+ </xs:complexType>
74
+ </xs:element>
75
+ <xs:element name="Survey" type="xs:anyURI" minOccurs="0" maxOccurs="1">
76
+ <xs:annotation>
77
+ <xs:documentation>URL of request to survey vendor</xs:documentation>
78
+ </xs:annotation>
79
+ </xs:element>
80
+ <xs:element name="Error" type="xs:anyURI" minOccurs="0" maxOccurs="1">
81
+ <xs:annotation>
82
+ <xs:documentation>URL to request if ad does not play due to error</xs:documentation>
83
+ </xs:annotation>
84
+ </xs:element>
85
+ <xs:element name="Impression" type="Impression_type" maxOccurs="unbounded" minOccurs="1" />
86
+ <xs:element maxOccurs="1" minOccurs="1" name="Creatives">
87
+ <xs:annotation>
88
+ <xs:documentation>Contains all creative elements within an InLine or Wrapper Ad</xs:documentation>
89
+ </xs:annotation>
90
+ <xs:complexType>
91
+ <xs:sequence>
92
+ <xs:element name="Creative" maxOccurs="unbounded">
93
+ <xs:annotation>
94
+ <xs:documentation>Wraps each creative element within an InLine or Wrapper Ad</xs:documentation>
95
+ </xs:annotation>
96
+ <xs:complexType>
97
+ <xs:choice>
98
+ <xs:element name="Linear" minOccurs="0" maxOccurs="1">
99
+ <xs:complexType>
100
+ <xs:sequence>
101
+ <xs:element name="Icons" minOccurs="0" maxOccurs="1">
102
+ <xs:complexType>
103
+ <xs:sequence>
104
+ <xs:element name="Icon" minOccurs="1" maxOccurs="unbounded" type="Icon_type">
105
+ <xs:annotation>
106
+ <xs:documentation>Any number of icons representing advertising industry initiatives.</xs:documentation>
107
+ </xs:annotation>
108
+ </xs:element>
109
+ </xs:sequence>
110
+ </xs:complexType>
111
+ </xs:element>
112
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
113
+ <xs:element name="Duration" type="xs:time" maxOccurs="1" minOccurs="1">
114
+ <xs:annotation>
115
+ <xs:documentation>Duration in standard time format, hh:mm:ss</xs:documentation>
116
+ </xs:annotation>
117
+ </xs:element>
118
+ <xs:element name="TrackingEvents" minOccurs="0" type="TrackingEvents_type" maxOccurs="1" />
119
+ <xs:element name="AdParameters" minOccurs="0" maxOccurs="1" type="AdParameters_type">
120
+ <xs:annotation>
121
+ <xs:documentation>Data to be passed into the video ad</xs:documentation>
122
+ </xs:annotation>
123
+ </xs:element>
124
+ <xs:element name="VideoClicks" minOccurs="0" type="VideoClicks_type" maxOccurs="1" />
125
+ <xs:element name="MediaFiles" minOccurs="0" maxOccurs="1">
126
+ <xs:complexType>
127
+ <xs:sequence>
128
+ <xs:element name="MediaFile" minOccurs="1" maxOccurs="unbounded">
129
+ <xs:annotation>
130
+ <xs:documentation>Location of linear file</xs:documentation>
131
+ </xs:annotation>
132
+ <xs:complexType>
133
+ <xs:simpleContent>
134
+ <xs:extension base="xs:anyURI">
135
+ <xs:attribute name="id" type="xs:string" use="optional">
136
+ <xs:annotation>
137
+ <xs:documentation>Optional identifier</xs:documentation>
138
+ </xs:annotation>
139
+ </xs:attribute>
140
+ <xs:attribute name="delivery" use="required">
141
+ <xs:annotation>
142
+ <xs:documentation>Method of delivery of ad</xs:documentation>
143
+ </xs:annotation>
144
+ <xs:simpleType>
145
+ <xs:restriction base="xs:NMTOKEN">
146
+ <xs:enumeration value="streaming" />
147
+ <xs:enumeration value="progressive" />
148
+ </xs:restriction>
149
+ </xs:simpleType>
150
+ </xs:attribute>
151
+ <xs:attribute name="type" use="required" type="xs:string">
152
+ <xs:annotation>
153
+ <xs:documentation>MIME type. Popular MIME types include, but are not limited to “video/x-ms-wmv” for Windows Media, and “video/x-flv” for Flash Video. Image ads or interactive ads can be included in the MediaFiles section with appropriate Mime
154
+ types</xs:documentation>
155
+ </xs:annotation>
156
+ </xs:attribute>
157
+ <xs:attribute name="bitrate" type="xs:integer" use="optional">
158
+ <xs:annotation>
159
+ <xs:documentation>Bitrate of encoded video in Kbps. If bitrate is supplied, minBitrate and maxBitrate should not be supplied.</xs:documentation>
160
+ </xs:annotation>
161
+ </xs:attribute>
162
+ <xs:attribute name="minBitrate" type="xs:integer" use="optional">
163
+ <xs:annotation>
164
+ <xs:documentation>Minimum bitrate of an adaptive stream in Kbps. If minBitrate is supplied, maxBitrate must be supplied and bitrate should not be supplied.</xs:documentation>
165
+ </xs:annotation>
166
+ </xs:attribute>
167
+ <xs:attribute name="maxBitrate" type="xs:integer" use="optional">
168
+ <xs:annotation>
169
+ <xs:documentation>Maximum bitrate of an adaptive stream in Kbps. If maxBitrate is supplied, minBitrate must be supplied and bitrate should not be supplied.</xs:documentation>
170
+ </xs:annotation>
171
+ </xs:attribute>
172
+ <xs:attribute name="width" type="xs:integer" use="required">
173
+ <xs:annotation>
174
+ <xs:documentation>Pixel dimensions of video</xs:documentation>
175
+ </xs:annotation>
176
+ </xs:attribute>
177
+ <xs:attribute name="height" type="xs:integer" use="required">
178
+ <xs:annotation>
179
+ <xs:documentation>Pixel dimensions of video</xs:documentation>
180
+ </xs:annotation>
181
+ </xs:attribute>
182
+ <xs:attribute name="scalable" type="xs:boolean" use="optional">
183
+ <xs:annotation>
184
+ <xs:documentation>Whether it is acceptable to scale the image.</xs:documentation>
185
+ </xs:annotation>
186
+ </xs:attribute>
187
+ <xs:attribute name="maintainAspectRatio" type="xs:boolean" use="optional">
188
+ <xs:annotation>
189
+ <xs:documentation>Whether the ad must have its aspect ratio maintained when scales</xs:documentation>
190
+ </xs:annotation>
191
+ </xs:attribute>
192
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
193
+ <xs:annotation>
194
+ <xs:documentation>The apiFramework defines the method to use for communication if the MediaFile is interactive. Suggested values for this element are “VPAID”, “FlashVars” (for Flash/Flex), “initParams” (for Silverlight) and “GetVariables”
195
+ (variables placed in key/value pairs on the asset request).</xs:documentation>
196
+ </xs:annotation>
197
+ </xs:attribute>
198
+ <xs:attribute name="codec" use="optional" type="xs:string">
199
+ <xs:annotation>
200
+ <xs:documentation>The codec used to produce the media file.</xs:documentation>
201
+ </xs:annotation>
202
+ </xs:attribute>
203
+ </xs:extension>
204
+ </xs:simpleContent>
205
+ </xs:complexType>
206
+ </xs:element>
207
+ </xs:sequence>
208
+ </xs:complexType>
209
+ </xs:element>
210
+ </xs:sequence>
211
+ <xs:attribute name="skipoffset" use="optional">
212
+ <xs:annotation>
213
+ <xs:documentation>The time at which the ad becomes skippable, if absent, the ad is not skippable.</xs:documentation>
214
+ </xs:annotation>
215
+ <xs:simpleType>
216
+ <xs:restriction base="xs:string">
217
+ <xs:pattern value="(\d{2}:[0-5]\d:[0-5]\d(\.\d\d\d)?|1?\d?\d(\.?\d)*%)" />
218
+ </xs:restriction>
219
+ </xs:simpleType>
220
+ </xs:attribute>
221
+ </xs:complexType>
222
+ </xs:element>
223
+ <xs:element name="CompanionAds" minOccurs="0" maxOccurs="1">
224
+ <xs:complexType>
225
+ <xs:sequence>
226
+ <xs:element name="Companion" minOccurs="0" maxOccurs="unbounded" type="Companion_type">
227
+ <xs:annotation>
228
+ <xs:documentation>Any number of companions in any desired pixel dimensions.</xs:documentation>
229
+ </xs:annotation>
230
+ </xs:element>
231
+ </xs:sequence>
232
+ <xs:attribute name="required" use="optional">
233
+ <xs:annotation>
234
+ <xs:documentation>Provides information about which companion creative to display. All means that the player must attempt to display all. Any means the player must attempt to play at least one. None means all companions are optional.</xs:documentation>
235
+ </xs:annotation>
236
+ <xs:simpleType>
237
+ <xs:restriction base="xs:NMTOKEN">
238
+ <xs:enumeration value="all" />
239
+ <xs:enumeration value="any" />
240
+ <xs:enumeration value="none" />
241
+ </xs:restriction>
242
+ </xs:simpleType>
243
+ </xs:attribute>
244
+ </xs:complexType>
245
+ </xs:element>
246
+ <xs:element name="NonLinearAds" minOccurs="0" maxOccurs="1">
247
+ <xs:complexType>
248
+ <xs:sequence>
249
+ <xs:element name="TrackingEvents" minOccurs="0" type="TrackingEvents_type" maxOccurs="1" />
250
+ <xs:element name="NonLinear" minOccurs="1" maxOccurs="unbounded" type="NonLinear_type">
251
+ <xs:annotation>
252
+ <xs:documentation>Any number of companions in any desired pixel dimensions.</xs:documentation>
253
+ </xs:annotation>
254
+ </xs:element>
255
+ </xs:sequence>
256
+ </xs:complexType>
257
+ </xs:element>
258
+ </xs:choice>
259
+ <xs:attribute name="id" type="xs:string" use="optional" />
260
+ <xs:attribute name="sequence" type="xs:integer" use="optional">
261
+ <xs:annotation>
262
+ <xs:documentation>The preferred order in which multiple Creatives should be displayed</xs:documentation>
263
+ </xs:annotation>
264
+ </xs:attribute>
265
+ <xs:attribute name="AdID" type="xs:string" use="optional">
266
+ <xs:annotation>
267
+ <xs:documentation>Ad-ID for the creative (formerly ISCI)</xs:documentation>
268
+ </xs:annotation>
269
+ </xs:attribute>
270
+ </xs:complexType>
271
+ </xs:element>
272
+ </xs:sequence>
273
+ </xs:complexType>
274
+ </xs:element>
275
+ <xs:element name="Extensions" minOccurs="0" maxOccurs="1" type="Extensions_type" />
276
+ </xs:sequence>
277
+ </xs:complexType>
278
+ </xs:element>
279
+ <xs:element name="Wrapper" maxOccurs="1" minOccurs="0">
280
+ <xs:annotation>
281
+ <xs:documentation>Second-level element surrounding wrapper ad pointing to Secondary ad server.</xs:documentation>
282
+ </xs:annotation>
283
+ <xs:complexType>
284
+ <xs:sequence>
285
+ <xs:element name="AdSystem" type="AdSystem_type" maxOccurs="1" minOccurs="1">
286
+ <xs:annotation>
287
+ <xs:documentation>Indicates source ad server</xs:documentation>
288
+ </xs:annotation>
289
+ </xs:element>
290
+ <xs:element name="VASTAdTagURI" type="xs:anyURI" maxOccurs="1" minOccurs="1">
291
+ <xs:annotation>
292
+ <xs:documentation>URL of ad tag of downstream Secondary Ad Server</xs:documentation>
293
+ </xs:annotation>
294
+ </xs:element>
295
+ <xs:element name="Error" type="xs:anyURI" minOccurs="0" maxOccurs="1">
296
+ <xs:annotation>
297
+ <xs:documentation>URL to request if ad does not play due to error</xs:documentation>
298
+ </xs:annotation>
299
+ </xs:element>
300
+ <xs:element name="Impression" type="xs:anyURI" maxOccurs="unbounded" minOccurs="1">
301
+ <xs:annotation>
302
+ <xs:documentation>URL to request to track an impression</xs:documentation>
303
+ </xs:annotation>
304
+ </xs:element>
305
+ <xs:element name="Creatives">
306
+ <xs:complexType>
307
+ <xs:sequence>
308
+ <xs:element name="Creative" maxOccurs="unbounded" minOccurs="0">
309
+ <xs:complexType>
310
+ <xs:choice>
311
+ <xs:element name="Linear" minOccurs="0" maxOccurs="1">
312
+ <xs:complexType>
313
+ <xs:sequence>
314
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
315
+ <xs:element name="Icons" minOccurs="0" maxOccurs="1">
316
+ <xs:complexType>
317
+ <xs:sequence>
318
+ <xs:element name="Icon" minOccurs="1" maxOccurs="unbounded" type="Icon_type">
319
+ <xs:annotation>
320
+ <xs:documentation>Any number of icons representing advertising industry initiatives.</xs:documentation>
321
+ </xs:annotation>
322
+ </xs:element>
323
+ </xs:sequence>
324
+ </xs:complexType>
325
+ </xs:element>
326
+ <xs:element name="TrackingEvents" minOccurs="0" type="TrackingEvents_type" maxOccurs="1" />
327
+ <xs:element name="VideoClicks" minOccurs="0" maxOccurs="1">
328
+ <xs:complexType>
329
+ <xs:sequence>
330
+ <xs:element name="ClickTracking" minOccurs="0" maxOccurs="unbounded">
331
+ <xs:annotation>
332
+ <xs:documentation>URL to request for tracking purposes when user clicks on the video</xs:documentation>
333
+ </xs:annotation>
334
+ <xs:complexType>
335
+ <xs:simpleContent>
336
+ <xs:extension base="xs:anyURI">
337
+ <xs:attribute name="id" type="xs:string" use="optional" />
338
+ </xs:extension>
339
+ </xs:simpleContent>
340
+ </xs:complexType>
341
+ </xs:element>
342
+ <xs:element name="CustomClick" minOccurs="0" maxOccurs="unbounded">
343
+ <xs:annotation>
344
+ <xs:documentation>URLs to request on custom events such as hotspotted video</xs:documentation>
345
+ </xs:annotation>
346
+ <xs:complexType>
347
+ <xs:simpleContent>
348
+ <xs:extension base="xs:anyURI">
349
+ <xs:attribute name="id" type="xs:string" use="optional" />
350
+ </xs:extension>
351
+ </xs:simpleContent>
352
+ </xs:complexType>
353
+ </xs:element>
354
+ </xs:sequence>
355
+ </xs:complexType>
356
+ </xs:element>
357
+ </xs:sequence>
358
+ </xs:complexType>
359
+ </xs:element>
360
+ <xs:element name="CompanionAds" minOccurs="0" maxOccurs="1">
361
+ <xs:complexType>
362
+ <xs:sequence>
363
+ <xs:element name="Companion" minOccurs="0" maxOccurs="unbounded" type="CompanionWrapper_type">
364
+ <xs:annotation>
365
+ <xs:documentation>Definition of Companion ad, if served separately</xs:documentation>
366
+ </xs:annotation>
367
+ </xs:element>
368
+ </xs:sequence>
369
+ </xs:complexType>
370
+ </xs:element>
371
+ <xs:element name="NonLinearAds" minOccurs="0" maxOccurs="1">
372
+ <xs:complexType>
373
+ <xs:sequence>
374
+ <xs:element name="TrackingEvents" minOccurs="0" type="TrackingEvents_type" maxOccurs="1" />
375
+ <xs:element name="NonLinear" minOccurs="0" maxOccurs="unbounded" type="NonLinearWrapper_type">
376
+ <xs:annotation>
377
+ <xs:documentation>Any number of companions in any desired pixel dimensions.</xs:documentation>
378
+ </xs:annotation>
379
+ </xs:element>
380
+ </xs:sequence>
381
+ </xs:complexType>
382
+ </xs:element>
383
+ </xs:choice>
384
+ <xs:attribute name="id" type="xs:string" use="optional" />
385
+ <xs:attribute name="sequence" type="xs:integer" use="optional">
386
+ <xs:annotation>
387
+ <xs:documentation>The preferred order in which multiple Creatives should be displayed</xs:documentation>
388
+ </xs:annotation>
389
+ </xs:attribute>
390
+ <xs:attribute name="AdID" type="xs:string" use="optional">
391
+ <xs:annotation>
392
+ <xs:documentation>Ad-ID for the creative (formerly ISCI)</xs:documentation>
393
+ </xs:annotation>
394
+ </xs:attribute>
395
+ </xs:complexType>
396
+ </xs:element>
397
+ </xs:sequence>
398
+ </xs:complexType>
399
+ </xs:element>
400
+ <xs:element name="Extensions" minOccurs="0" maxOccurs="1" type="Extensions_type" />
401
+ </xs:sequence>
402
+ </xs:complexType>
403
+ </xs:element>
404
+ </xs:choice>
405
+ <xs:attribute name="id" type="xs:string" use="optional" />
406
+ <xs:attribute name="sequence" type="xs:integer" use="optional">
407
+ <xs:annotation>
408
+ <xs:documentation>Identifies the sequence of multiple Ads and defines an Ad Pod.</xs:documentation>
409
+ </xs:annotation>
410
+ </xs:attribute>
411
+ </xs:complexType>
412
+ </xs:element>
413
+ </xs:sequence>
414
+ <xs:attribute name="version" type="xs:string" use="required">
415
+ <xs:annotation>
416
+ <xs:documentation>Current version is 3.0.</xs:documentation>
417
+ </xs:annotation>
418
+ </xs:attribute>
419
+ </xs:complexType>
420
+ </xs:element>
421
+ <xs:complexType name="TrackingEvents_type">
422
+ <xs:sequence>
423
+ <xs:element name="Tracking" minOccurs="0" maxOccurs="unbounded">
424
+ <xs:annotation>
425
+ <xs:documentation>The name of the event to track for the element. The creativeView should always be requested when present.</xs:documentation>
426
+ </xs:annotation>
427
+ <xs:complexType>
428
+ <xs:simpleContent>
429
+ <xs:extension base="xs:anyURI">
430
+ <xs:attribute name="event" use="required">
431
+ <xs:annotation>
432
+ <xs:documentation>The name of the event to track. For nonlinear ads these events should be recorded on the video within the ad.</xs:documentation>
433
+ </xs:annotation>
434
+ <xs:simpleType>
435
+ <xs:restriction base="xs:NMTOKEN">
436
+ <xs:enumeration value="creativeView" />
437
+ <xs:enumeration value="start" />
438
+ <xs:enumeration value="firstQuartile" />
439
+ <xs:enumeration value="midpoint" />
440
+ <xs:enumeration value="thirdQuartile" />
441
+ <xs:enumeration value="complete" />
442
+ <xs:enumeration value="mute" />
443
+ <xs:enumeration value="unmute" />
444
+ <xs:enumeration value="pause" />
445
+ <xs:enumeration value="rewind" />
446
+ <xs:enumeration value="resume" />
447
+ <xs:enumeration value="fullscreen" />
448
+ <xs:enumeration value="exitFullscreen" />
449
+ <xs:enumeration value="expand" />
450
+ <xs:enumeration value="collapse" />
451
+ <xs:enumeration value="acceptInvitation" />
452
+ <xs:enumeration value="close" />
453
+ <xs:enumeration value="skip" />
454
+ <xs:enumeration value="progress" />
455
+ </xs:restriction>
456
+ </xs:simpleType>
457
+ </xs:attribute>
458
+ <xs:attribute name="offset" use="optional">
459
+ <xs:annotation>
460
+ <xs:documentation>The time during the video at which this url should be pinged. Must be present for progress event.</xs:documentation>
461
+ </xs:annotation>
462
+ <xs:simpleType>
463
+ <xs:restriction base="xs:string">
464
+ <xs:pattern value="(\d{2}:[0-5]\d:[0-5]\d(\.\d\d\d)?|1?\d?\d(\.?\d)*%)" />
465
+ </xs:restriction>
466
+ </xs:simpleType>
467
+ </xs:attribute>
468
+ </xs:extension>
469
+ </xs:simpleContent>
470
+ </xs:complexType>
471
+ </xs:element>
472
+ </xs:sequence>
473
+ </xs:complexType>
474
+ <xs:complexType name="VideoClicks_type">
475
+ <xs:sequence>
476
+ <xs:element name="ClickThrough" minOccurs="0" maxOccurs="1">
477
+ <xs:annotation>
478
+ <xs:documentation>URL to open as destination page when user clicks on the video</xs:documentation>
479
+ </xs:annotation>
480
+ <xs:complexType>
481
+ <xs:simpleContent>
482
+ <xs:extension base="xs:anyURI">
483
+ <xs:attribute name="id" type="xs:string" use="optional" />
484
+ </xs:extension>
485
+ </xs:simpleContent>
486
+ </xs:complexType>
487
+ </xs:element>
488
+ <xs:element name="ClickTracking" minOccurs="0" maxOccurs="unbounded">
489
+ <xs:annotation>
490
+ <xs:documentation>URL to request for tracking purposes when user clicks on the video</xs:documentation>
491
+ </xs:annotation>
492
+ <xs:complexType>
493
+ <xs:simpleContent>
494
+ <xs:extension base="xs:anyURI">
495
+ <xs:attribute name="id" type="xs:string" use="optional" />
496
+ </xs:extension>
497
+ </xs:simpleContent>
498
+ </xs:complexType>
499
+ </xs:element>
500
+ <xs:element name="CustomClick" minOccurs="0" maxOccurs="unbounded">
501
+ <xs:annotation>
502
+ <xs:documentation>URLs to request on custom events such as hotspotted video</xs:documentation>
503
+ </xs:annotation>
504
+ <xs:complexType>
505
+ <xs:simpleContent>
506
+ <xs:extension base="xs:anyURI">
507
+ <xs:attribute name="id" type="xs:string" use="optional" />
508
+ </xs:extension>
509
+ </xs:simpleContent>
510
+ </xs:complexType>
511
+ </xs:element>
512
+ </xs:sequence>
513
+ </xs:complexType>
514
+ <xs:complexType name="Companion_type">
515
+ <xs:sequence>
516
+ <xs:choice>
517
+ <xs:element name="StaticResource" minOccurs="0" maxOccurs="1">
518
+ <xs:annotation>
519
+ <xs:documentation>URL to a static file, such as an image or SWF file</xs:documentation>
520
+ </xs:annotation>
521
+ <xs:complexType>
522
+ <xs:simpleContent>
523
+ <xs:extension base="xs:anyURI">
524
+ <xs:attribute name="creativeType" type="xs:string" use="required">
525
+ <xs:annotation>
526
+ <xs:documentation>Mime type of static resource</xs:documentation>
527
+ </xs:annotation>
528
+ </xs:attribute>
529
+ </xs:extension>
530
+ </xs:simpleContent>
531
+ </xs:complexType>
532
+ </xs:element>
533
+ <xs:element name="IFrameResource" type="xs:anyURI" minOccurs="0" maxOccurs="1">
534
+ <xs:annotation>
535
+ <xs:documentation>URL source for an IFrame to display the companion element</xs:documentation>
536
+ </xs:annotation>
537
+ </xs:element>
538
+ <xs:element name="HTMLResource" type="HTMLResource_type" minOccurs="0" maxOccurs="1">
539
+ <xs:annotation>
540
+ <xs:documentation>HTML to display the companion element</xs:documentation>
541
+ </xs:annotation>
542
+ </xs:element>
543
+ </xs:choice>
544
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
545
+ <xs:element maxOccurs="1" minOccurs="0" name="TrackingEvents" type="TrackingEvents_type">
546
+ <xs:annotation>
547
+ <xs:documentation>The creativeView should always be requested when present. For Companions creativeView is the only supported event.</xs:documentation>
548
+ </xs:annotation>
549
+ </xs:element>
550
+ <xs:element name="CompanionClickThrough" type="xs:anyURI" minOccurs="0" maxOccurs="1">
551
+ <xs:annotation>
552
+ <xs:documentation>URL to open as destination page when user clicks on the the companion banner ad.</xs:documentation>
553
+ </xs:annotation>
554
+ </xs:element>
555
+ <xs:element name="AltText" type="xs:string" minOccurs="0" maxOccurs="1">
556
+ <xs:annotation>
557
+ <xs:documentation>Alt text to be displayed when companion is rendered in HTML environment.</xs:documentation>
558
+ </xs:annotation>
559
+ </xs:element>
560
+ <xs:element name="AdParameters" minOccurs="0" maxOccurs="1" type="AdParameters_type">
561
+ <xs:annotation>
562
+ <xs:documentation>Data to be passed into the companion ads. The apiFramework defines the method to use for communication (e.g. “FlashVar”)</xs:documentation>
563
+ </xs:annotation>
564
+ </xs:element>
565
+ </xs:sequence>
566
+ <xs:attribute name="id" type="xs:string" use="optional">
567
+ <xs:annotation>
568
+ <xs:documentation>Optional identifier</xs:documentation>
569
+ </xs:annotation>
570
+ </xs:attribute>
571
+ <xs:attribute name="width" type="xs:integer" use="required">
572
+ <xs:annotation>
573
+ <xs:documentation>Pixel dimensions of companion slot</xs:documentation>
574
+ </xs:annotation>
575
+ </xs:attribute>
576
+ <xs:attribute name="height" type="xs:integer" use="required">
577
+ <xs:annotation>
578
+ <xs:documentation>Pixel dimensions of companion slot</xs:documentation>
579
+ </xs:annotation>
580
+ </xs:attribute>
581
+ <xs:attribute name="assetWidth" type="xs:integer" use="optional">
582
+ <xs:annotation>
583
+ <xs:documentation>Pixel dimensions of the companion asset</xs:documentation>
584
+ </xs:annotation>
585
+ </xs:attribute>
586
+ <xs:attribute name="assetHeight" type="xs:integer" use="optional">
587
+ <xs:annotation>
588
+ <xs:documentation>Pixel dimensions of the companion asset</xs:documentation>
589
+ </xs:annotation>
590
+ </xs:attribute>
591
+ <xs:attribute name="expandedWidth" type="xs:integer" use="optional">
592
+ <xs:annotation>
593
+ <xs:documentation>Pixel dimensions of expanding companion ad when in expanded state</xs:documentation>
594
+ </xs:annotation>
595
+ </xs:attribute>
596
+ <xs:attribute name="expandedHeight" type="xs:integer" use="optional">
597
+ <xs:annotation>
598
+ <xs:documentation>Pixel dimensions of expanding companion ad when in expanded state</xs:documentation>
599
+ </xs:annotation>
600
+ </xs:attribute>
601
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
602
+ <xs:annotation>
603
+ <xs:documentation>The apiFramework defines the method to use for communication with the companion</xs:documentation>
604
+ </xs:annotation>
605
+ </xs:attribute>
606
+ <xs:attribute name="adSlotId" type="xs:string" use="optional">
607
+ <xs:annotation>
608
+ <xs:documentation>Used to match companion creative to publisher placement areas on the page.</xs:documentation>
609
+ </xs:annotation>
610
+ </xs:attribute>
611
+ </xs:complexType>
612
+ <xs:complexType name="CompanionWrapper_type">
613
+ <xs:sequence>
614
+ <xs:choice minOccurs="0">
615
+ <xs:element name="StaticResource" minOccurs="0" maxOccurs="1">
616
+ <xs:annotation>
617
+ <xs:documentation>URL to a static file, such as an image or SWF file</xs:documentation>
618
+ </xs:annotation>
619
+ <xs:complexType>
620
+ <xs:simpleContent>
621
+ <xs:extension base="xs:anyURI">
622
+ <xs:attribute name="creativeType" type="xs:string" use="required">
623
+ <xs:annotation>
624
+ <xs:documentation>Mime type of static resource</xs:documentation>
625
+ </xs:annotation>
626
+ </xs:attribute>
627
+ </xs:extension>
628
+ </xs:simpleContent>
629
+ </xs:complexType>
630
+ </xs:element>
631
+ <xs:element name="IFrameResource" type="xs:anyURI" minOccurs="0" maxOccurs="1">
632
+ <xs:annotation>
633
+ <xs:documentation>URL source for an IFrame to display the companion element</xs:documentation>
634
+ </xs:annotation>
635
+ </xs:element>
636
+ <xs:element name="HTMLResource" type="HTMLResource_type" minOccurs="0" maxOccurs="1">
637
+ <xs:annotation>
638
+ <xs:documentation>HTML to display the companion element</xs:documentation>
639
+ </xs:annotation>
640
+ </xs:element>
641
+ </xs:choice>
642
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
643
+ <xs:element maxOccurs="1" minOccurs="0" name="TrackingEvents" type="TrackingEvents_type">
644
+ <xs:annotation>
645
+ <xs:documentation>The creativeView should always be requested when present. For Companions creativeView is the only supported event.</xs:documentation>
646
+ </xs:annotation>
647
+ </xs:element>
648
+ <xs:element name="CompanionClickThrough" type="xs:anyURI" minOccurs="0" maxOccurs="1">
649
+ <xs:annotation>
650
+ <xs:documentation>URL to open as destination page when user clicks on the the companion banner ad.</xs:documentation>
651
+ </xs:annotation>
652
+ </xs:element>
653
+ <xs:element name="CompanionClickTracking" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
654
+ <xs:annotation>
655
+ <xs:documentation>URLs to ping when user clicks on the the companion banner ad.</xs:documentation>
656
+ </xs:annotation>
657
+ </xs:element>
658
+ <xs:element name="AltText" type="xs:string" minOccurs="0" maxOccurs="1">
659
+ <xs:annotation>
660
+ <xs:documentation>Alt text to be displayed when companion is rendered in HTML environment.</xs:documentation>
661
+ </xs:annotation>
662
+ </xs:element>
663
+ <xs:element name="AdParameters" minOccurs="0" maxOccurs="1" type="AdParameters_type">
664
+ <xs:annotation>
665
+ <xs:documentation>Data to be passed into the companion ads. The apiFramework defines the method to use for communication (e.g. “FlashVar”)</xs:documentation>
666
+ </xs:annotation>
667
+ </xs:element>
668
+ </xs:sequence>
669
+ <xs:attribute name="id" type="xs:string" use="optional">
670
+ <xs:annotation>
671
+ <xs:documentation>Optional identifier</xs:documentation>
672
+ </xs:annotation>
673
+ </xs:attribute>
674
+ <xs:attribute name="width" type="xs:integer" use="required">
675
+ <xs:annotation>
676
+ <xs:documentation>Pixel dimensions of companion slot</xs:documentation>
677
+ </xs:annotation>
678
+ </xs:attribute>
679
+ <xs:attribute name="height" type="xs:integer" use="required">
680
+ <xs:annotation>
681
+ <xs:documentation>Pixel dimensions of companion slot</xs:documentation>
682
+ </xs:annotation>
683
+ </xs:attribute>
684
+ <xs:attribute name="assetWidth" type="xs:integer" use="optional">
685
+ <xs:annotation>
686
+ <xs:documentation>Pixel dimensions of the companion asset</xs:documentation>
687
+ </xs:annotation>
688
+ </xs:attribute>
689
+ <xs:attribute name="assetHeight" type="xs:integer" use="optional">
690
+ <xs:annotation>
691
+ <xs:documentation>Pixel dimensions of the companion asset</xs:documentation>
692
+ </xs:annotation>
693
+ </xs:attribute>
694
+ <xs:attribute name="expandedWidth" type="xs:integer" use="optional">
695
+ <xs:annotation>
696
+ <xs:documentation>Pixel dimensions of expanding companion ad when in expanded state</xs:documentation>
697
+ </xs:annotation>
698
+ </xs:attribute>
699
+ <xs:attribute name="expandedHeight" type="xs:integer" use="optional">
700
+ <xs:annotation>
701
+ <xs:documentation>Pixel dimensions of expanding companion ad when in expanded state</xs:documentation>
702
+ </xs:annotation>
703
+ </xs:attribute>
704
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
705
+ <xs:annotation>
706
+ <xs:documentation>The apiFramework defines the method to use for communication with the companion</xs:documentation>
707
+ </xs:annotation>
708
+ </xs:attribute>
709
+ <xs:attribute name="adSlotId" type="xs:string" use="optional">
710
+ <xs:annotation>
711
+ <xs:documentation>Used to match companion creative to publisher placement areas on the page.</xs:documentation>
712
+ </xs:annotation>
713
+ </xs:attribute>
714
+ </xs:complexType>
715
+ <xs:complexType name="NonLinear_type">
716
+ <xs:sequence>
717
+ <xs:choice>
718
+ <xs:element name="StaticResource" minOccurs="0" maxOccurs="1">
719
+ <xs:annotation>
720
+ <xs:documentation>URL to a static file, such as an image or SWF file</xs:documentation>
721
+ </xs:annotation>
722
+ <xs:complexType>
723
+ <xs:simpleContent>
724
+ <xs:extension base="xs:anyURI">
725
+ <xs:attribute name="creativeType" type="xs:string" use="required">
726
+ <xs:annotation>
727
+ <xs:documentation>Mime type of static resource</xs:documentation>
728
+ </xs:annotation>
729
+ </xs:attribute>
730
+ </xs:extension>
731
+ </xs:simpleContent>
732
+ </xs:complexType>
733
+ </xs:element>
734
+ <xs:element name="IFrameResource" type="xs:anyURI" minOccurs="0" maxOccurs="1">
735
+ <xs:annotation>
736
+ <xs:documentation>URL source for an IFrame to display the companion element</xs:documentation>
737
+ </xs:annotation>
738
+ </xs:element>
739
+ <xs:element name="HTMLResource" type="HTMLResource_type" minOccurs="0" maxOccurs="1">
740
+ <xs:annotation>
741
+ <xs:documentation>HTML to display the companion element</xs:documentation>
742
+ </xs:annotation>
743
+ </xs:element>
744
+ </xs:choice>
745
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
746
+ <xs:element name="NonLinearClickTracking" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
747
+ <xs:annotation>
748
+ <xs:documentation>URLs to ping when user clicks on the the non-linear ad.</xs:documentation>
749
+ </xs:annotation>
750
+ </xs:element>
751
+ <xs:element name="NonLinearClickThrough" type="xs:anyURI" minOccurs="0" maxOccurs="1">
752
+ <xs:annotation>
753
+ <xs:documentation>URL to open as destination page when user clicks on the non-linear ad unit.</xs:documentation>
754
+ </xs:annotation>
755
+ </xs:element>
756
+ <xs:element name="AdParameters" minOccurs="0" maxOccurs="1" type="AdParameters_type">
757
+ <xs:annotation>
758
+ <xs:documentation>Data to be passed into the video ad. </xs:documentation>
759
+ </xs:annotation>
760
+ </xs:element>
761
+ </xs:sequence>
762
+ <xs:attribute name="id" type="xs:string" use="optional">
763
+ <xs:annotation>
764
+ <xs:documentation>Optional identifier</xs:documentation>
765
+ </xs:annotation>
766
+ </xs:attribute>
767
+ <xs:attribute name="width" type="xs:integer" use="required">
768
+ <xs:annotation>
769
+ <xs:documentation>Pixel dimensions of companion</xs:documentation>
770
+ </xs:annotation>
771
+ </xs:attribute>
772
+ <xs:attribute name="height" type="xs:integer" use="required">
773
+ <xs:annotation>
774
+ <xs:documentation>Pixel dimensions of companion</xs:documentation>
775
+ </xs:annotation>
776
+ </xs:attribute>
777
+ <xs:attribute name="expandedWidth" type="xs:integer" use="optional">
778
+ <xs:annotation>
779
+ <xs:documentation>Pixel dimensions of expanding nonlinear ad when in expanded state</xs:documentation>
780
+ </xs:annotation>
781
+ </xs:attribute>
782
+ <xs:attribute name="expandedHeight" type="xs:integer" use="optional">
783
+ <xs:annotation>
784
+ <xs:documentation>Pixel dimensions of expanding nonlinear ad when in expanded state</xs:documentation>
785
+ </xs:annotation>
786
+ </xs:attribute>
787
+ <xs:attribute name="scalable" type="xs:boolean" use="optional">
788
+ <xs:annotation>
789
+ <xs:documentation>Whether it is acceptable to scale the image.</xs:documentation>
790
+ </xs:annotation>
791
+ </xs:attribute>
792
+ <xs:attribute name="maintainAspectRatio" type="xs:boolean" use="optional">
793
+ <xs:annotation>
794
+ <xs:documentation>Whether the ad must have its aspect ratio maintained when scales</xs:documentation>
795
+ </xs:annotation>
796
+ </xs:attribute>
797
+ <xs:attribute name="minSuggestedDuration" type="xs:time" use="optional">
798
+ <xs:annotation>
799
+ <xs:documentation>Suggested duration to display non-linear ad, typically for animation to complete. Expressed in standard time format hh:mm:ss</xs:documentation>
800
+ </xs:annotation>
801
+ </xs:attribute>
802
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
803
+ <xs:annotation>
804
+ <xs:documentation>The apiFramework defines the method to use for communication with the nonlinear element</xs:documentation>
805
+ </xs:annotation>
806
+ </xs:attribute>
807
+ </xs:complexType>
808
+ <xs:complexType name="NonLinearWrapper_type">
809
+ <xs:sequence>
810
+ <xs:element name="CreativeExtensions" minOccurs="0" maxOccurs="1" type="CreativeExtensions_type" />
811
+ <xs:element name="NonLinearClickTracking" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
812
+ <xs:annotation>
813
+ <xs:documentation>URLs to ping when user clicks on the the non-linear ad unit.</xs:documentation>
814
+ </xs:annotation>
815
+ </xs:element>
816
+ </xs:sequence>
817
+ <xs:attribute name="id" type="xs:string" use="optional">
818
+ <xs:annotation>
819
+ <xs:documentation>Optional identifier</xs:documentation>
820
+ </xs:annotation>
821
+ </xs:attribute>
822
+ <xs:attribute name="width" type="xs:integer" use="optional">
823
+ <xs:annotation>
824
+ <xs:documentation>Pixel dimensions of companion</xs:documentation>
825
+ </xs:annotation>
826
+ </xs:attribute>
827
+ <xs:attribute name="height" type="xs:integer" use="optional">
828
+ <xs:annotation>
829
+ <xs:documentation>Pixel dimensions of companion</xs:documentation>
830
+ </xs:annotation>
831
+ </xs:attribute>
832
+ <xs:attribute name="expandedWidth" type="xs:integer" use="optional">
833
+ <xs:annotation>
834
+ <xs:documentation>Pixel dimensions of expanding nonlinear ad when in expanded state</xs:documentation>
835
+ </xs:annotation>
836
+ </xs:attribute>
837
+ <xs:attribute name="expandedHeight" type="xs:integer" use="optional">
838
+ <xs:annotation>
839
+ <xs:documentation>Pixel dimensions of expanding nonlinear ad when in expanded state</xs:documentation>
840
+ </xs:annotation>
841
+ </xs:attribute>
842
+ <xs:attribute name="scalable" type="xs:boolean" use="optional">
843
+ <xs:annotation>
844
+ <xs:documentation>Whether it is acceptable to scale the image.</xs:documentation>
845
+ </xs:annotation>
846
+ </xs:attribute>
847
+ <xs:attribute name="maintainAspectRatio" type="xs:boolean" use="optional">
848
+ <xs:annotation>
849
+ <xs:documentation>Whether the ad must have its aspect ratio maintained when scales</xs:documentation>
850
+ </xs:annotation>
851
+ </xs:attribute>
852
+ <xs:attribute name="minSuggestedDuration" type="xs:time" use="optional">
853
+ <xs:annotation>
854
+ <xs:documentation>Suggested duration to display non-linear ad, typically for animation to complete. Expressed in standard time format hh:mm:ss</xs:documentation>
855
+ </xs:annotation>
856
+ </xs:attribute>
857
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
858
+ <xs:annotation>
859
+ <xs:documentation>The apiFramework defines the method to use for communication with the nonlinear element</xs:documentation>
860
+ </xs:annotation>
861
+ </xs:attribute>
862
+ </xs:complexType>
863
+ <xs:complexType name="AdSystem_type">
864
+ <xs:simpleContent>
865
+ <xs:extension base="xs:string">
866
+ <xs:attribute name="version" type="xs:string" use="optional">
867
+ <xs:annotation>
868
+ <xs:documentation>Internal version used by ad system</xs:documentation>
869
+ </xs:annotation>
870
+ </xs:attribute>
871
+ </xs:extension>
872
+ </xs:simpleContent>
873
+ </xs:complexType>
874
+ <xs:complexType name="Impression_type">
875
+ <xs:simpleContent>
876
+ <xs:extension base="xs:anyURI">
877
+ <xs:attribute name="id" type="xs:string" use="optional" />
878
+ </xs:extension>
879
+ </xs:simpleContent>
880
+ </xs:complexType>
881
+ <xs:complexType name="Icon_type">
882
+ <xs:sequence>
883
+ <xs:choice>
884
+ <xs:element name="StaticResource" minOccurs="0" maxOccurs="1">
885
+ <xs:annotation>
886
+ <xs:documentation>URL to a static file, such as an image or SWF file</xs:documentation>
887
+ </xs:annotation>
888
+ <xs:complexType>
889
+ <xs:simpleContent>
890
+ <xs:extension base="xs:anyURI">
891
+ <xs:attribute name="creativeType" type="xs:string" use="required">
892
+ <xs:annotation>
893
+ <xs:documentation>Mime type of static resource</xs:documentation>
894
+ </xs:annotation>
895
+ </xs:attribute>
896
+ </xs:extension>
897
+ </xs:simpleContent>
898
+ </xs:complexType>
899
+ </xs:element>
900
+ <xs:element name="IFrameResource" type="xs:anyURI" minOccurs="0" maxOccurs="1">
901
+ <xs:annotation>
902
+ <xs:documentation>URL source for an IFrame to display the companion element</xs:documentation>
903
+ </xs:annotation>
904
+ </xs:element>
905
+ <xs:element name="HTMLResource" type="HTMLResource_type" minOccurs="0" maxOccurs="1">
906
+ <xs:annotation>
907
+ <xs:documentation>HTML to display the companion element</xs:documentation>
908
+ </xs:annotation>
909
+ </xs:element>
910
+ </xs:choice>
911
+ <xs:element name="IconClicks" minOccurs="0" maxOccurs="1">
912
+ <xs:complexType>
913
+ <xs:sequence>
914
+ <xs:element name="IconClickTracking" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
915
+ <xs:annotation>
916
+ <xs:documentation>URLs to ping when user clicks on the the icon.</xs:documentation>
917
+ </xs:annotation>
918
+ </xs:element>
919
+ <xs:element name="IconClickThrough" type="xs:anyURI" minOccurs="0" maxOccurs="1">
920
+ <xs:annotation>
921
+ <xs:documentation>URL to open as destination page when user clicks on the icon.</xs:documentation>
922
+ </xs:annotation>
923
+ </xs:element>
924
+ </xs:sequence>
925
+ </xs:complexType>
926
+ </xs:element>
927
+ <xs:element name="IconViewTracking" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
928
+ <xs:annotation>
929
+ <xs:documentation>URLs to ping when icon is shown.</xs:documentation>
930
+ </xs:annotation>
931
+ </xs:element>
932
+ </xs:sequence>
933
+ <xs:attribute name="program" type="xs:string" use="required">
934
+ <xs:annotation>
935
+ <xs:documentation>Identifies the industry initiative that the icon supports.</xs:documentation>
936
+ </xs:annotation>
937
+ </xs:attribute>
938
+ <xs:attribute name="width" type="xs:integer" use="required">
939
+ <xs:annotation>
940
+ <xs:documentation>Pixel dimensions of icon.</xs:documentation>
941
+ </xs:annotation>
942
+ </xs:attribute>
943
+ <xs:attribute name="height" type="xs:integer" use="required">
944
+ <xs:annotation>
945
+ <xs:documentation>Pixel dimensions of icon.</xs:documentation>
946
+ </xs:annotation>
947
+ </xs:attribute>
948
+ <xs:attribute name="xPosition" use="required">
949
+ <xs:annotation>
950
+ <xs:documentation>The horizontal alignment location (in pixels) or a specific alignment.</xs:documentation>
951
+ </xs:annotation>
952
+ <xs:simpleType>
953
+ <xs:restriction base="xs:string">
954
+ <xs:pattern value='([0-9]*|left|right)' />
955
+ </xs:restriction>
956
+ </xs:simpleType>
957
+ </xs:attribute>
958
+ <xs:attribute name="yPosition" use="required">
959
+ <xs:annotation>
960
+ <xs:documentation>The vertical alignment location (in pixels) or a specific alignment.</xs:documentation>
961
+ </xs:annotation>
962
+ <xs:simpleType>
963
+ <xs:restriction base="xs:string">
964
+ <xs:pattern value='([0-9]*|top|bottom)' />
965
+ </xs:restriction>
966
+ </xs:simpleType>
967
+ </xs:attribute>
968
+ <xs:attribute name="offset" type="xs:time" use="optional">
969
+ <xs:annotation>
970
+ <xs:documentation>Start time at which the player should display the icon. Expressed in standard time format hh:mm:ss.</xs:documentation>
971
+ </xs:annotation>
972
+ </xs:attribute>
973
+ <xs:attribute name="duration" type="xs:time" use="optional">
974
+ <xs:annotation>
975
+ <xs:documentation>The duration for which the player must display the icon. Expressed in standard time format hh:mm:ss.</xs:documentation>
976
+ </xs:annotation>
977
+ </xs:attribute>
978
+ <xs:attribute name="apiFramework" type="xs:string" use="optional">
979
+ <xs:annotation>
980
+ <xs:documentation>The apiFramework defines the method to use for communication with the icon element</xs:documentation>
981
+ </xs:annotation>
982
+ </xs:attribute>
983
+ </xs:complexType>
984
+ <xs:complexType name ="Extensions_type">
985
+ <xs:sequence>
986
+ <xs:element name="Extension" minOccurs="0" maxOccurs="unbounded">
987
+ <xs:annotation>
988
+ <xs:documentation>Any valid XML may be included in the Extensions node</xs:documentation>
989
+ </xs:annotation>
990
+ <xs:complexType>
991
+ <xs:sequence>
992
+ <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##any" />
993
+ </xs:sequence>
994
+ <xs:anyAttribute namespace="##any" processContents="lax" />
995
+ </xs:complexType>
996
+ </xs:element>
997
+ </xs:sequence>
998
+ </xs:complexType>
999
+ <xs:complexType name ="CreativeExtensions_type">
1000
+ <xs:sequence>
1001
+ <xs:element name="CreativeExtension" minOccurs="0" maxOccurs="unbounded">
1002
+ <xs:annotation>
1003
+ <xs:documentation>Any valid XML may be included in the Extensions node</xs:documentation>
1004
+ </xs:annotation>
1005
+ <xs:complexType>
1006
+ <xs:sequence>
1007
+ <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##any" />
1008
+ </xs:sequence>
1009
+ <xs:anyAttribute namespace="##any" processContents="lax" />
1010
+ </xs:complexType>
1011
+ </xs:element>
1012
+ </xs:sequence>
1013
+ </xs:complexType>
1014
+ <xs:complexType name="AdParameters_type">
1015
+ <xs:simpleContent>
1016
+ <xs:extension base="xs:string">
1017
+ <xs:attribute name="xmlEncoded" type="xs:boolean" use="optional">
1018
+ <xs:annotation>
1019
+ <xs:documentation>Specifies whether the parameters are XML-encoded</xs:documentation>
1020
+ </xs:annotation>
1021
+ </xs:attribute>
1022
+ </xs:extension>
1023
+ </xs:simpleContent>
1024
+ </xs:complexType>
1025
+ <xs:complexType name="HTMLResource_type">
1026
+ <xs:simpleContent>
1027
+ <xs:extension base="xs:string">
1028
+ <xs:attribute name="xmlEncoded" type="xs:boolean" use="optional">
1029
+ <xs:annotation>
1030
+ <xs:documentation>Specifies whether the HTML is XML-encoded</xs:documentation>
1031
+ </xs:annotation>
1032
+ </xs:attribute>
1033
+ </xs:extension>
1034
+ </xs:simpleContent>
1035
+ </xs:complexType>
1036
+ </xs:schema>