Living Standard — Last Updated 17 December 2024
この節は非規範的である。
ときには、特定の機械可読なラベル付きコンテンツに注釈を付けることが望ましい。たとえば、ページに合わせてカスタマイズされる一般的なスクリプトを可能にするため、または一貫した方法で単一のスクリプトで処理されることをさまざまな協力する著者由来のコンテンツを可能にするため、など。
この目的に対して、著者は、この章で説明されるmicrodataの機能を使用することができる。Microdataは、既存のコンテンツと並行して、名前と値のペアのネストされたグループを文書に追加することを可能にする。
この節は非規範的である。
高いレベルで、microdataは名前と値のペアのグループで構成される。グループはアイテムと呼ばれ、それぞれの名前-値のペアはプロパティとなる。アイテムおよびプロパティは、通常の要素によって表される。
アイテムを作成するために、itemscope
属性が使用される。
アイテムにプロパティを追加するために、itemprop
属性がアイテムの子孫のいずれかで使用される。
ここでは、プロパティ"name"をそれぞれ持つ、2つの項目がある:
< div itemscope >
< p > My name is < span itemprop = "name" > Elizabeth</ span > .</ p >
</ div >
< div itemscope >
< p > My name is < span itemprop = "name" > Daniel</ span > .</ p >
</ div >
microdata関連の属性なしのマークアップは、microdataモデルには影響しない。
次の2つの例は、前の2つの例とそれぞれ、microdataレベルで厳密に等価である:
< div itemscope >
< p > My < em > name</ em > is < span itemprop = "name" > E< strong > liz</ strong > abeth</ span > .</ p >
</ div >
< section >
< div itemscope >
< aside >
< p > My name is < span itemprop = "name" >< a href = "/?user=daniel" > Daniel</ a ></ span > .</ p >
</ aside >
</ div >
</ section >
プロパティは一般に、文字列である値を持つ。
ここではアイテムが3つのプロパティを持つ:
< div itemscope >
< p > My name is < span itemprop = "name" > Neil</ span > .</ p >
< p > My band is called < span itemprop = "band" > Four Parts Water</ span > .</ p >
< p > I am < span itemprop = "nationality" > British</ span > .</ p >
</ div >
文字列値がURLである場合、その値はa
要素およびそのhref
属性、img
要素およびそのsrc
属性または、リンクまたは埋め込み外部リソースへの他の要素を使用して表現される。
この例においてアイテムは、値がURLである、1つのプロパティ"image"を持つ:
< div itemscope >
< img itemprop = "image" src = "google-logo.png" alt = "Google" >
</ div >
文字列値が人間の消費に適さない何らかの機械読み取り可能な形式である場合、要素のコンテンツで与えられる人間可読なバージョンとともに、data
要素のvalue
属性を使用して表現される。
ここでは、値プロダクトIDであるプロパティを持つアイテムがある。IDは人に優しくないので、製品名がIDの代わりに人間可視のテキストを使用する。
< h1 itemscope >
< data itemprop = "product-id" value = "9678AOU879" > The Instigator 2000</ data >
</ h1 >
数値データに関して、meter
要素とそのvalue
属性を代わりに使用することができる。
ここでは、評価がmeter
要素を用いて与えられる。
< div itemscope itemtype = "http://schema.org/Product" >
< span itemprop = "name" > Panasonic White 60L Refrigerator</ span >
< img src = "panasonic-fridge-60l-white.jpg" alt = "" >
< div itemprop = "aggregateRating"
itemscope itemtype = "http://schema.org/AggregateRating" >
< meter itemprop = "ratingValue" min = 0 value = 3.5 max = 5 > Rated 3.5/5</ meter >
(based on < span itemprop = "reviewCount" > 11</ span > customer reviews)
</ div >
</ div >
同様に、日付および時刻関連データのために、time
要素とそのdatetime
属性を代わりに使用することができる。
この例において、アイテムは、値が日付である1つのプロパティ"birthday"を持つ:
< div itemscope >
I was born on < time itemprop = "birthday" datetime = "2009-05-10" > May 10th 2009</ time > .
</ div >
プロパティはまた、プロパティを宣言する要素にitemscope
属性を置くことで、自身を名前-値ペアのグループとすることができる。
他の一部ではないアイテムは、トップレベルmicrodataアイテムと呼ばれる。
この例において、外側のアイテムは人であり、内側のアイテムはバンドを表す:
< div itemscope >
< p > Name: < span itemprop = "name" > Amanda</ span ></ p >
< p > Band: < span itemprop = "band" itemscope > < span itemprop = "name" > Jazz Band</ span > (< span itemprop = "size" > 12</ span > players)</ span ></ p >
</ div >
ここで外側のアイテムは、2つのプロパティ"name"と"band"を持つ。"name"は"Amanda"であり、"band"は、2つのプロパティ"name"と"size"で、それ自体でアイテムである。バンドの"name"は"Jazz Band"であり、"size"は"12"である。
この例において外側のアイテムは、トップレベルのmicrodataアイテムである。
itemscope
属性をもつ要素の子孫ではないプロパティは、itemref
属性を使用するアイテムに関連付けることができる。この属性は、itemscope
属性をもつ要素の子をクロールすることに加えて、クロールする要素のIDのリストを取る。
この例は前のものと同じであるが、すべてのプロパティは、プロパティのアイテムから分離される:
< div itemscope id = "amanda" itemref = "a b" ></ div >
< p id = "a" > Name: < span itemprop = "name" > Amanda</ span ></ p >
< div id = "b" itemprop = "band" itemscope itemref = "c" ></ div >
< div id = "c" >
< p > Band: < span itemprop = "name" > Jazz Band</ span ></ p >
< p > Size: < span itemprop = "size" > 12</ span > players</ p >
</ div >
これは、前の例と同じ結果になる。最初のアイテムは"name"に"Amanda"を設定され、もう1つのアイテムに"band"を設定される2つのプロパティを持つ。2番目のアイテムはさらに、"Jazz Band"に設定される"name"、および"12"に設定される"size"の2つのプロパティを持つ。
アイテムは、同じ名前と異なる値をもつ複数のプロパティを持つことができる。
この例は、2つのフレーバーでアイスクリームを記述する:
< div itemscope >
< p > Flavors in my favorite ice cream:</ p >
< ul >
< li itemprop = "flavor" > Lemon sorbet</ li >
< li itemprop = "flavor" > Apricot sorbet</ li >
</ ul >
</ div >
よってこれは、2つのプロパティ値"Lemon sorbet"と"Apricot sorbet"と両方の"flavor"を持つアイテムとなる。
プロパティを導入する要素はまた、プロパティの一部が同じ値を持つ場合に重複を避けるため、一度に複数のプロパティを導入することができる。
ここでは、2つのプロパティ"favorite-color"と"favorite-fruit"の両方が値"orange"に設定されるアイテムを示す:
< div itemscope >
< span itemprop = "favorite-color favorite-fruit" > orange</ span >
</ div >
microdataとmicrodataがマークアップされる文書のコンテンツとの間に関係がないことに注意することが重要である。
たとえば、次の2つの例の間に、セマンティックな違いはない:
< figure >
< img src = "castle.jpeg" >
< figcaption >< span itemscope >< span itemprop = "name" > The Castle</ span ></ span > (1986)</ figcaption >
</ figure >
< span itemscope >< meta itemprop = "name" content = "The Castle" ></ span >
< figure >
< img src = "castle.jpeg" >
< figcaption > The Castle (1986)</ figcaption >
</ figure >
両者はキャプションをもつ図を持ち、図とは全く無関係な、名前"name"と値"The Castle"の名前と値のペアをもつアイテムを持つ。唯一の違いは、前者の場合に、ユーザーが文書からキャプションをドラッグする場合、アイテムはドラッグアンドドロップデータに含まれることである。いずれの場合も、アイテムに関連付けられる任意の方法で画像ではない。
この節は非規範的である。
前節の例は、microdataを再使用することを期待しないページに情報がマークアップすることができる方法を示している。しかし、他の著者および読者がマークアップの新たな用途を作るために協力することができる場合にコンテキストで使用されるとき、Microdataは最も有用である。
この目的のために、 "https://example.com/person"や"https://example.org/cat"や"https://band.example.net/"のように、各アイテムに型を与える必要がある。型は、URLとして識別される。
アイテムの型は、itemscope
属性と同じ要素上のitemtype
属性の値として指定される。
ここでは、アイテムの型は"https://example.org/animals#cat"である:
< section itemscope itemtype = "https://example.org/animals#cat" >
< h1 itemprop = "name" > Hedral</ h1 >
< p itemprop = "desc" > Hedral is a male american domestic
shorthair, with a fluffy black fur with white paws and belly.</ p >
< img itemprop = "img" src = "hedral.jpeg" alt = "" title = "Hedral, age 18 months" >
</ section >
この例において、"https://example.org/animals#cat"のアイテムは、"name" ("Hedral")、"desc" ("Hedral is...")、および"img" ("hedral.jpeg")の3つのプロパティを持つ。
型は、このように語彙を選択して、プロパティのコンテキストを与える:型"https://census.example/person"をもつアイテムのために与えられた"class"という名前のプロパティは、個々の経済クラスを参照するかもしれない一方で、型"https://example.com/school/teacher"をもつアイテムのために与えられた"class"という名前のプロパティは、教師が割り当てられている教室を参照するかもしれない。複数の型が語彙を共有することができる。たとえば、型"https://example.org/people/teacher
"および"https://example.org/people/engineer
"は、(おそらくいくつかのプロパティはいずれの場合においても特に有用ではないだろう。たとえば、おそらく"https://example.org/people/engineer
"型は典型的に"classroom
"プロパティで使用されないかもしれないが、)同じ語彙を使用するように定義することができる。同じ語彙を使用するように定義される複数の型は、属性の値で空白区切りのリストとしてURLをリスト化することによって1つのアイテムに付与することができる。しかし、URLが同じ語彙を使用しない場合、アイテムは2つの型を指定することはできない。
この節は非規範的である。
時には、アイテムはグローバル識別子を持つトピックについての情報を与える。たとえば、本はそのISBN番号によって識別することができる。
(itemtype
属性によって識別されるような)語彙は、アイテムがitemid
属性で指定されるURLとしてグローバル識別子を表現することによって明白な方法でアイテムのグローバル識別子に関連付けられるように設計することができる。
itemid
属性で指定されるURLの正確な意味は、使用される語彙に依存する。
ここでアイテムは、特定の本について話している:
< dl itemscope
itemtype = "https://vocab.example.net/book"
itemid = "urn:isbn:0-330-34032-8" >
< dt > Title
< dd itemprop = "title" > The Reality Dysfunction
< dt > Author
< dd itemprop = "author" > Peter F. Hamilton
< dt > Publication date
< dd >< time itemprop = "pubdate" datetime = "1996-01-26" > 26 January 1996</ time >
</ dl >
この例において"https://vocab.example.net/book
"語彙は、itemid
属性が本のISBNを指すurn:
URLを取ることを定義する。
この節は非規範的である。
microdataを使用することは、語彙を使用することを意味する。いくつかの目的のために、アドホックな語彙が適切である。他の場合に、語彙を設計する必要がある。可能であれば、コンテンツを簡単に再利用するように、著者は既存の語彙を再利用することを勧める。
新しい語彙を設計する場合、識別子は、プロパティに、URLを使用するか、(ドットやコロンなしで)プレーンな単語としてのいずれかで作成することができる。URLの場合、他の語彙との競合は、著者が制御しているページに対応する識別子を使用することによってのみ回避することができる。
たとえば、JonとAdamの両者がそれぞれhttps://example.com/~jon/...
とhttps://example.com/~adam/...
のようにexample.comで
コンテンツを記述する場合、彼らはそれぞれ形式"https://example.com/~jon/name"と"https://example.com/~adam/name"の識別子を選択することができる。
名前が単にプレーンな単語であるプロパティは、プロパティが意図する型のコンテキスト内でのみ使用することができる。URLを使用する名前付きプロパティは、任意のタイプのアイテムで再利用することができる。アイテムが型を持たず、かつ他のアイテムの一部ではない場合、そしてそのプロパティが単にプレーンな名前を持つ場合、プロパティはグローバルに一意であることが意図されず、代わりに限定された用途のためのみに意図される。一般的にいえば、著者は、グローバルに一意な名前(URL)をもつプロパティ使用するか、プロパティのアイテムが型付けされていることを確認かのいずれかを勧める。
ここで、アイテムは"https://example.org/animals#cat"であり、プロパティのほとんどは、その型のコンテキストで定義される単語である名前を持つ。名前が他のボキャブラリに由来するいくつかの追加のプロパティもある。
< section itemscope itemtype = "https://example.org/animals#cat" >
< h1 itemprop = "name https://example.com/fn" > Hedral</ h1 >
< p itemprop = "desc" > Hedral is a male American domestic
shorthair, with a fluffy < span
itemprop = "https://example.com/color" > black</ span > fur with < span
itemprop = "https://example.com/color" > white</ span > paws and belly.</ p >
< img itemprop = "img" src = "hedral.jpeg" alt = "" title = "Hedral, age 18 months" >
</ section >
この例は、型"https://example.org/animals#cat"をもつ1つのアイテムと次のプロパティを持つ:
プロパティ | 値 |
name | Hedral |
https://example.com/fn | Hedral |
desc | Hedral is a male American domestic shorthair, with a fluffy black fur with white paws and belly. |
https://example.com/color | black |
https://example.com/color | white |
img | .../hedral.jpeg |
microdataモデルはアイテムとして知られる名前-値ペアのグループで構成される。
各グループは、アイテムとして知られる。各アイテムは、アイテム型、グローバル識別子(アイテム型によって指定される語彙がアイテムのグローバル識別子をサポートする場合)、および名前-値ペアのリストを持つことができる。名前-値ペアのそれぞれの名前は、プロパティとして知られており、各プロパティは、1つ以上の値を持つ。それぞれの値は、文字列または自身の名前-値ペアのグループ(アイテム)のいずれかである。名前は互いに順不同の関係であるが、特定の名前が複数の値を持つ場合、名前は相対的な順序を持つ。
Support in all current engines.
すべてのHTML要素は、itemscope
属性を指定させてもよい。itemscope
属性は真偽属性である。
指定されたitemscope
属性をもつ要素は、名前-値ペアのグループとなる新しいアイテムを作成する。
Support in all current engines.
itemscope
属性をもつ要素は、アイテムのアイテム型を与えるために、itemtype
属性を指定させてもよい。
itemtype
属性が指定される場合、順不同の一意な空白区切りトークンの集合である値を持たなければならない。これは、別のトークンと同一でなく、それぞれが絶対URLで妥当なURL文字列であり、かつこれらのすべては同じ語彙を使用するよう定義される。属性の値は、少なくとも1つのトークンを持たなければならない。
アイテムのアイテム型は、ASCII空白文字で要素のitemtype
属性の値を分割することで得られるトークンである。itemtype
属性が欠損しているまたは解析によりこの方法でトークンが見つからない場合、アイテムはアイテム型を持たないといわれる。
アイテム型は、すべて適用可能な仕様で定義される型でなければならず、すべて同じ語彙を使用するように定義されなければならない。
そうでなければその仕様で指定される場合を除き、アイテム型として指定されるURLは自動的にデリファレンスされるべきでない。
たとえば、仕様は、アイテム型がヘルプ情報をユーザーに提供するためにデリファレンスできることを定義するかもしれない。実際に語彙著者は、指定されるURLで有用な情報を提供することが奨励される。
アイテム型が不透明な識別子であり、どのようにそのアイテム型を使用するアイテムを処理するかを決定するために、ユーザーエージェントは未知のアイテム型をデリファレンスしてはならない、または別の方法でそのアイテム型を分解してはならない。
itemtype
属性は、itemscope
属性を指定されない要素で指定してはならない。
アイテムは、アイテムがアイテム型を持つ、またはアイテムが型付きアイテムのプロパティの値であるかのいずれかの場合、型付きアイテムであるといわれる。型付きアイテムの関連型は、アイテムがいずれかを持つ場合に、アイテムのアイテム型であり、そうでなければ、アイテムはプロパティの値に対してアイテムの関連型である。
Support in all current engines.
アイテムがウェブ上の他の場所でページ上の他のアイテムに関連することができるように、アイテムのグローバル識別子をサポートするために定義される語彙を参照するitemscope
属性およびitemtype
属性をもつ要素はまた、アイテムのグローバル識別子を与えるために、itemid
属性も指定されてもよい。
itemid
属性が指定される場合、潜在的にスペースで囲まれた妥当なURLである値を持たなければならない。
アイテムのグローバル識別子を持つ場合、アイテムのグローバル識別子は、属性が指定される要素のノード文書に関連して解析される、その要素のitemid
属性の値である。itemid
属性が欠損している場合、またはその属性の解析が失敗した場合、グローバル識別子がないと呼ばれる。
itemid
属性は、itemscope
属性と指定されたitemtype
属性の両方を持たない要素で指定してはならず、その語彙の仕様で定義されるように、itemtype
属性がアイテムのグローバル識別子をサポートしない語彙を指定するitemscope
属性をもつ要素に指定してはならない。
グローバル識別子の正確な意味は、語彙の仕様によって決定される。(同じページ上にせよ異なるページ上にせよ)同一のグローバル識別子をもつ複数のアイテムが存在するために許可されるかどうかを定義するかどうかはそのような仕様次第であり、その語彙に対する処理規則は、同じIDをもつ複数のアイテムの扱うケースに対するものである。
Support in all current engines.
itemscope
属性をもつ要素は、アイテムの名前-値ペアを見つけるためにクロールするための追加の要素のリストを与えるために、itemref
属性を指定されてもよい。
itemref
属性は、指定される場合、同じツリー内の要素のIDからなる、別のトークンと同一でない順不同の一意な空白区切りトークンの集合である値を持たなければならない。
itemref
属性は、itemscope
属性に指定されない要素で指定してはならない。
itemref
属性は、microdataデータモデルの一部ではない。この属性は、注釈付けするデータが便利なツリー構造に従わないページに注釈を追加することで著者を支援するための単なる構文構造に過ぎない。この属性は、たとえば、セル内のプロパティを維持しながら、各列が個別のアイテムを定義するために、テーブルにおけるデータをマークアップすることを著者に可能にする。
この例は、鉄道模型メーカーの製品を記述するために使用される単純な語彙を示す。語彙は、ちょうど5つのプロパティ名を持つ:
この語彙は、4つの定義されたアイテム型を持つ:
この語彙を使用する各アイテムは、製品が何であるかに応じて、これらの型の1つ以上を挙げることができる。
よって、機関車は、次のようにマークアップされるかもしれない:
< dl itemscope itemtype = "https://md.example.com/loco
https://md.example.com/lighting" >
< dt > Name:
< dd itemprop = "name" > Tank Locomotive (DB 80)
< dt > Product code:
< dd itemprop = "product-code" > 33041
< dt > Scale:
< dd itemprop = "scale" > HO
< dt > Digital:
< dd itemprop = "digital" > Delta
</ dl >
分岐ランタン改装キットは次のようにマークアップされるかもしれない:
< dl itemscope itemtype = "https://md.example.com/track
https://md.example.com/lighting" >
< dt > Name:
< dd itemprop = "name" > Turnout Lantern Kit
< dt > Product code:
< dd itemprop = "product-code" > 74470
< dt > Purpose:
< dd > For retrofitting 2 < span itemprop = "track-type" > C</ span > Track
turnouts. < meta itemprop = "scale" content = "HO" >
</ dl >
無照明の乗用車は次のようにマークアップされるかもしれない:
< dl itemscope itemtype = "https://md.example.com/passengers" >
< dt > Name:
< dd itemprop = "name" > Express Train Passenger Car (DB Am 203)
< dt > Product code:
< dd itemprop = "product-code" > 8710
< dt > Scale:
< dd itemprop = "scale" > Z
</ dl >
新しい語彙を作成するときには細心の注意が必要である。多くの場合、型に階層的なアプローチをすることは、一般にはるかに簡単に管理することで、各アイテムが単一の型を持つ場合に、語彙をもたらす。
itemprop
属性Support in all current engines.
すべてのHTML要素は、指定されるものが(次に定義する)1つ以上のアイテムに1つ以上のプロパティを追加する場合に、itemprop
属性に指定されていてもよい。
itemprop
属性は、指定される場合、属性が追加する名前-値ペアの名前を表す、別のトークンと同一ではない順不同の一意な空白区切りトークンの集合である値を持たなければならない。属性の値は、少なくとも1つのトークンを持たなければならない。
各トークンは、次のいずれかでなければならない:
定義されたプロパティ名を導入する仕様は、すべてのそのようなプロパティ名が一切U+002E FULL STOP文字(.)、U+003A COLON文字(:)、およびASCII空白文字を含まないことを保証しなければならない。
そうでなければ、規則はURLから区別することができないため、上記の規則は、非URL値でU+003A COLON文字(:)を禁止する。U+002E FULL STOP文字(.)をもつ値は、将来の拡張のために予約される。それ以外の場合は値が複数のトークンとして解析されるので、ASCII空白文字は許可されない。
itemprop
属性をもつ要素が複数のアイテムにプロパティを追加する場合、トークンに関する上記の要件は個別に各アイテムに適用される。
要素のプロパティ名は、要素のitemprop
属性が、保存順だが(それぞれの名前の最初の出現のみ残して)重複が削除される、そのプロパティ名の値がASCII空白文字で分割されるときに含まれることが見出されているトークンである。
アイテムの中で、プロパティがアイテムのプロパティを定義するアルゴリズムによって与えられる順序で並べられるのと同じ名前をもつものを除いて、プロパティは互いに順不同である。
次の例において、"a"プロパティは、その順序で、値"1"と"2"を持つが、"a"プロパティが"b"プロパティの前に来るかどうかは重要ではない:
< div itemscope >
< p itemprop = "a" > 1</ p >
< p itemprop = "a" > 2</ p >
< p itemprop = "b" > test</ p >
</ div >
したがって、次は等価である:
< div itemscope >
< p itemprop = "b" > test</ p >
< p itemprop = "a" > 1</ p >
< p itemprop = "a" > 2</ p >
</ div >
次も同様である:
< div itemscope >
< p itemprop = "a" > 1</ p >
< p itemprop = "b" > test</ p >
< p itemprop = "a" > 2</ p >
</ div >
次も同様である:
< div id = "x" >
< p itemprop = "a" > 1</ p >
</ div >
< div itemscope itemref = "x" >
< p itemprop = "b" > test</ p >
< p itemprop = "a" > 2</ p >
</ div >
itemprop
属性をもつ要素によって追加された名前-値ペアのプロパティ値は、次のリストで最初に一致する場合に与えられるとおりである:
itemscope
属性も持つ場合値は、要素によって作成されたアイテムである。
meta
要素である場合値はもしあれば、要素のcontent
属性の値、該当する属性が存在しない場合には、空の文字列である。
audio
、embed
、iframe
、img
、source
、track
またはvideo
要素である場合この値は、属性が設定された時点で、要素のノード文書を基準とした要素の src
属性の値を指定してencoding-parsing-and-serializing a URLを実行した結果である。そのような属性が存在しない場合、または結果が失敗した場合、空文字列である。
a
、area
またはlink
要素である場合この値は、属性が設定された時点で、要素のノード文書を基準とした要素の href
属性の値を指定してencoding-parsing-and-serializing a URLを実行した結果である。そのような属性が存在しない場合、または結果が失敗した場合、空文字列である。
object
要素である場合この値は、属性が設定された時点で、要素のノード文書を基準とした要素の data
属性の値を指定してencoding-parsing-and-serializing a URLを実行した結果である。そのような属性が存在しない場合、または結果が失敗した場合、空文字列である。
data
要素である場合要素のvalue
属性を持つ場合、値はその値であり、そうでなければ、空文字列である。
meter
要素である場合要素のvalue
属性を持つ場合、値はその値であり、そうでなければ、空文字列である。
time
要素である場合値は、要素のdatetime値である。
値は、要素の子孫のテキストコンテンツである。
URLプロパティ要素はa
、area
、audio
、embed
、iframe
、img
、link
、object
、source
、track
、およびvideo
要素である。
プロパティの定義で定義されているとおりにプロパティの値が絶対URLである場合、プロパティはURLプロパティ要素を使用して指定されなければならない。
プロパティ値がたまたまURL構文と一致するという理由だけでこの要件は適用されない。プロパティが明示的にそのような値をとるように定義される場合にのみ要件は適用される。
たとえば、最初の月面着陸についての本は、"mission:moon"と呼ばれるかもしれない。文字列であるとしてタイトルを定義する語彙から"title"プロパティは、プロパティがURLのように見えるにもかかわらず、タイトルがa
要素に与えられることに期待しない。一方、URLを取るために定義される"title"プロパティを持った"タイトルがURLのように見える本"のための(むしろより狭いスコープな)語彙があった場合、上記の要件のために、そのプロパティはa
要素(または他のURLプロパティ要素のいずれか)でタイトルが与えられることに期待するだろう。
To find the properties of an item defined by the element root, the user agent must run the following steps. These steps are also used to flag microdata errors.
Let results, memory, and pending be empty lists of elements.
Add the element root to memory.
Add the child elements of root, if any, to pending.
If root has an itemref
attribute, split the value of that itemref
attribute on ASCII whitespace. For each resulting token ID, if there is an element in the tree of root with the ID ID, then add the first such element to pending.
While pending is not empty:
Remove an element from pending and let current be that element.
If current is already in memory, there is a microdata error; continue.
Add current to memory.
If current does not have an itemscope
attribute, then: add all the child elements of current to pending.
If current has an itemprop
attribute specified and has one or more property names, then add current to results.
Sort results in tree order.
Return results.
A document must not contain any items for which the algorithm to find the properties of an item finds any microdata errors.
An item is a top-level microdata item if its element does not have an itemprop
attribute.
All itemref
attributes in a Document
must be such that there are no cycles in the graph formed from representing each item in the Document
as a node in the graph and each property of an item whose value is another item as an edge in the graph connecting those two items.
A document must not contain any elements that have an itemprop
attribute that would not be found to be a property of any of the items in that document were their properties all to be determined.
In this example, a single license statement is applied to two works, using itemref
from the items representing the works:
<!DOCTYPE HTML>
< html lang = "en" >
< head >
< title > Photo gallery</ title >
</ head >
< body >
< h1 > My photos</ h1 >
< figure itemscope itemtype = "http://n.whatwg.org/work" itemref = "licenses" >
< img itemprop = "work" src = "images/house.jpeg" alt = "A white house, boarded up, sits in a forest." >
< figcaption itemprop = "title" > The house I found.</ figcaption >
</ figure >
< figure itemscope itemtype = "http://n.whatwg.org/work" itemref = "licenses" >
< img itemprop = "work" src = "images/mailbox.jpeg" alt = "Outside the house is a mailbox. It has a leaflet inside." >
< figcaption itemprop = "title" > The mailbox.</ figcaption >
</ figure >
< footer >
< p id = "licenses" > All images licensed under the < a itemprop = "license"
href = "http://www.opensource.org/licenses/mit-license.php" > MIT
license</ a > .</ p >
</ footer >
</ body >
</ html >
The above results in two items with the type "http://n.whatwg.org/work
", one with:
images/house.jpeg
http://www.opensource.org/licenses/mit-license.php
...and one with:
images/mailbox.jpeg
http://www.opensource.org/licenses/mit-license.php
現在、itemscope
、itemprop
、および他のmicrodata属性は、HTML要素のためにのみ定義される。これは、リテラルな名前"itemscope
"、"itemprop
"などの属性がmicrodata処理をSVGなどの他の名前空間における要素で発生させないことを意味する。
したがって、次の例において、2つでは1つのアイテムのみが存在する。
< p itemscope ></ p > <!-- this is an item (with no properties and no type) -->
< svg itemscope ></ svg > <!-- this is not, it's just an SVG svg
element with an invalid unknown attribute -->
語彙はまたそれ自体で使用可能であるものの、このセクションの語彙は主に、語彙が指定される方法を示すことを意図する。
アイテム型http://microformats.org/profile/hcard
をもつアイテムは、人のまたは組織の連絡先情報を表す。
この語彙は、アイテムに対するグローバル識別子をサポートしない。
次は、型の定義されたプロパティ名である。これらは、値を解釈する方法についての詳細を見つけることができる、vCard Format Specification (vCard)およびその拡張で定義される語彙に基づく。[RFC6350]
kind
アイテムが表す接触の種類を説明する。
値は、kind文字列のいずれかと同一であるテキストでなければならない。
名前kind
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
fn
個人または組織の名前に対応するフォーマット済みのテキストを与える。
値はテキストでなければならない。
厳密に名前fn
をもつ1つのプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在しなければならない。
n
個人または組織の構造化された名前を与える。
値は、family-name
、given-name
、additional-name
、honorific-prefix
、honorific-suffix
のそれぞれの0個以上のアイテムでなければならない。
厳密に名前n
をもつ1つのプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在しなければならない。
family-name
(n
の内部)人の姓、または組織の完全な名前を与える。
値はテキストでなければならない。
名前family-name
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのn
プロパティの値を構成するアイテム内に存在してもよい。
given-name
(n
の内部)人の下の名前を指定する。
値はテキストでなければならない。
名前given-name
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのn
プロパティの値を構成するアイテム内に存在してもよい。
additional-name
(n
の内部)人の任意の追加の名前を提供する。
値はテキストでなければならない。
名前additional-name
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのn
プロパティの値を構成するアイテム内に存在してもよい。
honorific-prefix
(n
の内部)人の敬称接頭辞を与える。
値はテキストでなければならない。
名前honorific-prefix
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのn
プロパティの値を構成するアイテム内に存在してもよい。
honorific-suffix
(n
の内部)人の敬称接尾辞を与える。
値はテキストでなければならない。
名前honorific-suffix
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのn
プロパティの値を構成するアイテム内に存在してもよい。
nickname
個人または組織のニックネームを与える。
ニックネームは、与えられた記述名の代わり、または、人、場所、または物に属する名前に加えるものである。これはまた、fn
またはn
プロパティによって指定される固有名詞のなじみのある形式を指定するために使用することができる。
値はテキストでなければならない。
名前nickname
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
photo
個人または組織の写真を与える。
名前photo
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
bday
個人または組織の誕生日を与える。
名前bday
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
anniversary
個人または組織の誕生日を与える。
名前anniversary
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
sex
人の生物学的性別を与える。
値は、"女性"を意味するF
、"男性"を意味するM
、"該当なし"を意味するN
、"その他"を意味するO
、または"未確認"を意味するU
のいずれかでなければならない。
名前sex
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
gender-identity
人の性同一性を与える。
値はテキストでなければならない。
名前gender-identity
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
adr
個人または組織の配信アドレス(配達先住所)を与える。
値は、0個以上のtype
、post-office-box
、extended-address
、およびstreet-address
プロパティ、および任意のlocality
プロパティ、任意のregion
プロパティ、任意のpostal-code
プロパティ、および任意のcountry-name
プロパティをもつアイテムでなければならない。
型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に一切type
が存在しない場合、アドレス型文字列work
が暗黙で指定される。
名前adr
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
type
(adr
内部)配達先住所のタイプを与える。
値は、address型文字列のいずれかと同一であるテキストでなければならない。
名前type
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテムの中に存在してもよいが、そのような各adr
プロパティアイテム内で個別の値ごとに1つのtype
プロパティのみが存在しなければならない。
post-office-box
(adr
内部)個人または組織の配送先住所の私書箱コンポーネントを与える。
値はテキストでなければならない。
名前post-office-box
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
vCardは、このフィールドを使用しないように著者に促す。
extended-address
(adr
内部)個人または組織の配送先住所の追加コンポーネントを与える。
値はテキストでなければならない。
名前extended-address
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
vCardは、このフィールドを使用しないように著者に促す。
street-address
(adr
内部)個人または組織の配送先住所の追加コンポーネントを与える。
値はテキストでなければならない。
名前street-address
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
locality
(adr
内部)個人または組織の配達先住所の地方コンポーネント(たとえば市)を与える。
値はテキストでなければならない。
名前locality
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
region
(adr
内部)個人または組織の配達先住所の地域コンポーネント(たとえば州や省)を与える。
値はテキストでなければならない。
名前region
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
postal-code
(adr
内部)個人または組織の配達先住所の郵便番号コンポーネントを与える。
値はテキストでなければならない。
名前postal-code
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
country-name
(adr
内部)個人または組織の配送先住所の国名コンポーネントを与える。
値はテキストでなければならない。
名前country-name
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのadr
プロパティの値を構成するアイテム内に存在してもよい。
tel
人または組織の電話番号を与える。
値は、CCITT仕様E.163およびX.121で定義されるとおりの電話番号として解釈することができるテキスト、または0個以上のtype
プロパティおよび厳密に1つのvalue
プロパティをもつアイテムのいずれかでなければならない。[E163] [X121]
型http://microformats.org/profile/hcard
をもつアイテムのtel
プロパティの値を構成するアイテム内に一切type
プロパティが存在しない場合、またはそのようなtel
プロパティの値がテキストである場合、電話型文字列voice
が暗黙で指定される。
名前tel
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
type
(tel
内部)電話番号の種類を与える。
値は、telephone型文字列のいずれかと同一であるテキストでなければならない。
名前type
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのtel
プロパティの値を構成するアイテムの中に存在してもよいが、そのような各tel
プロパティアイテム内で個別の値ごとに1つのtype
プロパティのみが存在しなければならない。
value
(tel
内部)人または組織の実際の電話番号を与える。
値は、CCITT仕様E.163およびX.121で定義されるとおりの電話番号として解釈することができるテキストでなければならない。[E163] [X121]
名前value
をもつ厳密に1つのプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのtel
プロパティの値を構成するアイテム内に存在しなければならない。
email
個人または組織の配信アドレス(配達先住所)を与える。
値はテキストでなければならない。
名前email
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
impp
人または組織とインスタントメッセージングおよびプレゼンスプロトコル通信のためのURLを与える。
名前impp
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
lang
人または組織が理解する言語を与える。
値は、妥当なBCP 47言語タグでなければならない。[BCP47]
名前lang
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
tz
個人または組織のタイムゾーンを与える。
値はテキストでなければならず、次の構文と一致しなければならない:
名前tz
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
geo
個人または組織の地理的な位置を与える。
値はテキストでなければならず、次の構文と一致しなければならない:
アスタリスク(*)でマークされる任意のコンポーネントは含まれるべきであり、それぞれ6桁の数字を持つべきである。
値は、10進数の度で、その順序(すなわち、"LAT LON"の順序)で、緯度および経度を指定する。経度は、それぞれ、正または負の実数として本初子午線の東および西の位置を表す。緯度は、それぞれ、正または負の実数として赤道の北および南の位置を表す。
名前geo
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
title
個人または組織の役職、機能的位置または機能を与える。
値はテキストでなければならない。
名前title
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
role
個人または組織の任務、職業、または業種を与える。
値はテキストでなければならない。
名前role
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
logo
個人または組織のロゴを与える。
名前logo
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
agent
個人または組織を代表して行動する他の人の連絡先情報を与える。
値は、型http://microformats.org/profile/hcard
をもつアイテム、または絶対URL、またはテキストのいずれかでなければならない。
名前agent
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
org
組織の名前および単位を与える。
値は、テキストまたは1つのorganization-name
プロパティおよび0個以上のorganization-unit
プロパティをもつアイテムのいずれかでなければならない。
名前org
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
organization-name
(org
の内部)組織の名前を与える。
値はテキストでなければならない。
名前organization-name
をもつ厳密に1つのプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのorg
プロパティの値を構成するアイテム内に存在しなければならない。
organization-unit
(org
の内部)組織単位の名前を与える。
値はテキストでなければならない。
名前organization-unit
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのorg
プロパティの値を構成するアイテム内に存在してもよい。
member
グループのメンバーを表すURLを与える。
アイテムが値"group
"である名前kind
をもつプロパティも持つ場合、名前member
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
related
別のエンティティとの関係を与える。
値は、1つのurl
プロパティと1つのrel
プロパティをもつアイテムでなければならない。
名前related
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
url
(related
内部)関連するエンティティに対するURLを与える。
名前value
をもつ厳密に1つのプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのrelated
プロパティの値を構成するアイテム内に存在しなければならない。
rel
(related
内部)エンティティと関連するエンティティとの間の関係を与える。
値は、relationship文字列のいずれかと同一であるテキストでなければならない。
名前rel
をもつ厳密に1つのプロパティは、型http://microformats.org/profile/hcard
をもつアイテムのrelated
プロパティの値を構成するアイテム内に存在しなければならない。
categories
個人または組織を分類することができるカテゴリーまたはタグの名前を与える。
値はテキストでなければならない。
名前categories
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
note
人物または組織に関する補足情報またはコメントを与える。
値はテキストでなければならない。
名前note
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
rev
連絡先情報の改訂日時を与える。
値は、妥当なグローバル日付および時刻文字列であるテキストでなければならない。
値は、他の情報のレンディションに対する現在の情報のリビジョンを区別する。
名前rev
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
sound
個人または組織に関連する音声ファイルを与える。
名前sound
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
uid
個人または組織に対応するグローバルに一意な識別子を与える。
値はテキストでなければならない。
名前uid
をもつ単一のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
url
個人または組織に関連するURLを与える。
名前url
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcard
をもつ各アイテム内に存在してもよい。
kind文字列は次のとおり:
individual
単一のエンティティ(たとえば人)を示す。
group
複数のエンティティ(たとえばメーリングリスト)を示す。
org
人ではない(たとえば会社)単一のエンティティを示す。
location
地理的な場所(たとえばオフィスビル)を示す。
address型文字列は次のとおり:
home
住宅の配達先住所を示す。
work
職場の配達先住所を示す。
telephone型文字列は次のとおり:
home
住宅の番号を示す。
work
勤務先の電話番号を示す。
text
電話番号がテキストメッセージ(SMS)をサポートすることを示す。
voice
音声電話番号を示す。
fax
ファクシミリ電話番号を示す。
cell
携帯電話の番号を示す。
video
ビデオ会議の電話番号を示す。
pager
ページングデバイスの電話番号を示す。
textphone
聴覚や言語障害をもつ人のための通信装置を示す。
relationship文字列は次のとおりである:
emergency
緊急連絡。
agent
このエンティティの代わりに作用する別のエンティティ。
XFNで定義された意味を持つ。[XFN]
Given a list of nodes nodes in a Document
, a user agent must run the following algorithm to extract any vCard data represented by those nodes (only the first vCard is returned):
If none of the nodes in nodes are items with the item type http://microformats.org/profile/hcard
, then there is no vCard. Abort the algorithm, returning nothing.
Let node be the first node in nodes that is an item with the item type http://microformats.org/profile/hcard
.
Let output be an empty string.
Add a vCard line with the type "BEGIN
" and the value "VCARD
" to output.
Add a vCard line with the type "PROFILE
" and the value "VCARD
" to output.
Add a vCard line with the type "VERSION
" and the value "4.0
" to output.
Add a vCard line with the type "SOURCE
" and the result of escaping the vCard text string that is the document's URL as the value to output.
If the title
element is not null, add a vCard line with the type "NAME
" and with the result of escaping the vCard text string obtained from the title
element's descendant text content as the value to output.
Let sex be the empty string.
Let gender-identity be the empty string.
For each element element that is a property of the item node: for each name name in element's property names, run the following substeps:
Let parameters be an empty set of name-value pairs.
Run the appropriate set of substeps from the following list. The steps will set a variable value, which is used in the next step.
n
Let value be the empty string.
Append to value the result of collecting the first vCard subproperty named family-name
in subitem.
Append to value the result of collecting the first vCard subproperty named given-name
in subitem.
Append to value the result of collecting the first vCard subproperty named additional-name
in subitem.
Append to value the result of collecting the first vCard subproperty named honorific-prefix
in subitem.
Append to value the result of collecting the first vCard subproperty named honorific-suffix
in subitem.
adr
Let value be the empty string.
Append to value the result of collecting vCard subproperties named post-office-box
in subitem.
Append to value the result of collecting vCard subproperties named extended-address
in subitem.
Append to value the result of collecting vCard subproperties named street-address
in subitem.
Append to value the result of collecting the first vCard subproperty named locality
in subitem.
Append to value the result of collecting the first vCard subproperty named region
in subitem.
Append to value the result of collecting the first vCard subproperty named postal-code
in subitem.
Append to value the result of collecting the first vCard subproperty named country-name
in subitem.
If there is a property named type
in subitem, and the first such property has a value that is not an item and whose value consists only of ASCII alphanumerics, then add a parameter named "TYPE
" whose value is the value of that property to parameters.
org
Let value be the empty string.
Append to value the result of collecting the first vCard subproperty named organization-name
in subitem.
For each property named organization-unit
in subitem, run the following steps:
If the value of the property is an item, then skip this property.
Append a U+003B SEMICOLON character (;) to value.
Append the result of escaping the vCard text string given by the value of the property to value.
http://microformats.org/profile/hcard
and name is related
Let value be the empty string.
If there is a property named url
in subitem, and its element is a URL property element, then append the result of escaping the vCard text string given by the value of the first such property to value, and add a parameter with the name "VALUE
" and the value "URI
" to parameters.
If there is a property named rel
in subitem, and the first such property has a value that is not an item and whose value consists only of ASCII alphanumerics, then add a parameter named "RELATION
" whose value is the value of that property to parameters.
Let value be the result of collecting the first vCard subproperty named value
in subitem.
If there is a property named type
in subitem, and the first such property has a value that is not an item and whose value consists only of ASCII alphanumerics, then add a parameter named "TYPE
" whose value is the value of that property to parameters.
sex
If this is the first such property to be found, set sex to the property's value.
gender-identity
If this is the first such property to be found, set gender-identity to the property's value.
Let value be the property's value.
If element is one of the URL property elements, add a parameter with the name "VALUE
" and the value "URI
" to parameters.
Otherwise, if name is bday
or anniversary
and the value is a valid date string, add a parameter with the name "VALUE
" and the value "DATE
" to parameters.
Otherwise, if name is rev
and the value is a valid global date and time string, add a parameter with the name "VALUE
" and the value "DATE-TIME
" to parameters.
Prefix every U+005C REVERSE SOLIDUS character (\) in value with another U+005C REVERSE SOLIDUS character (\).
Prefix every U+002C COMMA character (,) in value with a U+005C REVERSE SOLIDUS character (\).
Unless name is geo
, prefix every U+003B SEMICOLON character (;) in value with a U+005C REVERSE SOLIDUS character (\).
Replace every U+000D CARRIAGE RETURN U+000A LINE FEED character pair (CRLF) in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Replace every remaining U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF) character in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Add a vCard line with the type name, the parameters parameters, and the value value to output.
If either sex or gender-identity has a value that is not the empty string, add a vCard line with the type "GENDER
" and the value consisting of the concatenation of sex, a U+003B SEMICOLON character (;), and gender-identity to output.
Add a vCard line with the type "END
" and the value "VCARD
" to output.
When the above algorithm says that the user agent is to add a vCard line consisting of a type type, optionally some parameters, and a value value to a string output, it must run the following steps:
Let line be an empty string.
Append type, converted to ASCII uppercase, to line.
If there are any parameters, then for each parameter, in the order that they were added, run these substeps:
Append a U+003B SEMICOLON character (;) to line.
Append the parameter's name to line.
Append a U+003D EQUALS SIGN character (=) to line.
Append the parameter's value to line.
Append a U+003A COLON character (:) to line.
Append value to line.
Let maximum length be 75.
While line's code point length is greater than maximum length:
Append the first maximum length code points of line to output.
Remove the first maximum length code points from line.
Append a U+000D CARRIAGE RETURN character (CR) to output.
Append a U+000A LINE FEED character (LF) to output.
Append a U+0020 SPACE character to output.
Let maximum length be 74.
Append (what remains of) line to output.
Append a U+000D CARRIAGE RETURN character (CR) to output.
Append a U+000A LINE FEED character (LF) to output.
When the steps above require the user agent to obtain the result of collecting vCard subproperties named subname in subitem, the user agent must run the following steps:
Let value be the empty string.
For each property named subname in the item subitem, run the following substeps:
If the value of the property is itself an item, then skip this property.
If this is not the first property named subname in subitem (ignoring any that were skipped by the previous step), then append a U+002C COMMA character (,) to value.
Append the result of escaping the vCard text string given by the value of the property to value.
Return value.
When the steps above require the user agent to obtain the result of collecting the first vCard subproperty named subname in subitem, the user agent must run the following steps:
If there are no properties named subname in subitem, then return the empty string.
If the value of the first property named subname in subitem is an item, then return the empty string.
Return the result of escaping the vCard text string given by the value of the first property named subname in subitem.
When the above algorithms say the user agent is to escape the vCard text string value, the user agent must use the following steps:
Prefix every U+005C REVERSE SOLIDUS character (\) in value with another U+005C REVERSE SOLIDUS character (\).
Prefix every U+002C COMMA character (,) in value with a U+005C REVERSE SOLIDUS character (\).
Prefix every U+003B SEMICOLON character (;) in value with a U+005C REVERSE SOLIDUS character (\).
Replace every U+000D CARRIAGE RETURN U+000A LINE FEED character pair (CRLF) in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Replace every remaining U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF) character in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Return the mutated value.
This algorithm can generate invalid vCard output, if the input does not conform to the rules described for the http://microformats.org/profile/hcard
item type and defined property names.
この節は非規範的である。
これは、"Jack Bauer"と呼ばれる架空のキャラクターのための長いvCardの例である:
< section id = "jack" itemscope itemtype = "http://microformats.org/profile/hcard" >
< h1 itemprop = "fn" >
< span itemprop = "n" itemscope >
< span itemprop = "given-name" > Jack</ span >
< span itemprop = "family-name" > Bauer</ span >
</ span >
</ h1 >
< img itemprop = "photo" alt = "" src = "jack-bauer.jpg" >
< p itemprop = "org" itemscope >
< span itemprop = "organization-name" > Counter-Terrorist Unit</ span >
(< span itemprop = "organization-unit" > Los Angeles Division</ span > )
</ p >
< p >
< span itemprop = "adr" itemscope >
< span itemprop = "street-address" > 10201 W. Pico Blvd.</ span >< br >
< span itemprop = "locality" > Los Angeles</ span > ,
< span itemprop = "region" > CA</ span >
< span itemprop = "postal-code" > 90064</ span >< br >
< span itemprop = "country-name" > United States</ span >< br >
</ span >
< span itemprop = "geo" > 34.052339;-118.410623</ span >
</ p >
< h2 > Assorted Contact Methods</ h2 >
< ul >
< li itemprop = "tel" itemscope >
< span itemprop = "value" > +1 (310) 597 3781</ span > < span itemprop = "type" > work</ span >
< meta itemprop = "type" content = "voice" >
</ li >
< li >< a itemprop = "url" href = "https://en.wikipedia.org/wiki/Jack_Bauer" > I'm on Wikipedia</ a >
so you can leave a message on my user talk page.</ li >
< li >< a itemprop = "url" href = "http://www.jackbauerfacts.com/" > Jack Bauer Facts</ a ></ li >
< li itemprop = "email" >< a href = "mailto:j.bauer@la.ctu.gov.invalid" > j.bauer@la.ctu.gov.invalid</ a ></ li >
< li itemprop = "tel" itemscope >
< span itemprop = "value" > +1 (310) 555 3781</ span > < span >
< meta itemprop = "type" content = "cell" > mobile phone</ span >
</ li >
</ ul >
< ins datetime = "2008-07-20 21:00:00+01:00" >
< meta itemprop = "rev" content = "2008-07-20 21:00:00+01:00" >
< p itemprop = "tel" itemscope >< strong > Update!</ strong >
My new < span itemprop = "type" > home</ span > phone number is
< span itemprop = "value" > 01632 960 123</ span > .</ p >
</ ins >
</ section >
改行はmicrodataで意味があるので、奇数行の折り返しが必要とされる。改行は、たとえばvCard形式に変換中に保存される。
この例は、2つのstreetコンポーネントとともにアドレスを含む(address
要素を使用する)サイトの連絡先の詳細を示す:
< address itemscope itemtype = "http://microformats.org/profile/hcard" >
< strong itemprop = "fn" >< span itemprop = "n" itemscope >< span itemprop = "given-name" > Alfred</ span >
< span itemprop = "family-name" > Person</ span ></ span ></ strong > < br >
< span itemprop = "adr" itemscope >
< span itemprop = "street-address" > 1600 Amphitheatre Parkway</ span > < br >
< span itemprop = "street-address" > Building 43, Second Floor</ span > < br >
< span itemprop = "locality" > Mountain View</ span > ,
< span itemprop = "region" > CA</ span > < span itemprop = "postal-code" > 94043</ span >
</ span >
</ address >
これは、2つの名前-値ペアをもつ単一の項目を作成する。
< span itemscope itemtype = "http://microformats.org/profile/hcard"
>< span itemprop = fn >< span itemprop = "n" itemscope >< span itemprop = "given-name"
> George</ span > < span itemprop = "family-name" > Washington</ span ></ span
></ span ></ span >
片方は名前"fn"と値"George Washington"、もう片方は名前"n"とその値として2つ目のアイテムをもつ。その2つ目のアイテムは2つの名前-値ペアを持ち、それぞれ"George"と"Washington"をもつ"given-name"と"family-name"となる。これは、次のvCardへのマッピングに定義される:
BEGIN:VCARD PROFILE:VCARD VERSION:4.0 SOURCE:document's address FN:George Washington N:Washington;George;;; END:VCARD
アイテム型http://microformats.org/profile/hcalendar#vevent
をもつアイテムはイベントを表す。
この語彙は、アイテムに対するグローバル識別子をサポートしない。
次は、型の定義されたプロパティ名である。これらは、Internet Calendaring and Scheduling Core Object Specification (iCalendar)で定義される語彙に基づいており、値の解釈方法に関する詳細情報を見つけることができる。[RFC5545]
ここで使用されるイベントに関連するiCalendar語彙は一部のみである。この語彙は、完全なiCalendarのインスタンスを表現することはできない。
attach
イベントに関連付けられた文書のアドレスを与える。
名前attach
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
categories
イベントを分類することができるカテゴリーまたはタグの名前を与える。
値はテキストでなければならない。
名前categories
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
class
イベントに関して情報のアクセス分類を与える。
値は次のいずれかの値をもつテキストでなければならない:
public
private
confidential
これは単なる助言であり、機密性の尺度とみなすことはできない。
名前class
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
comment
イベントに関してコメントを与える。
値はテキストでなければならない。
名前comment
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
description
イベントの詳細な説明を与える。
値はテキストでなければならない。
名前description
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
geo
イベントの地理的位置を与える。
値はテキストでなければならず、次の構文と一致しなければならない:
アスタリスク(*)でマークされる任意のコンポーネントは含まれるべきであり、それぞれ6桁の数字を持つべきである。
値は、10進数の度で、その順序(すなわち、"LAT LON"の順序)で、緯度および経度を指定する。経度は、それぞれ、正または負の実数として本初子午線の東および西の位置を表す。緯度は、それぞれ、正または負の実数として赤道の北および南の位置を表す。
名前geo
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
location
イベントの位置を与える。
値はテキストでなければならない。
名前location
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
resources
イベントのために必要とされるリソースを与える。
値はテキストでなければならない。
名前resources
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
ステータス
イベントの確認ステータスを与える。
値は次のいずれかの値をもつテキストでなければならない:
tentative
confirmed
canceled
名前status
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
summary
イベントの要約を与える。
値はテキストでなければならない。
値を使用する場合、ユーザーエージェントは、U+0020 SPACE文字によって値におけるU+000A LINE FEED(LF)文字を置換すべきである。
名前summary
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
dtend
イベントが終了までの日付および時刻を与える。
名前dtstart
をもつプロパティが妥当な日付文字列である名前の値dtend
を含むプロパティを持つ型http://microformats.org/profile/hcalendar#vevent
をもつアイテムの中に存在する場合、名前dtend
をもつプロパティの値もまた妥当な日付文字列となるテキストでなければならない。そうでなければ、プロパティの値は妥当なグローバル日付および時刻文字列となるテキストでなければならない。
いずれの場合も、値は同じアイテムのdtstart
プロパティの値よりも時間的に遅れとなる。
dtend
プロパティによって与えられる時刻はすべてを含んでない。したがって、終日イベントの場合、dtend
プロパティの値はイベント終了後の日となる。
名前dtend
をもつ単一のプロパティは、http://microformats.org/profile/hcalendar#vevent
が名前のduration
をもつプロパティを持たない限り、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内で存在してもよい。
dtstart
イベントが開始する日付および時刻を与える。
値は、妥当な日付文字列または妥当なグローバル日付および時刻文字列のいずれかであるテキストでなければならない。
名前dtstart
をもつ厳密に1つのプロパティは、型http://microformats.org/profile/hcalendar#vevent
で各アイテム内に存在しなければならない。
duration
イベントの継続時間を与える。
値は妥当なvevent期間文字列であるテキストでなければならない。
表される継続時間は、値で整数によって表されるすべての継続時間の合計である。
名前duration
をもつ単一のプロパティは、http://microformats.org/profile/hcalendar#vevent
が名前のdtend
をもつプロパティを持たない限り、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内で存在してもよい。
transp
空き時間の時間検索のために、イベントがカレンダーに時間を消費すると考えられるべきであるかどうかを与える。
値は次のいずれかの値をもつテキストでなければならない:
opaque
透過的
名前transp
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
contact
イベントの連絡先情報を与える。
値はテキストでなければならない。
名前contact
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
url
イベントのURLを与える。
名前url
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
uid
イベントに対応するグローバルに一意な識別子を与える。
値はテキストでなければならない。
名前uid
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
exdate
イベントが繰り返し規則にもかかわらず発生しない日付および時刻を与える。
値は、妥当な日付文字列または妥当なグローバル日付および時刻文字列のいずれかであるテキストでなければならない。
名前exdate
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
rdate
イベントが再発する日付および時刻を与える。
値は、次のいずれかのテキストでなければならない:
名前rdate
をもつ任意の数のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
rrule
イベントが発生する日付および時刻を見つけるための規則を与える。
値は、iCalendarで定義されるRECUR値型と一致するテキストでなければならない。[RFC5545]
名前rrule
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
created
イベント情報がカレンダーシステムで最初に作成された日付および時刻を与える。
値は、妥当なグローバル日付および時刻文字列であるテキストでなければならない。
名前created
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
last-modified
イベント情報がカレンダーシステムで最後に更新された日付および時刻を与える。
値は、妥当なグローバル日付および時刻文字列であるテキストでなければならない。
名前last-modified
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
sequence
イベント情報のリビジョン番号を与える。
名前sequence
をもつ単一のプロパティは、型http://microformats.org/profile/hcalendar#vevent
をもつ各アイテム内に存在してもよい。
次のパターンに一致する場合、文字列は妥当なvevent継続時間文字列である:
A U+0050 LATIN CAPITAL LETTER P文字(P)。
以下のうちの1つをとる:
Given a list of nodes nodes in a Document
, a user agent must run the following algorithm to extract any vEvent data represented by those nodes:
If none of the nodes in nodes are items with the type http://microformats.org/profile/hcalendar#vevent
, then there is no vEvent data. Abort the algorithm, returning nothing.
Let output be an empty string.
Add an iCalendar line with the type "BEGIN
" and the value "VCALENDAR
" to output.
Add an iCalendar line with the type "PRODID
" and the value equal to a user-agent-specific string representing the user agent to output.
Add an iCalendar line with the type "VERSION
" and the value "2.0
" to output.
For each node node in nodes that is an item with the type http://microformats.org/profile/hcalendar#vevent
, run the following steps:
Add an iCalendar line with the type "BEGIN
" and the value "VEVENT
" to output.
Add an iCalendar line with the type "DTSTAMP
" and a value consisting of an iCalendar DATE-TIME string representing the current date and time, with the annotation "VALUE=DATE-TIME
", to output. [RFC5545]
For each element element that is a property of the item node: for each name name in element's property names, run the appropriate set of substeps from the following list:
Skip the property.
dtend
dtstart
exdate
rdate
created
last-modified
Let value be the result of stripping all U+002D HYPHEN-MINUS (-) and U+003A COLON (:) characters from the property's value.
If the property's value is a valid date string then add an iCalendar line with the type name and the value value to output, with the annotation "VALUE=DATE
".
Otherwise, if the property's value is a valid global date and time string then add an iCalendar line with the type name and the value value to output, with the annotation "VALUE=DATE-TIME
".
Otherwise, skip the property.
Add an iCalendar line with the type name and the property's value to output.
Add an iCalendar line with the type "END
" and the value "VEVENT
" to output.
Add an iCalendar line with the type "END
" and the value "VCALENDAR
" to output.
When the above algorithm says that the user agent is to add an iCalendar line consisting of a type type, a value value, and optionally an annotation, to a string output, it must run the following steps:
Let line be an empty string.
Append type, converted to ASCII uppercase, to line.
If there is an annotation:
Append a U+003B SEMICOLON character (;) to line.
Append the annotation to line.
Append a U+003A COLON character (:) to line.
Prefix every U+005C REVERSE SOLIDUS character (\) in value with another U+005C REVERSE SOLIDUS character (\).
Prefix every U+002C COMMA character (,) in value with a U+005C REVERSE SOLIDUS character (\).
Prefix every U+003B SEMICOLON character (;) in value with a U+005C REVERSE SOLIDUS character (\).
Replace every U+000D CARRIAGE RETURN U+000A LINE FEED character pair (CRLF) in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Replace every remaining U+000D CARRIAGE RETURN (CR) or U+000A LINE FEED (LF) character in value with a U+005C REVERSE SOLIDUS character (\) followed by a U+006E LATIN SMALL LETTER N character (n).
Append value to line.
Let maximum length be 75.
While line's code point length is greater than maximum length:
Append the first maximum length code points of line to output.
Remove the first maximum length code points from line.
Append a U+000D CARRIAGE RETURN character (CR) to output.
Append a U+000A LINE FEED character (LF) to output.
Append a U+0020 SPACE character to output.
Let maximum length be 74.
Append (what remains of) line to output.
Append a U+000D CARRIAGE RETURN character (CR) to output.
Append a U+000A LINE FEED character (LF) to output.
This algorithm can generate invalid iCalendar output, if the input does not conform to the rules described for the http://microformats.org/profile/hcalendar#vevent
item type and defined property names.
この節は非規範的である。
これは、イベントをマークアップするためにvEvent語彙を使用するページの例である:
< body itemscope itemtype = "http://microformats.org/profile/hcalendar#vevent" >
...
< h1 itemprop = "summary" > Bluesday Tuesday: Money Road</ h1 >
...
< time itemprop = "dtstart" datetime = "2009-05-05T19:00:00Z" > May 5th @ 7pm</ time >
(until < time itemprop = "dtend" datetime = "2009-05-05T21:00:00Z" > 9pm</ time > )
...
< a href = "http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
rel = "bookmark" itemprop = "url" > Link to this page</ a >
...
< p > Location: < span itemprop = "location" > The RoadHouse</ span ></ p >
...
< p >< input type = button value = "Add to Calendar"
onclick = "location = getCalendar(this)" ></ p >
...
< meta itemprop = "description" content = "via livebrum.co.uk" >
</ body >
getCalendar()
関数は、読者のための練習として残している。
同じページには、ブログへのコピー&ペーストのために、次のようないくつかのマークアップを提供することができる:
< div itemscope itemtype = "http://microformats.org/profile/hcalendar#vevent" >
< p > I'm going to
< strong itemprop = "summary" > Bluesday Tuesday: Money Road</ strong > ,
< time itemprop = "dtstart" datetime = "2009-05-05T19:00:00Z" > May 5th at 7pm</ time >
to < time itemprop = "dtend" datetime = "2009-05-05T21:00:00Z" > 9pm</ time > ,
at < span itemprop = "location" > The RoadHouse</ span > !</ p >
< p >< a href = "http://livebrum.co.uk/2009/05/05/bluesday-tuesday-money-road"
itemprop = "url" > See this event on livebrum.co.uk</ a > .</ p >
< meta itemprop = "description" content = "via livebrum.co.uk" >
</ div >
アイテム型http://n.whatwg.org/work
をもつアイテムは、作品(たとえば、記事、画像、映像、歌など)を表す。この型は、主に著者が作品のライセンス情報を含めることを可能にするために意図される。次は、型の定義されたプロパティ名である。
次は、型の定義されたプロパティ名である。
work
記載されている作品を識別する。
名前work
をもつ厳密に1つのプロパティは、型http://n.whatwg.org/work
で各アイテムの中に存在しなければならない。
title
作品の名前を与える。
名前title
をもつ単一のプロパティは、型http://n.whatwg.org/work
をもつ各アイテム内に存在してもよい。
author
作品の著者または創作者のいずれかの名前または連絡先情報を与える。
値は、型http://microformats.org/profile/hcard
をもつアイテム、またはテキストのいずれかでなければならない。
名前author
をもつ任意の数のプロパティは、型http://n.whatwg.org/work
をもつ各アイテム内に存在してもよい。
license
作品が使用可能なライセンスのいずれかを識別する。
名前license
をもつ任意の数のプロパティは、型http://n.whatwg.org/work
をもつ各アイテム内に存在してもよい。
この節は非規範的である。
この例は、クリエイティブ・コモンズ表示-継承4.0国際ライセンスおよびMITライセンスの下で同時にライセンスされる、My Pondと題する埋め込み画像を示す。
< figure itemscope itemtype = "http://n.whatwg.org/work" >
< img itemprop = "work" src = "mypond.jpeg" >
< figcaption >
< p >< cite itemprop = "title" > My Pond</ cite ></ p >
< p >< small > Licensed under the < a itemprop = "license"
href = "https://creativecommons.org/licenses/by-sa/4.0/" > Creative
Commons Attribution-Share Alike 4.0 International License</ a >
and the < a itemprop = "license"
href = "http://www.opensource.org/licenses/mit-license.php" > MIT
license</ a > .</ small >
</ figcaption >
</ figure >
Given a list of nodes nodes in a Document
, a user agent must run the following algorithm to extract the microdata from those nodes into a JSON form:
Let result be an empty object.
Let items be an empty array.
For each node in nodes, check if the element is a top-level microdata item, and if it is then get the object for that element and add it to items.
Add an entry to result called "items
" whose value is the array items.
Return the result of serializing result to JSON in the shortest possible way (meaning no whitespace between tokens, no unnecessary zero digits in numbers, and only using Unicode escapes in strings for characters that do not have a dedicated escape sequence), and with a lowercase "e
" used, when appropriate, in the representation of any numbers. [JSON]
This algorithm returns an object with a single property that is an array, instead of just returning an array, so that it is possible to extend the algorithm in the future if necessary.
When the user agent is to get the object for an item item, optionally with a list of elements memory, it must run the following substeps:
Let result be an empty object.
If no memory was passed to the algorithm, let memory be an empty list.
Add item to memory.
If the item has any item types, add an entry to result called "type
" whose value is an array listing the item types of item, in the order they were specified on the itemtype
attribute.
If the item has a global identifier, add an entry to result called "id
" whose value is the global identifier of item.
Let properties be an empty object.
For each element element that has one or more property names and is one of the properties of the item item, in the order those elements are given by the algorithm that returns the properties of an item, run the following substeps:
Let value be the property value of element.
If value is an item, then: If value is in memory, then let value be the string "ERROR
". Otherwise, get the object for value, passing a copy of memory, and then replace value with the object returned from those steps.
For each name name in element's property names, run the following substeps:
If there is no entry named name in properties, then add an entry named name to properties whose value is an empty array.
Append value to the entry named name in properties.
Add an entry to result called "properties
" whose value is the object properties.
Return result.
For example, take this markup:
<!DOCTYPE HTML>
< html lang = "en" >
< title > My Blog</ title >
< article itemscope itemtype = "http://schema.org/BlogPosting" >
< header >
< h1 itemprop = "headline" > Progress report</ h1 >
< p >< time itemprop = "datePublished" datetime = "2013-08-29" > today</ time ></ p >
< link itemprop = "url" href = "?comments=0" >
</ header >
< p > All in all, he's doing well with his swim lessons. The biggest thing was he had trouble
putting his head in, but we got it down.</ p >
< section >
< h1 > Comments</ h1 >
< article itemprop = "comment" itemscope itemtype = "http://schema.org/UserComments" id = "c1" >
< link itemprop = "url" href = "#c1" >
< footer >
< p > Posted by: < span itemprop = "creator" itemscope itemtype = "http://schema.org/Person" >
< span itemprop = "name" > Greg</ span >
</ span ></ p >
< p >< time itemprop = "commentTime" datetime = "2013-08-29" > 15 minutes ago</ time ></ p >
</ footer >
< p > Ha!</ p >
</ article >
< article itemprop = "comment" itemscope itemtype = "http://schema.org/UserComments" id = "c2" >
< link itemprop = "url" href = "#c2" >
< footer >
< p > Posted by: < span itemprop = "creator" itemscope itemtype = "http://schema.org/Person" >
< span itemprop = "name" > Charlotte</ span >
</ span ></ p >
< p >< time itemprop = "commentTime" datetime = "2013-08-29" > 5 minutes ago</ time ></ p >
</ footer >
< p > When you say "we got it down"...</ p >
</ article >
</ section >
</ article >
It would be turned into the following JSON by the algorithm above (supposing that the page's URL was https://blog.example.com/progress-report
):
{
"items" : [
{
"type" : [ "http://schema.org/BlogPosting" ],
"properties" : {
"headline" : [ "Progress report" ],
"datePublished" : [ "2013-08-29" ],
"url" : [ "https://blog.example.com/progress-report?comments=0" ],
"comment" : [
{
"type" : [ "http://schema.org/UserComments" ],
"properties" : {
"url" : [ "https://blog.example.com/progress-report#c1" ],
"creator" : [
{
"type" : [ "http://schema.org/Person" ],
"properties" : {
"name" : [ "Greg" ]
}
}
],
"commentTime" : [ "2013-08-29" ]
}
},
{
"type" : [ "http://schema.org/UserComments" ],
"properties" : {
"url" : [ "https://blog.example.com/progress-report#c2" ],
"creator" : [
{
"type" : [ "http://schema.org/Person" ],
"properties" : {
"name" : [ "Charlotte" ]
}
}
],
"commentTime" : [ "2013-08-29" ]
}
}
]
}
}
]
}