2009-02-24 33 views
9

私は、クライアントがXHTMLを有効にする必要があるウェブサイトを持っています。 W3Cバリデータを使用してチェックします。XHTML検証、カスタム名前空間、属性

私は自分の名前空間を追加したいので、私はこのようなことを行うことができます属性:

<div my:userid="123"> ... </div> 

私が理解から、カスタム名前空間を定義する限り、私はこれを行うと、完全に有効なXHTMLである:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="http://www.example.com/my"> 

ただし、私のXHTMLは検証に失敗します。この問題は、バリデーターが実際に外に出ておらず、私のカスタム名前空間のカスタムDTD文書をチェックしていないことがわかります。既知のDTDに対してXHTMLだけをチェックします。どのように私はこの問題を解決することができます上の任意の光を捨てることができる? XHTML 1.0の場合

+0

なぜ、バリデーターが名前空間のDTDをチェックするのか分かりません。とにかく、ブラウザはDTDもチェックしていません。私はあなたが実際に適切なXHTMLを使用していない、つまりそのWebページのContent-type:text/htmlヘッダーを送信したと思います。しかし、私は間違っているかもしれません。 –

答えて

6

あなたはXHTML 1.0の要素や属性に制限されています

Normative Definition of XHTML 1.0

をXHTMLのこのバージョンは、厳密要素に限定してから属性であるXHTML 1.0の文書を、準拠の定義を提供XMLとXHTML 1.0の名前空間。

私の理解では、XHTML 2.0はあなたが望むことを実行するためのフレームワークを提供することを目指しています。カスタム名前空間を定義する私が理解から

5

は、完全に有効なXHTML

いやです。カスタム名前空間は完全にであり、XML形式ではとなっていますが、「有効」は、使用されているすべての要素と属性が文書のスキーマで宣言されているという意味です。そのスキーマは、DTD、XMLスキーマ、またはその他のものですが、宣言しなければなりません。

独自のスキーマを宣言して言語にカスタム属性を追加することができます.XHTMLモジュール化によって、これは非常に簡単です。 DOCTYPE>をプロローグに追加すると、DTDへの参照を<として追加する必要があります。名前空間URIを設定するだけでは、XMLプロセッサにスキーマを見つけるためのフックが与えられません。

しかし、あなたが書いたことは、「有効なXHTML」ではなく、「有効な言語 - XHTML」です。これらの 'my​​-languages'の中には、 'XHTML + MathML + SVG'のようによく知られているものもありますが、それでもXHTMLではないので、クライアントが "valid XHTML"で死んでいる場合は使用できません。

あなたはIEの場合、特にDOMの呼び出しのElement。* etAttribute *ファミリで奇妙なことが起きる可能性があります。実際にXML Content-Type(IEでも扱えない)として文書を提供していない限り、ネームスペースのすべてのものは実際にはネームスペースを実際に使用していません。

[X] HTML5では、ユーザーのカスタム属性(主にスクリプト目的)が 'data-'で始まる属性を持つことを許可するという提案があります。しかし、その間に通常の方法は、例えば、クラスのために、別の属性の値を非表示にすることです:

<div class="userid-123">...</div> 

、その後は、スクリプト内でclassNameの上、適切な文字列処理を使用してデータを抽出します。

+0

はい、class属性の値を隠すことは私の代替手段ですが、明らかにそれほどエレガントではなく、少し汚いものがほしいと思っていました。最も洗練されたソリューションは、あなたが言及したように、データで始まる属性名ですが、今のように私はこれを待たなければなりません:-) –

3

私はクライアントがXHTMLを有効にする必要があるウェブサイトを持っています。 W3C バリデータを使用してチェックします。

私はW3Cバリデータは、ないxmlns=を使用しますが、標準のXHTML DTDを取り、は、上記説明しbobinceとして最後のいくつかの属性を追加することで、いくつかの成功を収めてきました。私は、私はあなたが必要なものは、XHTMLが、XHTMLのスーパーセットではないことに同意し、このような

<html metal:define-macro="m"> 

として、PHPTALテンプレートシステムで使用される属性を追加するには、このを使用しています。ただし、クライアントがURLにW3Cバリデーターを指すだけでテストする準備ができている場合は、先に進んでください。アドバイスについては、WDG

+0

http://www.alistapart.com/articles/customdtd/ このようなファイルをW3Cのバリデーターで実行すると、うまくいきます。残念なことに、ブラウザにファイルを表示すると、>が画面に表示されます。このバグを回避する方法はないので、このアプローチは間違いありません。 – davidcl

+0

しかし、記事では、「*働いているアプローチではXHTML DTDを入手し、そのファイルに変更を加える必要があります」と言っています。 これはW3CバリデーターとWDGバリデーターで動作します。 – cjakeman

0

1.0これを本当にやりたい場合は、既存のdtdをダウンロードしてサーバーに保存し、パブリックではなくプライベートを定義する必要があります。しかし、w3cの検証は、元のものに対してのみ有効であるため、渡されません。