sitemap_generator 4.0.1 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ./
3
3
  specs:
4
- sitemap_generator (4.0.1)
4
+ sitemap_generator (4.1.0)
5
5
  builder
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -7,7 +7,7 @@ Sitemaps adhere to the [Sitemap 0.9 protocol][sitemap_protocol] specification.
7
7
  ## Features
8
8
 
9
9
  * Framework agnostic
10
- * Supports [News sitemaps][sitemap_news], [Video sitemaps][sitemap_video], [Image sitemaps][sitemap_images], [Geo sitemaps][sitemap_geo], [Mobile sitemaps][sitemap_mobile] and [Alternate Links][alternate_links]
10
+ * Supports [News sitemaps][sitemap_news], [Video sitemaps][sitemap_video], [Image sitemaps][sitemap_images], [Geo sitemaps][sitemap_geo], [Mobile sitemaps][sitemap_mobile], [PageMap sitemaps][sitemap_pagemap] and [Alternate Links][alternate_links]
11
11
  * Supports read-only filesystems like Heroku via uploading to a remote host like Amazon S3
12
12
  * Compatible with Rails 2 & 3 and tested with Ruby REE, 1.9.2 & 1.9.3
13
13
  * Adheres to the [Sitemap 0.9 protocol][sitemap_protocol]
@@ -103,6 +103,7 @@ That's it! Welcome to the future!
103
103
 
104
104
  ## Changelog
105
105
 
106
+ * v4.1.0: [PageMap sitemap][using_pagemaps] support.
106
107
  * v4.0.1: Add a post install message regarding the naming convention change.
107
108
  * **v4.0: NEW, NON-BACKWARDS COMPATIBLE CHANGES.** See above for more info. `create_index` defaults to `:auto`. Define `SitemapGenerator::SimpleNamer` class for simpler custom namers compatible with the new naming conventions. Deprecate `sitemaps_namer`, `sitemap_index_namer` and their respective namer classes. It's more just that their usage is discouraged. Support `nofollow` option on alternate links. Fix formatting of `publication_date` in News sitemaps.
108
109
  * v3.4: Support [alternate links][alternate_links] for urls; Support configurable options in the `SitemapGenerator::S3Adapter`
@@ -827,15 +828,15 @@ end
827
828
 
828
829
  #### Supported options
829
830
 
830
- * `:publication_name`
831
- * `:publication_language`
832
- * `:publication_date`
833
- * `:genres`
834
- * `:access`
835
- * `:title`
836
- * `:keywords`
837
- * `:stock_tickers`
838
-
831
+ * `:news` - Hash
832
+ * `:publication_name`
833
+ * `:publication_language`
834
+ * `:publication_date`
835
+ * `:genres`
836
+ * `:access`
837
+ * `:title`
838
+ * `:keywords`
839
+ * `:stock_tickers`
839
840
 
840
841
  ### Image Sitemaps
841
842
 
@@ -854,12 +855,12 @@ end
854
855
 
855
856
  #### Supported options
856
857
 
857
- * `:loc` Required, location of the image
858
- * `:caption`
859
- * `:geo_location`
860
- * `:title`
861
- * `:license`
862
-
858
+ * `:images` - Array of hashes
859
+ * `:loc` Required, location of the image
860
+ * `:caption`
861
+ * `:geo_location`
862
+ * `:title`
863
+ * `:license`
863
864
 
864
865
  ### Video Sitemaps
865
866
 
@@ -885,9 +886,27 @@ end
885
886
 
886
887
  #### Supported options
887
888
 
888
- * `:thumbnail_loc` - Required, string.
889
-
890
-
889
+ * `:video`/`:videos` - Hash or array of hashes, respectively
890
+ * `:thumbnail_loc` - String, URL of the thumbnail image.
891
+ * `:title` - String, title of the video.
892
+ * `:description` - String, description of the video.
893
+ * `:content_loc` - String, URL. One of content_loc or player_loc must be present.
894
+ * `:player_loc` - String, URL. One of content_loc or player_loc must be present.
895
+ * `:allow_embed` - Boolean, attribute of player_loc.
896
+ * `:autoplay` - Boolean, default true. Attribute of player_loc.
897
+ * `:duration` - Integer or string. Duration in seconds.
898
+ * `:expiration_date`
899
+ * `:rating`
900
+ * `:view_count` - Integer or string.
901
+ * `:publication_date`
902
+ * `:tags` - Array of string tags.
903
+ * `:tag` - String, single tag.
904
+ * `:category`
905
+ * `:family_friendly`- Boolean
906
+ * `:gallery_loc` - String, URL.
907
+ * `:gallery_title` - Title attribute of the gallery location element
908
+ * `:uploader`
909
+ * `:uploader_info` - Info attribute of uploader element
891
910
 
