XMLのみネームスペース指定表示例(XMLサイトマップ+XSLT)【NG例】
XML文書を使いサイトマップやサイトマップインデックスを
ブラウザ表示(HTML)する際にはXSLT(スタイルシート)を割り当てて表示します。
XML側にネームスペースを指定しかつ、スタイルシートを割り当てることで、
Googleにインデックス要求ができる妥当なXMLを生成しつつ、
XSLT(スタイルシート)割当例についてご紹介します。
本記事は以下の1コンテンツです。
XMLのみネームスペース指定表示例(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="si3_temp_idx.xsl" ?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <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 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
」
これはサイトマッププロトコルの仕様です。
(参考)sitemaps.org – プロトコル
これに以下の様なスタイルシートを割り当てています。
スタイルシート側には「xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″」の
ネームスペース指定は一切していません。
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>「XMLのみネームスペース指定」(サイトマップインデックス)</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に名前空間指定を行っていない場合と異なって、
これまでのスタイルシート指定のままでは、値が取れていないのが分かります。
XML側の要素に名前空間の指定があるにも関わらず、
XSLT側では一切名前空間の指定が無い為です。(要素がマッチしていない)
よって、Googleがエラーを出力しないように、
XML側に名前空間の指定を行うと、XSLT側にも名前空間の定義がなければ、
正しく値(属性・ノード)にアクセスができない事が分かります。
次は、この点を修正します。
サイトマップでも同様です。
サイトマップの例
まずは、サイトマップの例です。
1 2 3 4 5 6 7 8 9 |
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="si3_temp.xsl" ?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <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 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
」
これはサイトマッププロトコルの仕様です。
(参考)sitemaps.org – プロトコル
これに以下の様なスタイルシートを割り当てています。
スタイルシート側には「xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″」の
ネームスペース指定は一切していません。
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>XMLのみネームスペース指定(サイトマップ)</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> |
この場合、前回のXMLに名前空間指定を行っていない場合と異なって、
これまでのスタイルシート指定のままでは、値が取れていないのが分かります。
XML側の要素に名前空間の指定があるにも関わらず、
XSLT側では一切名前空間の指定が無い為です。(要素がマッチしていない)
よって、Googleがエラーを出力しないように、
XML側に名前空間の指定を行うと、XSLT側にも名前空間の定義がなければ、
正しく値(属性・ノード)にアクセスができない事が分かります。
次は、この点を修正します。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: