これは、Javascript の専門家にとっては簡単なはずです。
スキーマとは何か ( http://schema.org )を知らない人のために説明すると、これは検索エンジンが Web ページのコンテンツを読み取るための新しい方法です。関連するデータに特定のタグを付けることで機能します。
それが何であるかを知っている人のために、ページ上でデータがどのように見えるかを簡単に調べることができるchrome 拡張機能 (スキーマ エクスプローラー) を次に示します。例を参照してください。
現在:拡張機能には、by is が空のネストされた要素をスキップ/無視しないという小さな問題があります。以下に 2 つの例を示します。1 つ目は完全に機能しますが、2 つ目<div>
はタグが空のために失敗します。
最初の例は動作します:
<div itemscope="" itemtype="http://schema.org/Movie">
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
秒の例では問題が発生します:
<div itemscope="" itemtype="http://schema.org/Movie">
<div>
<h1 itemprop="name">Avatar</h1>
<div itemprop="director" itemscope="" itemtype="http://schema.org/Person">
Director: <span itemprop="name">James Cameron</span> (born <span itemprop="birthDate">August 16, 1954</span>)
</div>
<span itemprop="genre">Science fiction</span>
<a href="http://pierreloicdoulcet.fr/movies/avatar-theatrical-trailer.html" itemprop="trailer">Trailer</a>
</div>
</div>
私は拡張機能を見てきましたが、実際には、ほとんどの作業を行う 1 つの JavaScript ファイルと非常にうまくまとめられています。ループを実行するコードは次のとおりですが、空のネストされた要素をスキップできる必要があり、一般的にもう少し堅牢である必要があります。
var __explore = function(node, parentData)
{
if (parentData === null || parentData === undefined)
{
parentData = __dataTree;
}
if (node.getAttribute)
{
var isItemScope = node.getAttribute('itemscope');
var hasItemProp = node.getAttribute('itemprop');
var itemtype = node.getAttribute('itemtype');
var childs = node.childNodes;
var i = 0;
var tmp = new Array();
while (i < childs.length)
{
if (isItemScope !== null)
__explore(childs[i], tmp);
else
__explore(childs[i], null);
++i;
}
if (isItemScope !== null)
{
parentData.push({name : 'scope', value : hasItemProp, type : itemtype, childs : [tmp], node : node});
}
else if (hasItemProp && parentData)
{
parentData.push({name : hasItemProp, value : node.innerText});
}
}
}
https://gist.github.com/3413475の完全なバージョンは次のとおりです。contentscript.js
うまくいけば、誰かがこれで私を助けてくれます。記録のために、私は著者に連絡しましたが、彼はもっと緊急の問題で頭がいっぱいです。