892
911
  ### Geo Sitemaps
893
912
 
@@ -904,8 +923,40 @@ end
904
923
 
905
924
  #### Supported options
906
925
 
907
- * `:format` Required, either 'kml' or 'georss'
926
+ * `:geo` - Hash
927
+ * `:format` - Required, string, either `'kml'` or `'georss'`
928
+
929
+ ### PageMap Sitemaps
930
+
931
+ Pagemaps can be added by passing a `:pagemap` hash to `add`. The hash must contain a `:dataobjects` key with an array of dataobject hashes. Each dataobject hash contains a `:type` and `:id`, and an optional array of `:attributes`. Each attribute hash can contain two keys: `:name` and `:value`, with string values. For more information consult the [official documentation on PageMaps][using_pagemaps].
932
+
933
+ #### Supported options
934
+
935
+ * `:pagemap` - Hash
936
+ * `:dataobjects` - Required, array of hashes
937
+ * `:type` - Required, string, type of the object
938
+ * `:id` - String, ID of the object
939
+ * `:attributes` - Array of hashes
940
+ * `:name` - Required, string, name of the attribute.
941
+ * `:value` - String, value of the attribute.
908
942
 
943
+ #### Example:
944
+
945
+ ```ruby
946
+ SitemapGenerator::Sitemap.default_host = "http://www.example.com"
947
+ SitemapGenerator::Sitemap.create do
948
+ add('/blog/post', :pagemap => {
949
+ :dataobjects => [{
950
+ :type => 'document',
951
+ :id => 'hibachi',
952
+ :attributes => [
953
+ { :name => 'name', :value => 'Dragon' },
954
+ { :name => 'review', :value => '3.5' },
955
+ ]
956
+ }]
957
+ })
958
+ end
959
+ ```
909
960
 
910
961
  ### Alternate Links
911
962
 
@@ -930,9 +981,10 @@ end
930
981
 
931
982
  #### Supported options
932
983
 
933
- * `:href` - Required, string.
934
- * `:lang` - Required, string.
935
- * `:nofollow` - Optional, boolean. Used to mark link as "nofollow".
984
+ * `:alternate`/`:alternates` - Hash or array of hashes, respectively
985
+ * `:href` - Required, string.
986
+ * `:lang` - Required, string.
987
+ * `:nofollow` - Optional, boolean. Used to mark link as "nofollow".
936
988
 
937
989
  ## Raison d'être
938
990
 
@@ -1010,6 +1062,7 @@ Copyright (c) 2009 Karl Varga released under the MIT license
1010
1062
  [sitemap_news]:http://www.google.com/support/webmasters/bin/topic.py?hl=en&topic=10078
1011
1063
  [sitemap_geo]:http://www.google.com/support/webmasters/bin/topic.py?hl=en&topic=14688
1012
1064
  [sitemap_mobile]:http://support.google.com/webmasters/bin/answer.py?hl=en&answer=34648
1065
+ [sitemap_pagemap]:https://developers.google.com/custom-search/docs/structured_data#addtositemap
1013
1066
  [sitemap_protocol]:http://sitemaps.org/protocol.php
1014
1067
  [video_tags]:http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=80472#4
1015
1068
  [image_tags]:http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=178636
@@ -1019,3 +1072,4 @@ Copyright (c) 2009 Karl Varga released under the MIT license
1019
1072
  [include_index_change]:https://github.com/kjvarga/sitemap_generator/issues/70
1020
1073
  [ehoch]:https://github.com/ehoch
1021
1074
  [alternate_links]:http://support.google.com/webmasters/bin/answer.py?hl=en&answer=2620865
1075
+ [using_pagemaps]:https://developers.google.com/custom-search/docs/structured_data#pagemaps
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.0.1
1
+ 4.1.0
@@ -36,6 +36,7 @@ module SitemapGenerator
36
36
  xmlns:geo="http://www.google.com/geo/schemas/sitemap/1.0"
37
37
  xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"
38
38
  xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0"
39
+ xmlns:pagemap="http://www.google.com/schemas/sitemap-pagemap/1.0"
39
40
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
40
41
  >
41
42
  HTML
@@ -29,6 +29,7 @@ module SitemapGenerator
29
29
  # * +news+
30
30
  # * +mobile+
31
31
  # * +alternate+/+alternates+
32
+ # * +pagemap+
32
33
  def initialize(path, options={})
33
34
  options = options.dup
34
35
  if sitemap = path.is_a?(SitemapGenerator::Builder::SitemapFile) && path
