2009-02-24 16 views
9

Tengo un sitio web que un cliente necesita para ser válido en XHTML. Lo verifican usando el validador W3C.Validación XHTML, espacios de nombres y atributos personalizados

Quiero añadir mi propio espacio de nombres y atributos para que pueda hacer cosas como esta:

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

Por lo que entiendo, la definición de espacios de nombres personalizados es XHTML perfectamente válido, siempre y cuando hago esto:

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

Sin embargo, mi XHTML falla la validación. El problema parece ser que el validador en realidad no sale y verifica mi documento DTD personalizado para mi espacio de nombres personalizado, solo comprueba el XHTML contra las DTD conocidas. ¿Alguien capaz de arrojar alguna luz sobre cómo puedo resolver este problema?

+0

No entiendo por qué el validador verificaría el DTD para el espacio de nombres. De todos modos, el navegador no comprueba DTD también, y me inclino a creer que realmente no usas XHTML adecuado, es decir, enviaste Content-type: text/html headers para esa página web. Pero puedo estar equivocado. –

Respuesta

6

para XHTML 1.0 que están restringidos a XHTML 1.0 Los elementos y atributos:

Normative Definition of XHTML 1.0

Esta versión de XHTML proporciona una definición de estrictamente conformes XHTML 1.0 documentos que se encuentran restringidos a los elementos y atributos de los espacios de nombres XML y XHTML 1.0.

Tengo entendido que XHTML 2.0 tiene como objetivo proporcionar un marco para hacer lo que desee.

5

Por lo que entiendo, la definición de espacios de nombres personalizados es perfectamente válido XHTML

Nop. Los espacios de nombres personalizados son perfectamente bien formados en XML, pero 'válido' tiene el significado específico de que cada elemento y atributo utilizado se declara en el esquema del documento. Ese esquema puede ser una DTD, un Esquema XML u otra cosa, pero debe declararlo.

Así que puede declarar su propio esquema para agregar atributos personalizados al idioma, y ​​de hecho la Modularización XHTML lo hace muy fácil. Tendría que agregar la referencia a la DTD como <! DOCTYPE> en el prólogo; el solo hecho de configurar los URI de espacio de nombres no le da ningún gancho a ningún procesador XML para encontrar el esquema en sí mismo.

Pero entonces lo que ha escrito es "válido my-language-which-is-bit-like-XHTML", y no "valid XHTML". Algunos de estos 'mis idiomas' son conocidos, como 'XHTML + MathML + SVG', pero aún no es XHTML como tal y si su cliente está inactivo en "XHTML válido" no puede usar ninguno de ellos.

También tiene posibles problemas con el navegador, especialmente con IE, que (antes de IE8) hace algunas cosas extrañas con la familia Element. * EtAttribute * de llamadas DOM. Y a menos que realmente esté sirviendo el documento como un tipo de contenido XML (que IE tampoco puede manejar), todas las cosas de su espacio de nombres en realidad no usan espacios de nombres.

En [X] HTML5 hay una propuesta para permitir que los atributos personalizados del usuario (principalmente para fines de scripting) vayan en atributos cuyos nombres comiencen con 'data-'. Pero mientras tanto, el método usual es para ocultar los valores en otro atributo, por ejemplo de la clase:

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

y luego extraer los datos mediante el procesamiento de cadenas adecuados sobre className en escritura.

+0

Sí, esconder los valores en el atributo de clase es mi solución alternativa, pero obviamente no es muy elegante y quería algo un poco menos "sucio". La solución más elegante son los nombres de atributos que comienzan con datos, como usted mencionó, pero parece que por ahora tendré que esperar esto :-) –

3

Tengo un sitio web que un cliente necesita para ser válido en XHTML. Lo verifican usando el validador W3C .

que he tenido algo de éxito con el validador del W3C utilizando, no xmlns=, pero teniendo el estándar XHTML DTD y la adición de unos pocos atributos al final como bobince describe anteriormente. Estoy usando esto para añadir atributos utilizados por el sistema de plantillas PHPTAL, como

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

Estoy de acuerdo que lo que necesitamos no es XHTML sino un superconjunto de XHTML. Sin embargo, si su cliente está preparado para realizar pruebas simplemente apuntando el validador W3C a su URL, continúe. Para obtener asesoramiento, consulte WDG

+0

http://www.alistapart.com/articles/customdtd/ Si ejecuta un archivo de este tipo a través del validador W3C, encontrará que se valida maravillosamente bien ... Desafortunadamente, cuando visualiza el archivo en un navegador, aparece]> en la pantalla. No hay forma de evitar este error, por lo que este enfoque es correcto. – davidcl

+0

Pero el artículo continúa diciendo "Un enfoque que * sí funciona * requiere que obtenga la DTD XHTML y agregue sus modificaciones a ese archivo". Funciona para mí en el validador W3C y también el validador WDG. – cjakeman

0

1.0 no se permite esto. Si realmente desea hacerlo, debe descargar dtd existente y guardarlo en su servidor y definir privado en lugar de público. pero la validación de w3c no se aprobó porque valida solo contra el original