(srv)XML,XSLT両方ネームスペース指定表示例(XMLサイトマップ+XSLT)【結局これか】XML側に名前空間の指定を行い、XSLT(スタイルシート)にも名前空間の指定をする両方指定の方法でGoogleがエラーにしないXML仕様を満たしつつXSLTでHTML表示ができるように改善します。本記事は以下の1コンテンツです。5.接頭辞を付加して宣言しつつデフォルトで要素にアクセス2(exclude-result-prefixes)XML,XSLT両方ネームスペース指定表示(XMLサイトマップ+XSLT)これまでのサイトマップ、サイトマップインデックスの組み合わせでは、Google側のXML仕様を満たしていないがスタイルシートが割り当てることができたり、XML仕様を満たすとスタイルが反映できなかったりしました。結果として以下の「検証3」部分で利用した、XSLTスタイルシート側に名前空間と接頭辞を定義し、値ヘのアクセスは接頭辞を介して行う。この方法以外に探し出すことができませんでした。(悔しい・・・でも仕様なのだろう・・・)サイトマップインデックスの場合サイトマップの場合の記述例です。XML以下のように指定しています。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>XSLTまた要素へのアクセスも以下のように接頭辞を含ませて指定します。/></td></tr></xsl:for-each></tbody></table></body></html></xsl:template></xsl:stylesheet>適用済みの表示例/sm_demo_tests/si4_both_p3.xmlサイトマップの場合サイトマップの場合の記述例です。XML以下のように指定しています。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>XSLTまた要素へのアクセスも以下のように接頭辞を含ませて指定します。珍しい書き方でもありません。サイトマップであればこれで十分なのですが、より複雑なXML変換を利用するようなケースでは極力接頭辞を省きたい。思って、様々検討をしてみました。以下はすべて「サイトマップ」を検証対象として利用しています。様々な名前空間指定から見るパターンネームスペース(名前空間)をXML側に指定しないと、Googleがエラー扱いにする反面、XMLに名前空間を指定すると、XSLT(スタイルシート)が反映されないという困惑に直面することになります。xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">XSLT側の名前空間指定に対しては以下を設定するパターンです。「xmlns="~"」で指定した「~」部分の名前空間に属することになります。双方が正しく一致しているのだから、これで問題ない・・・と思いますよね。列目の内容を見落してしまったりする可能性があります。式を作成するのはごく当然のことですが、そのような式は空のノード・セットを返すことになります。ような要素が含まれていないためです。名前空間に属しています。式には、その点を反映しなければなりません。名前空間が設定された要素にアクセスするには、該当する名前空間に接頭辞を定義する必要があります。ステップで使用します。サンプル・スタイルシートに示します。アーカイブリンクこの記述による表示例は以下になりますが、うまく表示できません。表示は無言の真っ白表示です。/sm_demo_tests/si4_both_p1_idx.xml2.xpath-default-namespace指定(Version2.0ならこう書ける??)上記リンク先には次のようにも書かれています。デフォルト名前空間と同じような概念はありません。そのため、名前空間の接頭辞を何度も繰り返さなければならなくなります。式で接頭辞が設定されていない要素に適用するデフォルト名前空間を指定することができます。ように単純化されます。接頭辞が至るところに現れるのを避けることができるというのです。実際にやってみますが、やはりうまく表示できません。惜しい、テーブルヘッダ表示まではいくものの列は空表示になってしまいます。/sm_demo_tests/si4_both_p2_idx.xml3.すべてに接頭辞を付加して要素にアクセス(多くはこれを採用)多くのサイトマップなどで見かける指定方法として、XSLT側で要素にアクセスする際にはすべて「接頭辞」を付加して指定する方法です。前述の以下に従うアプローチです。名前空間が設定された要素にアクセスするには、該当する名前空間に接頭辞を定義する必要があります。ステップで使用します。サンプル・スタイルシートに示します。developerWorksXML以下のように指定しています。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>XSLTまた要素へのアクセスも以下のように接頭辞を含ませて指定します。/></td></tr></xsl:for-each></tbody></table></body></html></xsl:template></xsl:stylesheet>適用済みの表示例これは鉄板パターンなのでうまくいきます。/sm_demo_tests/si4_both_p3_idx.xmlだからといってすべてに「sm:」を付けるとなるとミスりそうだし、なんとか回避したい。デフォルトネームスペースを適用したいんですよね。4.接頭辞を付加して宣言しつつデフォルトで要素にアクセス1(exclude-result-prefixes)うまくいけばいいなと甘い期待を持って、宣言部は接頭辞を付ける。要素へのアクセスではデフォルトとしてアクセスしたいという記述を試行します。これは以下を参考に試したものです。これらの属性の値は、接頭辞を空白でつなげたリストです。namespaceノードをresult文書にコピーしなくてよいことを示します。この方法だと、デフォルトnamespaceには接頭辞がないので指定できません。デフォルトnamespaceに対して同様のことを行なうことができます。XHTMLとMathMLのnamespaceについては、namespaceノードがresult文書にコピーされません。アーカイブリンクXML以下のように指定しています。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>XSLTまた要素へのアクセスも以下のように接頭辞を省いて表示できないか試します。/></td></tr></xsl:for-each></tbody></table></body></html></xsl:template></xsl:stylesheet>適用済みの表示例こちらも、テーブルヘッダ表示まではいくものの列は空表示になってしまいます。※version=”1.0′′を指定していますが、version=”2.0′′でも結果は同じです。/sm_demo_tests/si4_both_p4_idx.xml5.接頭辞を付加して宣言しつつデフォルトで要素にアクセス2(exclude-result-prefixes)「exclude-result-prefixes」による指定は別のアプローチでも見かけます。そのまま「exclude-result-prefixes=”sm”」のようにキャンセルするパターンです。XML以下のように指定しています。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>XSLTまた要素へのアクセスも以下のように接頭辞を省いて表示できないか試します。/></td></tr></xsl:for-each></tbody></table></body></html></xsl:template></xsl:stylesheet>適用済みの表示例やはり、テーブルヘッダ表示まではいくものの列は空表示になってしまいます。/sm_demo_tests/si4_both_p5_idx.xml何とか、接頭辞を省いた指定ができる方法があればといろいろ読み漁っては見たものの、これといっていい解決策(抜け道?)には出逢えず、今回は調査終了としました。素直に接頭辞付ければいい。それだけなんですけどね。サイトマップの名前空間の定義と指定については以下の記述方法が参考になります。アーカイブリンク「exclude-result-prefixes」については以下のように書かれています。Identifier)。値は、空白で区切られた名前空間プレフィックスのリストです。プレフィックスに関連付けられた名前空間は、除外された名前空間として指定されます。既定の名前空間を、除外された名前空間として指定できます。シートのサブツリー内でのみ有効です。シートは含まれません。アーカイブリンクどうもこの「exclude-result-prefixes」ちゃんと使えば便利そうなんですけど、どうにも使いどころが分からなかったという印象です。﻿当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、ライセンスフリーでご利用いただいて構いません。コンテンツを有益であると感じていただけましたら非常に光栄です。ありがとうございます。サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。申し訳ございませんが、無断転載、複製をお断りさせて頂いております。すべて省略QRコードからもこのURLを開けます。POSTURLクエリ文字の値渡しの思考回路が完全に逆向きだったことにやっと気づく。QUERY_STRING)ってご存知ですよね。...ドメイン期限更新をし忘れドメインが無効に!まぁ落ち着け金だけの問題だ。Developerサイトが開けない?切り捨てられた過去遺産。Pagesよく見るのでリンクしておきます。ターミナルからもみれますけど。