@@ -36,9 +37,10 @@ module SitemapGenerator
36
37
  path = sitemap.location.path_in_public
37
38
  end
38
39
 
39
- SitemapGenerator::Utilities.assert_valid_keys(options, :priority, :changefreq, :lastmod, :host, :images, :video, :geo, :news, :videos, :mobile, :alternate, :alternates)
40
+ SitemapGenerator::Utilities.assert_valid_keys(options, :priority, :changefreq, :lastmod, :host, :images, :video, :geo, :news, :videos, :mobile, :alternate, :alternates, :pagemap)
40
41
  SitemapGenerator::Utilities.reverse_merge!(options, :priority => 0.5, :changefreq => 'weekly', :lastmod => Time.now, :images => [], :news => {}, :videos => [], :mobile => false, :alternates => [])
41
42
  raise "Cannot generate a url without a host" unless SitemapGenerator::Utilities.present?(options[:host])
43
+
42
44
  if video = options.delete(:video)
43
45
  options[:videos] = video.is_a?(Array) ? options[:videos].concat(video) : options[:videos] << video
44
46
  end
@@ -59,7 +61,8 @@ module SitemapGenerator
59
61
  :videos => options[:videos],
60
62
  :geo => options[:geo],
61
63
  :mobile => options[:mobile],
62
- :alternates => options[:alternates]
64
+ :alternates => options[:alternates],
65
+ :pagemap => options[:pagemap]
63
66
  )
64
67
  end
65
68
 
@@ -141,6 +144,18 @@ module SitemapGenerator
141
144
  unless SitemapGenerator::Utilities.blank?(self[:mobile])
142
145
  builder.mobile :mobile
143
146
  end
147
+
148
+ unless SitemapGenerator::Utilities.blank?(self[:pagemap])
149
+ builder.pagemap :PageMap do
150
+ SitemapGenerator::Utilities.as_array(self[:pagemap][:dataobjects]).each do |dataobject|
151
+ builder.pagemap :DataObject, :type => dataobject[:type], :id => dataobject[:id] do
152
+ SitemapGenerator::Utilities.as_array(dataobject[:attributes]).each do |attribute|
153
+ builder.pagemap :Attribute, attribute[:value], :name => attribute[:name]
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
144
159
  end
145
160
  builder << '' # Force to string
146
161
  end
@@ -49,6 +49,18 @@ module SitemapGenerator
49
49
  hash
50
50
  end
51
51
 
52
+ # Make a list of `value` if it is not a list already. If `value` is
53
+ # nil, an empty list is returned. If `value` is already a list, return it unchanged.
54
+ def as_array(value)
55
+ if value.nil?
56
+ []
57
+ elsif value.is_a?(Array)
58
+ value
59
+ else
60
+ [value]
61
+ end
62
+ end
63
+
52
64
  # Rounds the float with the specified precision.
53
65
  #
