Generic Posts Rule pageElement(wedata:400)を解説?


お役に立つとは思えませんが他にも気になっている方がいるかも知れません。私なりにごく簡単な解説を入れます。

(//article[not(contains(../@class,'widget'))][not(contains(@class,'columns four'))][not(contains(@class,'side-contents'))][not(ancestor::*[starts-with(@class,'sidebar')])][not(ancestor::*[contains(@class,'featured') and not(self::body)])]|//*[starts-with(@id,'post-')][not(contains(@id,'nav'))][not(contains(@id,'post-rating'))])[not(.//*[contains(@class,'admz')])][not(self::h2)][not(self::h3)][not(ancestor::*[@id='side' or @class='pickup'])][not(ancestor::aside)][not(id('load-more-posts') or @id='fpost' or contains(@class,'carousel'))][parent::node()[not(@id='side')][not(contains(@class,'thumbnail'))][not(following-sibling::*[not(@id='side')][article or *[starts-with(@id,'post-')]])]/*[self::article or starts-with(@id,'post-')]/following-sibling::*[self::article or starts-with(@id,'post-')][not(contains(@id,'nav'))]]|id('content')[count(div)>1]/div[contains(@class,'post')][not(contains(div/@class,'breadcrumb'))][not(contains(div/@class,'nav'))]

とんでもなく長いXPathですが構造自体はそれほど複雑ではない…はずです。多分。条件式を省いていけば

//article
//*[starts-with(@id,'post-')]
id('content')/div[contains(@class,'post')]

の3つです。実際に更新履歴から2016年の原型をたどると
http://wedata.net/items/400?rev=140619

(//article|//div[starts-with(@id,'post-')])[not(id('load-more-posts') or ancestor::article or ancestor::*[starts-with(@id,'post-') or @id='fpost'])]|id('content')/div[contains(@class,'post')]

これくらいならかわいいものですね。(メガトン構文で)前述したようにここから多野さん(Tanookirby)はデザインへの影響を抑える目的で複雑な条件式を付け加えざるを得ませんでした。その努力の結果、影響は最小限に抑えられています。現状は400の存在を前提にsiteinfoの管理が行われています。

つまりは400のXPathを下手に削ればデザインへ影響が出る可能性が高く、400自体を削除すれば機能しないサイトが大量に出ます。

現状がそれほど問題だとは思っていません。400へのダミーコードはGrieverさんのおかげで2つまでに減りました。*1もし不具合のあるサイトがあれば教えてほしいですが、実用上は拡張側の設定で各個URLを無効化してしまえば十分でしょう。

以上です。意欲のある方は頑張ってください。

*1:2020.7.21現在は3つです