8

属性を使用してフォームの検証動作を定義する jQuery プラグインの作成をいじっています (はい、検証プラグインが既にあることは承知しています。これは、使用するものと同じくらい学習課題です)。理想的には、次のようなものが欲しいです。

例 1 - 入力:

<input id="name" type="text" v:onvalidate="return this.value.length > 0;" />

例 2 - ラッパー:

<div v:onvalidate="return $(this).find('[value]').length > 0;">
   <input id="field1" type="text" />
   <input id="field2" type="text" />
   <input id="field3" type="text" />
</div>

例 3 - 定義済み:

<input id="name" type="text" v:validation="not empty" />

ここでの目標は、どの要素を検証する必要があるか (これは既に行われています) を jQuery コードが把握できるようにし、マークアップを有効な XHTML のままにすることです。これが問題です。これには、DTD と XML スキーマの両方の組み合わせが必要になると確信していますが、正確にどのように実行すればよいかはよくわかりません。

この記事に基づいて、次の DTD を作成しました。

<!ENTITY % XHTML1-formvalidation1
    PUBLIC  "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
            "http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;

<!ENTITY % Inlspecial.extra 
  "%div.qname; " >

<!ENTITY % xhmtl-model.mod
    SYSTEM "formvalidation-model-1.mod" >  
<!ENTITY % xhtml11.dtd
    PUBLIC  "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;

そして、ここに「formvalidation-model-1」があります:

<!ATTLIST %div.qname;
    %onvalidation   CDATA   #IMPLIED
    %XHTML1-formvalidation1.xmlns.extra.attrib;
>

私はこれまで DTD をやったことがないので、自分が何をしているのか正確にはわかりません。W3 XHTML バリデーターを使用してページを実行すると、すべての XHTML 要素の定義が重複しているため、80 以上のエラーが発生します。私は少なくとも正しい軌道に乗っていますか?助言がありますか?


編集: カスタム DTD からこのセクションを削除しました。これは、実際には自己参照であることが判明したためです。テンプレートを取得したコードは、特定の項目を 1 つに追加するのではなく、2 つの DTD を 1 つに結合するためのものでした。

<!ENTITY % XHTML1-formvalidation1
    PUBLIC  "-//W3C//DTD XHTML 1.1 +FormValidation 1.0//EN"
            "http://new.dandoes.net/DTD/FormValidation1.dtd" >
%XHTML1-formvalidation1;

これも検証しておらず、何もしていないようだったので削除しました。

<!ENTITY % Inlspecial.extra 
  "%div.qname; " >

さらに、いくつかのアイテムを追加するだけなので、W3 が推奨する個別のファイル モデルはあまり役に立たないように思えたので、すべてを dtd ファイルに入れました。その内容は次のとおりです。 :

<!ATTLIST div onvalidate CDATA  #IMPLIED>
<!ENTITY % xhtml11.dtd
    PUBLIC  "-//W3C//DTD XHTML 1.1//EN"
            "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml11.dtd;

そのため、DTD 関連の検証エラーは発生していませんが、onvalidate 属性はまだ有効ではありません。

更新: DTD を捨ててスキーマを追加しました: http://schema.dandoes.net/FormValidation/1.0.xsd

v:onvalidate を使用すると、Visual Studio で検証されているように見えますが、W3C サービスはまだ気に入っていません。

ソースを確認できるように、これを使用しているページを次に示します。

http://new.dandoes.net/auth

w3c 検証結果へのリンクは次のとおりです。

http://validator.w3.org/check?uri=http://new.dandoes.net/auth&charset=(検出+自動)&doctype=Inline&group=0

これは私がこれで得ることができるのと同じくらい近いですか、それともまだ何か間違っていますか?

4

1 に答える 1

7

結果を有効な XHTML にしたい場合は、カスタム DTD ではなくXML 名前空間を使用する必要があると思います。DTD は言語を定義するだけでなく(したがって、カスタム DTD は「実際には」XHTML ではありません)、それを読み取ったブラウザーは、たとえファイルを詰まらせなくてもquirks モードにスローされます。

一方、名前空間を使用すると、完全に有効な XHTML が生成され (ただし、すべてのバリデーターが名前空間を認識しているわけではなく、正しく検証されない場合があります)、ブラウザーが (ほぼ) 標準モードで動作できるようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="http://example.com/ns/validation" xml:lang="en">
    <head><title>Validation Example</title></head>

    <body>
        <input id="name1" type="text" v:onvalidate="return this.value.length &gt; 0;"/>
        <input id="name2" type="text" v:validation="not empty"/>
    </body>
</html>
于 2009-01-12T17:16:36.437 に答える