54
66
  # x = 1.337
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ describe "SitemapGenerator" do
4
+
5
+ it "should add the pagemap sitemap element" do
6
+ pagemap_xml_fragment = SitemapGenerator::Builder::SitemapUrl.new('my_page.html', {
7
+ :host => 'http://www.example.com',
8
+
9
+ :pagemap => {
10
+ :dataobjects => [
11
+ {
12
+ type: 'document',
13
+ id: 'hibachi',
14
+ attributes: [
15
+ {name: 'name', value: 'Dragon'},
16
+ {name: 'review', value: 3.5},
17
+ ]
18
+ },
19
+ {
20
+ type: 'stats',
21
+ attributes: [
22
+ {name: 'installs', value: 2000},
23
+ {name: 'comments', value: 200},
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ }).to_xml
29
+
30
+ doc = Nokogiri::XML.parse(pagemap_xml_fragment)
31
+
32
+ url = doc.at_xpath("//url")
33
+ loc = url.at_xpath("loc")
34
+ loc.text.should == 'http://www.example.com/my_page.html'
35
+
36
+ pagemap = doc.at_xpath("//PageMap")
37
+ pagemap.children.count.should == 2
38
+ pagemap.at_xpath('//DataObject').attributes['type'].value.should == 'document'
39
+ pagemap.at_xpath('//DataObject').attributes['id'].value.should == 'hibachi'
40
+ pagemap.at_xpath('//DataObject').children.count.should == 2
41
+ first_attribute = pagemap.at_xpath('//DataObject').children.first
42
+ second_attribute = pagemap.at_xpath('//DataObject').children.last
43
+ first_attribute.text.should == 'Dragon'
44
+ first_attribute.attributes['name'].value.should == 'name'
45
+ second_attribute.text.should == '3.5'
46
+ second_attribute.attributes['name'].value.should == 'review'
47
+
48
+ xml_fragment_should_validate_against_schema(pagemap, 'http://www.google.com/schemas/sitemap-pagemap/1.0', 'sitemap-pagemap')
49
+ end
50
+ end
@@ -47,4 +47,23 @@ describe SitemapGenerator::Utilities do
47
47
  SitemapGenerator::Utilities.falsy?(nil).should be_false
48
48
  end
49
49
  end
50
+
51
+ describe "as_array" do
52
+ it "should return an array unchanged" do
53
+ SitemapGenerator::Utilities.as_array([]).should == []
54
+ SitemapGenerator::Utilities.as_array([1]).should == [1]
55
+ SitemapGenerator::Utilities.as_array([1,2,3]).should == [1,2,3]
56
+ end
57
+
58
+ it "should return empty array on nil" do
59
+ SitemapGenerator::Utilities.as_array(nil).should == []
60
+ end
61
+
62
+ it "should make array of item otherwise" do
63
+ SitemapGenerator::Utilities.as_array('').should == ['']
64
+ SitemapGenerator::Utilities.as_array(1).should == [1]
65
+ SitemapGenerator::Utilities.as_array('hello').should == ['hello']
66
+ SitemapGenerator::Utilities.as_array({}).should == [{}]
67
+ end
68
+ end
50
69
  end
@@ -0,0 +1,97 @@
1
+
2
+ <?xml version="1.0" encoding="UTF-8"?>
3
+ <xsd:schema
4
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
5
+ targetNamespace="http://www.google.com/schemas/sitemap-pagemap/1.0"
6
+ xmlns="http://www.google.com/schemas/sitemap-pagemap/1.0"
7
+ elementFormDefault="qualified">
8
+
9
+ <xsd:annotation>
10
+ <xsd:documentation>
11
+ XML Schema for the PageMap Sitemap extension. This schema defines the
12
+ PageMap-specific elements only; the core Sitemap elements are defined
13
+ separately.
14
+
15
+ Copyright 2011 Google Inc. All Rights Reserved.
16
+ </xsd:documentation>
17
+ </xsd:annotation>
18
+
19
+ <xsd:element name="PageMap">
20
+ <xsd:complexType>
21
+ <xsd:sequence>
22
+ <xsd:element name="Template" minOccurs="0">
23
+ <xsd:annotation>
24
+ <xsd:documentation>
25
+ Template file specification. Can be used for overriding the
26
+ default rendering of search results delivered via
27
+ Google Custom Search Engine.
28
+ </xsd:documentation>
29
+ </xsd:annotation>
30
+ <xsd:complexType>
31
+ <xsd:attribute name="src" type="xsd:anyURI" use="required">
32
+ <xsd:annotation>
33
+ <xsd:documentation>
34
+ Reference to a template file. A template file contains a set of
35
+ ResultSpecs, which, given DataObjects of appropriate types on
36
+ the page, renders a search result based on the key-value pairs
37
+ found in those DataObjects. If the template file is not
38
+ specified, Google will use the default predefined set of
39
+ templates tailored to popular content.
40
+ </xsd:documentation>
41
+ </xsd:annotation>
42
+ </xsd:attribute>
43
+ </xsd:complexType>
44
+ </xsd:element>
45
+ <xsd:element name="DataObject" minOccurs="0" maxOccurs="unbounded">
46
+ <xsd:complexType>
47
+ <xsd:sequence>
48
+ <xsd:element name="Attribute" minOccurs="0" maxOccurs="unbounded">
49
+ <xsd:annotation>
50
+ <xsd:documentation>
51
+ Either 'value' attribute or text content must be set, but
52
+ not both.
53
+ </xsd:documentation>
54
+ </xsd:annotation>
55
+ <xsd:complexType>
56
+ <xsd:simpleContent>
57
+ <xsd:extension base="xsd:string">
58
+ <xsd:attribute name="name" type="xsd:string" use="required">
59
+ <xsd:annotation>
60
+ <xsd:documentation>
61
+ Name of the attribute.
62
+ </xsd:documentation>
63
+ </xsd:annotation>
64
+ </xsd:attribute>
65
+ <xsd:attribute name="value" type="xsd:string">
66
+ <xsd:annotation>
67
+ <xsd:documentation>
68
+ Value of the attribute.
69
+ </xsd:documentation>
70
+ </xsd:annotation>
71
+ </xsd:attribute>
72
+ </xsd:extension>
73
+ </xsd:simpleContent>
74
+ </xsd:complexType>
75
+ </xsd:element>
76
+ </xsd:sequence>
77
+ <xsd:attribute name="type" type="xsd:string" use="required">
78
+ <xsd:annotation>
79
+ <xsd:documentation>
80
+ Type of the object.
81
+ </xsd:documentation>
82
+ </xsd:annotation>
83
+ </xsd:attribute>
84
+ <xsd:attribute name="id" type="xsd:string">
85
+ <xsd:annotation>
86
+ <xsd:documentation>
87
+ ID of the object.
88
+ </xsd:documentation>
89
+ </xsd:annotation>
90
+ </xsd:attribute>
91
+ </xsd:complexType>
92
+ </xsd:element>
93
+ </xsd:sequence>
94
+ </xsd:complexType>
95
+ </xsd:element>
96
+
97
+ </xsd:schema>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sitemap_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-03 00:00:00.000000000Z
13
+ date: 2013-06-03 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mocha
17
- requirement: &70331845270060 !ruby/object:Gem::Requirement
17
+ requirement: &70338921097240 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70331845270060
25
+ version_requirements: *70338921097240
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: nokogiri
28
- requirement: &70331845269600 !ruby/object:Gem::Requirement
28
+ requirement: &70338921096640 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70331845269600
36
+ version_requirements: *70338921096640
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &70331845267820 !ruby/object:Gem::Requirement
39
+ requirement: &70338921096180 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70331845267820
47
+ version_requirements: *70338921096180
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: builder
50
- requirement: &70331845267400 !ruby/object:Gem::Requirement
50
+ requirement: &70338921095700 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,7 +55,7 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70331845267400
58
+ version_requirements: *70338921095700
59
59
  description: SitemapGenerator is an XML Sitemap generator written in Ruby with automatic
60
60
  Rails integration. It supports Video, News, Image and Geo sitemaps and includes
61
61
  Rake tasks for managing your sitemaps.
@@ -115,6 +115,7 @@ files:
115
115
  - spec/sitemap_generator/link_set_spec.rb
116
116
  - spec/sitemap_generator/mobile_sitemap_spec.rb
117
117
  - spec/sitemap_generator/news_sitemap_spec.rb
118
+ - spec/sitemap_generator/pagemap_sitemap_spec.rb
118
119
  - spec/sitemap_generator/sitemap_generator_spec.rb
119
120
  - spec/sitemap_generator/sitemap_groups_spec.rb
120
121
  - spec/sitemap_generator/sitemap_location_spec.rb
@@ -131,6 +132,7 @@ files:
131
132
  - spec/support/schemas/sitemap-geo.xsd
132
133
  - spec/support/schemas/sitemap-mobile.xsd
133
134
  - spec/support/schemas/sitemap-news.xsd
135
+ - spec/support/schemas/sitemap-pagemap.xsd
134
136
  - spec/support/schemas/sitemap-video.xsd
135
137
  - spec/support/schemas/sitemap.xsd
136
138
  - spec/support/xml_macros.rb
@@ -161,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
163
  version: '0'
162
164
  segments:
163
165
  - 0
164
- hash: 4173052129675694505
166
+ hash: -1019294574066130331
165
167
  required_rubygems_version: !ruby/object:Gem::Requirement
166
168
  none: false
167
169
  requirements:
@@ -170,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
172
  version: '0'
171
173
  segments:
172
174
  - 0
173
- hash: 4173052129675694505
175
+ hash: -1019294574066130331
174
176
  requirements: []
175
177
  rubyforge_project:
176
178
  rubygems_version: 1.8.10
@@ -196,6 +198,7 @@ test_files:
196
198
  - spec/sitemap_generator/link_set_spec.rb
197
199
  - spec/sitemap_generator/mobile_sitemap_spec.rb
198
200
  - spec/sitemap_generator/news_sitemap_spec.rb
201
+ - spec/sitemap_generator/pagemap_sitemap_spec.rb
199
202
  - spec/sitemap_generator/sitemap_generator_spec.rb
200
203
  - spec/sitemap_generator/sitemap_groups_spec.rb
201
204
  - spec/sitemap_generator/sitemap_location_spec.rb
@@ -212,6 +215,7 @@ test_files:
212
215
  - spec/support/schemas/sitemap-geo.xsd
213
216
  - spec/support/schemas/sitemap-mobile.xsd
214
217
  - spec/support/schemas/sitemap-news.xsd
218
+ - spec/support/schemas/sitemap-pagemap.xsd
215
219
  - spec/support/schemas/sitemap-video.xsd
216
220
  - spec/support/schemas/sitemap.xsd
217
221
  - spec/support/xml_macros.rb