有効なHTML5フラグメントのようなものはありますか?
-
30-09-2019 - |
質問
HTMLの断片が、文書の残りの部分がどのように見えるかを知らずに有効であるかどうかを明らかに判断できません(少なくとも、どのルールに対して検証しているかを知るためにDoctypeが必要です)。ただし、次のHTML5フラグメントを考慮してください。
<article><header></article>My header</header><p>My text</p></article>
私は確かにそれであると判断することができます 無効 ドキュメントの残りの部分を見ずに。それで、「暫定的に有効な」HTML、または「有効なドキュメントの特定の場所に適合することを提供する有効な」などのものはありますか?
次のPseudocode以上のものはありますか?
def is_valid_fragment(fragment):
tmp = "<!doctype html><html><head><title></title></head><body>" + fragment + "</body></html>"
return my_HTML5_validator.is_valid_html5_document(tmp)
解決
あなたは確かにAについて話すことができます XML ドキュメントワイン 整形された, 、そして、単一の要素とその子供からドキュメントを作成できます。したがって、あなたは単独で根が張られたXHTML5フラグメントについてよく形成されていることについて話すことができます。複数の根のフラグメントを扱うことができます(次のように <img/><img/>
)ドキュメントのシーケンスとしてそれを扱うか、いくつかの合成コンテナ要素に包むことによって - 私たちは整形ししについてのみ話しているので、それは大丈夫でしょう。
ただし、HTML5は、SGMLの自己閉鎖タグを引き続き許可しています。 <hr>
など、その自己閉鎖性は、Doctypeへのアピールによってのみ決定できます。例えば、 <div><hr></div>
大丈夫ですが、 <div><tr></div>
ではありません。入力としてテキストではなくDOMノードを扱っている場合、これは問題になりますが、テキストがある場合は、それらの要素を処理できるようにHTMLについて十分に知っているパーサーが必要です。しかし、それを超えて、XMLから直接持ち出されたいくつかの非常に簡単なルールは、整形式を処理するのに十分です。
あなたが裕福さを超えて行き、のいくつかの側面を見たいなら 有効, 、XMLを使用して、単独で根を張ったフラグメントレベルでそれを行うことができると思います。仕様が言うように:
XMLドキュメントには、関連するドキュメントタイプ宣言がある場合、およびドキュメントが表明された制約に準拠している場合に有効です。
DTDは任意の要素をルートに名前を付けることができ、その後、メカニックはその要素とその子供、その子供などの関係、および有効性を構成する他のさまざまな制約をチェックすることに注意します。
繰り返しますが、そのアイデアをHTMLに直接転送できます。ただし、根のルートの多いフラグメントをどのように扱うかはわかりません。また、特定のドキュメントの制約(IDSが一意であるなど)がフラグメント内に保持される可能性があるが、フラグメントが挿入された場合はそれ以外の場合は有効なドキュメントでは保持されないことに留意してください。
他のヒント
よく形成されているかどうかを確認できます。