XSLTのみネームスペース指定表示例(XMLサイトマップ+XSLT)【Googleエラー】
XML文書を使いサイトマップやサイトマップインデックスを
ブラウザ表示(HTML)する際にはXSLT(スタイルシート)を割り当てて表示します。
XML側にネームスペースを指定しかつ、スタイルシートを割り当てることで、
Googleにインデックス要求ができる妥当なXMLを生成しつつ、
XSLT(スタイルシート)割当例についてご紹介します。
本記事は以下の1コンテンツです。
この方法は初歩的な構成でスタイルを割り当てますが、
XML文書のネームスペース指定を省いている為、
Googleのサイトマップ登録ではエラーが表示されます(食べてはくれます)
あくまでも1例、サンプルとしてお考えください。
型 | 問題 | 説明 |
---|---|---|
エラー | 誤ったネームスペース | サイトマップまたはサイトマップ インデックス ファイルのネームスペース宣言が不適切です。 |
Googleへの登録が目的であれば、以下の例が一番シンプルかと思います。
概要
XSLTのみネームスペース指定表示例(XMLサイトマップ+XSLT)
XML文書にネームスペースの指定を行わず、
XSLT(スタイルシート)を反映し、可読性を高めた表示ができる指定方法です。
サイトマップインデックスの例
まずは、サイトマップインデックスの例です。
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 – プロトコル
これに以下の様なスタイルシートを割り当てています。
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 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>sitemap_index_xml</title> </head> <body> <h1>「XSLTのみネームスペース指定」(サイトマップインデックス)</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にスタイルシートが適用された
サイトマップインデックス表示が確認できます。
スタイルが反映されない例
ちなみに私が躓いた失敗ポイントとして、
1行が違うだけでうまくスタイル反映がされませんのでご注意下さい。
スタイルシートの「<html>」タグ部分の名前空間指定を省略します。
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 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <xsl:template match="/"> <html> <head><title>sitemap_index_xml</title> </head> <body> <h1>「XSLTのみネームスペース指定」(サイトマップインデックス)</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> |
XMLの方は同じです(スタイルファイル指定のみ異なります)
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si2_temp_idx_nothml.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> |
では実際の表示をご確認ください。
スタイルが反映されないままの平文が表示されている事と思います。
値だけはちゃんと出力されているので、処理はされているのですが。
サイトマップの例
まずは、サイトマップインデックスの例です。
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si2_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行目の「<sitemapindex>
」の部分は、
「<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
」と書きます。
これはサイトマッププロトコルの仕様です。
(参考)sitemaps.org – プロトコル
これに以下の様なスタイルシートを割り当てています。
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 34 35 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>sitemap_xml</title> </head> <body> <h1>XSLTのみネームスペース指定(サイトマップ)</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にスタイルシートが適用された
サイトマップインデックス表示が確認できます。
スタイルが反映されない例
ちなみに私が躓いた失敗ポイントとして、
1行が違うだけでうまくスタイル反映がされませんのでご注意下さい。
スタイルシートの「<html>」タグ部分の名前空間指定を省略します。
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 |
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <xsl:template match="/"> <html> <head><title>sitemap_index_xml</title> </head> <body> <h1>「sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9」で出力</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> |
XMLの方は同じです(スタイルファイル指定のみ異なります)
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si2_temp_nohtml.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> |
では実際の表示をご確認ください。
スタイルが反映されないままの平文が表示されている事と思います。
値だけはちゃんと出力されているので、処理はされているのですが。
この例を見れば、XML側にネームスペース指定がない状態で、
XSLT側に独自にスタイル指定を行うだけでも、
表示上は十分に要件を満たすことが分かります。
このままではGoogleは食べてくれるものの、エラーだと怒るわけですけども・・・。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: