HTML 5 ドラフト仕様で定義されているブール属性:
http://dev.w3.org/html5/spec/Overview.html#boolean-attributes
要素にブール属性が存在する場合は真の値を表し、属性が存在しない場合は偽の値を表します。
属性が存在する場合、その値は空の文字列か、大文字と小文字を区別せずに属性の正規名に一致し、先頭または末尾に空白がない値である必要があります。
私のページは html5 DTD を使用しています。独自のヘルパーで content_tag ビュー ヘルパーを使用しようとしていますが、ブール属性を渡す際に問題が発生しています。
具体的には、これは私のヘルパーです:
def itemscope(type, options = {}, &block)
content_tag(
:div, {
:itemscope => true,
:itemtype => data_definition_url(type)
}.merge(options),
true,
&block
)
end
def data_definition_url(type)
"http://data-vocabulary.org/#{type}"
end
私の見解では、次のように呼び出すとしましょう(私はhamlを使用しています):
= itemscope("Organization") do
%h1 Here's some content
これは私がレンダリングしたいものです:
<div itemscope itemtype='http://data-vocabulary.org/Organization'>
<h1>Here's some content</h1>
</div>
しかし、これは私が実際に得ているものです:
<div itemscope='true' itemtype='http://data-vocabulary.org/Organization'>
<h1>Here's some content</h1>
</div>
w3仕様によると、これは無効なマークアップです。ブール属性の有効な値は、属性自体の名前であるか、値がまったくないかのいずれかです。
:itemscope => true
toを変更すると、 div 要素の属性リストの:checked => true
ように属性が正しくレンダリングされるため、面倒です。checked='checked'
ただ...の最小化されたバージョンをレンダリングすることをお勧めしますが、 content_tag オプションをitemscope
使用してそれを行う方法がわかりません。:itemscope => 'itemscope' は非常に簡単に送信できますが、すべての例と仕様が最小化されたバージョンを示しているため、それが Google によって正しく解釈されるかどうかを判断するのは困難です。http://www.google.com/support/webmasters/bin/answer.py?answer=146861を参照 して、これらのプロパティとその使用理由を確認してください (Microdata 形式)
ブール値を文字列化しようとする代わりに、値なしでレンダリングするために content_tag で true または false (ルビーブール値) 値を送信された属性を効果的に取得する方法を知っている人はいますか? ありがとう :)