Pregunta

Estoy jugando con la escritura de un complemento jQuery que utiliza un atributo para definir el comportamiento de validación de formularios (sí, estoy consciente de que ya existe un complemento de validación; este es tanto un ejercicio de aprendizaje como algo que usaré) . Idealmente, me gustaría tener algo como esto:

Ejemplo 1 - entrada:

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

Ejemplo 2 - contenedor:

<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>

Ejemplo 3 - predefinido:

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

El objetivo aquí es permitir que mi código jQuery descubra qué elementos necesitan ser validados (esto ya está hecho) y aún así el marcado es XHTML válido, que es con lo que tengo un problema. Estoy bastante seguro de que esto requerirá una combinación de DTD y XML Schema, pero no estoy muy seguro de cómo ejecutar exactamente.

Basado en este artículo , he creado la siguiente 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;

Y aquí está " formvalidation-model-1 " ;:

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

Nunca antes había hecho DTD, así que ni siquiera estoy realmente seguro de lo que estoy haciendo. Cuando ejecuto mi página a través del validador W3 XHTML, obtengo más de 80 errores porque está obteniendo definiciones duplicadas de todos los elementos XHTML. ¿Estoy al menos en el camino correcto? ¿Alguna sugerencia?


EDITAR: Eliminé esta sección de mi DTD personalizada, porque resultó que en realidad era una referencia automática, y el código del que obtuve la plantilla era realmente para combinar dos DTD en uno, no agregar elementos específicos a uno:

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

También eliminé esto, porque no estaba validando, y no parecía estar haciendo nada:

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

Además, decidí que dado que solo estoy agregando un puñado de elementos adicionales, el modelo de archivos separados recomendado por W3 realmente no parece tan útil, por lo que he puesto todo en el archivo dtd, cuyo contenido ahora es esto:

<!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;

Entonces, ahora no obtengo ningún error de validación relacionado con DTD, pero el atributo onvalidate aún no es válido.

Actualización: abandoné el DTD y agregué un esquema: http://schema.dandoes.net/FormValidation/1.0.xsd

El uso de v: onvalidate parece validar en Visual Studio, pero el servicio W3C todavía no le gusta.

Aquí hay una página donde la estoy usando para que pueda ver la fuente:

http://new.dandoes.net/auth

Y aquí está el enlace al resultado de la validación w3c:

http://validator.w3.org/check?uri=http://new.dandoes.net/auth&charset= (detectar + automáticamente) & amp; doctype = Inline & amp; group = 0

¿Esto es lo más cerca que podré llegar con esto, o todavía estoy haciendo algo mal?

¿Fue útil?

Solución

Si desea que el resultado sea XHTML válido, creo que deberá usar XML espacios de nombres en lugar de un DTD personalizado. El DTD no solo define el idioma (y, por lo tanto, un DTD personalizado no es "realmente" XHTML), sino que arrojará cualquier navegador que lo lea en modo peculiaridades , incluso si no se ahogan en el archivo.

El uso de un espacio de nombres, por otro lado, producirá XHTML perfectamente válido (aunque no todos los validadores son conscientes del espacio de nombres y pueden no validarlo correctamente) y permitirá que los navegadores trabajen en modo (casi) estándar.

<!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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top