ネームスペース未指定表示例(XMLサイトマップ+XSLT)【Googleエラー】
XML文書を使いサイトマップやサイトマップインデックスを
ブラウザ表示(HTML)する際にはXSLT(スタイルシート)を割り当てて表示します。
XML側にネームスペースを指定せずスタイルシートを割り当てることで、
最も簡単なXSLT(スタイルシート)割当例についてご紹介します。
本記事は以下の1コンテンツです。
この方法は最も初歩的な構成でスタイルを割り当てますが、
XML文書のネームスペース指定を省いている為、
Googleのサイトマップ登録ではエラーが表示されます(食べてはくれます)
あくまでも1例、サンプルとしてお考えください。
型 | 問題 | 説明 |
---|---|---|
エラー | 誤ったネームスペース | サイトマップまたはサイトマップ インデックス ファイルのネームスペース宣言が不適切です。 |
Googleへの登録が目的であれば、以下の例が一番シンプルかと思います。
ネームスペース未指定表示例(XMLサイトマップ+XSLT)
Googleがエラーを吐くと言っても、
「XMLに対してスタイルが割り当てられない」
「値が表示されない」といったスタイル指定の失敗を解消するには、
まずこういうシンプルな例から作成し、修正していく方が無難です。
サイトマップインデックスの例
まずは、サイトマップインデックスの例です。
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si1_temp_idx.xsl" ?> <sitemapindex> <sitemap><loc>https://rensrv.com/sm_demo/sitmap_100.xml</loc><lastmod>2018-05-30</lastmod></sitemap> <sitemap><loc>https://rensrv.com/sm_demo/sitmap_200.xml</loc><lastmod>2018-05-30</lastmod></sitemap> <sitemap><loc>https://rensrv.com/sm_demo/sitmap_300.xml</loc><lastmod>2018-05-30</lastmod></sitemap> <sitemap><loc>https://rensrv.com/sm_demo/sitmap_400.xml</loc><lastmod>2018-05-30</lastmod></sitemap> <sitemap><loc>https://rensrv.com/sm_demo/sitmap_500.xml</loc><lastmod>2018-05-30</lastmod></sitemap> </sitemapindex> |
通常、3行目の「<sitemapindex>
」の部分は、
「<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
」と書きます。
これはサイトマッププロトコルの仕様です。
(参考)sitemaps.org – プロトコル
この「xmlns=""
」部分が名前空間(ネームスペース)の指定です。
ここではそれを省略しています。
Google先生がエラーを吐いているのは、
ここの部分が指定されていない事に起因しています。
これに以下の様なスタイルシートを割り当てます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>sitemap_index_xml</title> </head> <body> <h1>NS指定なしで整形(サイトマップインデックス)</h1> <table border="1"> <thead> <tr> <th>サイトマップURL</th> <th>最終更新</th> </tr> </thead> <tbody> <xsl:for-each select="sitemapindex/sitemap"> <tr> <td><a target="_blank"><xsl:attribute name="href"><xsl:value-of select="loc" /></xsl:attribute><xsl:value-of select="loc" /></a></td> <td><xsl:value-of select="lastmod" /></td> </tr> </xsl:for-each> </tbody> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
以下URLでXMLを表示するとXMLにスタイルシートが適用された
サイトマップインデックス表示が確認できます。
HTMLタグの途中に<xsl:~>のタグで、
表示するXML文書の何を表示するかを指定しています。
3行目でXMLの開始点である「/
」を指定します。
途中はHTMLとして表示したい固定出力部分を記述し、
17行目から各サイトマップのレコードを1行ずつループ処理を開始します。
この時「select="sitemapindex/sitemap"
」と要素タグの階層を指定します。
ループ内部では、各要素タグである「select="loc"
」「select="lastmod"
」で、
ループ処理の子要素を指定して、値を取得しています。
サイトマップの例
次は、サイトマップの例です。
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si1_temp.xsl" ?> <urlset> <url><loc>https://rensrv.com/weekday/1900/01/01/</loc><lastmod>2018-05-30</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> <url><loc>https://rensrv.com/weekday/1900/01/02/</loc><lastmod>2018-05-30</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> <url><loc>https://rensrv.com/weekday/1900/01/03/</loc><lastmod>2018-05-30</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> <url><loc>https://rensrv.com/weekday/1900/01/04/</loc><lastmod>2018-05-30</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> <url><loc>https://rensrv.com/weekday/1900/01/05/</loc><lastmod>2018-05-30</lastmod><changefreq>monthly</changefreq><priority>0.5</priority></url> </urlset> |
通常、3行目の「<urlset>
」の部分は、
「<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
」と書きます。
これはサイトマッププロトコルの仕様です。
(参考)sitemaps.org – プロトコル
この「xmlns=""
」部分が名前空間(ネームスペース)の指定です。
ここではそれを省略しています。
これに以下の様なスタイルシートを割り当てます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>sitemap_xml</title> </head> <body> <h1>NS指定なしで整形(サイトマップ)</h1> <table border="1"> <thead> <tr> <th>インデックス対象URL</th> <th>最終更新</th> <th>頻度</th> <th>優先度</th> </tr> </thead> <tbody> <xsl:for-each select="urlset/url"> <tr> <td><a target="_blank"><xsl:attribute name="href"><xsl:value-of select="loc" /></xsl:attribute><xsl:value-of select="loc" /></a></td> <td><xsl:value-of select="lastmod" /></td> <td><xsl:value-of select="changefreq" /></td> <td><xsl:value-of select="priority" /></td> </tr> </xsl:for-each> </tbody> </table> </body> </html> </xsl:template> </xsl:stylesheet> |
以下URLでXMLを表示するとXMLにスタイルシートが適用された
サイトマップ表示が確認できます。
HTMLタグの途中に<xsl:~>のタグで、
表示するXML文書の何を表示するかを指定しています。
3行目でXMLの開始点である「/
」を指定します。
途中はHTMLとして表示したい固定出力部分を記述し、
19行目から各サイトマップのレコードを1行ずつループ処理を開始します。
この時「select="urlset/url"
」と要素タグの階層を指定します。
ループ内部では、各要素タグである
「select="loc"
」「select="lastmod"
」「select="changefreq"
」「select="priority
“」で、
ループ処理の子要素を指定して、値を取得しています。
さらっと読んでいる限りは、
特に躓きそうなポイントもないように感じるかもしれませんが、
意外とXSLTのスタイル指定がうまくいかずに悩むことが多いものです。
まずは一番シンプルな形のスタイル指定の例をご紹介しました。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: