validar xml contra dtd

carlos777
03 de Enero del 2005
Hola:
Estoy intentando hacer un programa al que le pasan un archivo xml y tengo q comprobar, antes de hacer nada, que este bien formado y q sea valido contra un dtd q tengo. ¿Como lo hago? Estoy trabajando, ademas, con un parser SAX, por si es necesario saberlo...
De antemano, muchas gracias por la ayuda.

wlopez
03 de Enero del 2005
Revisa este ejemplo:
ejercicio_1.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE listado SYSTEM "ejercicio_1.dtd">
<listado>
<lista-alumnos> "Datos Personales"</lista-alumnos>
<datos-del-curso>"Datos del Curso"</datos-del-curso>
<sonia>

<encabezado>
<alumno>
<matricula>4324323
</matricula>
<apaterno>Vidal
</apaterno>
<amaterno>Perez
</amaterno>
<nombre>Abril
</nombre>
<clave_curso>50
</clave_curso>
<periodo>1995
</periodo>
<clave_grupo>2
</clave_grupo>
</alumno>

<alumno>
<matricula>9090030
</matricula>
<apaterno>Robles
</apaterno>
<amaterno>Ramirez
</amaterno>
<nombre>Dario
</nombre>
<clave_curso>50
</clave_curso>
<periodo>1995
</periodo>
<clave_grupo>2
</clave_grupo>
</alumno>

<alumno>
<matricula>1090030
</matricula>
<apaterno>Munoz
</apaterno>
<amaterno>Matamoros
</amaterno>
<nombre>Johana
</nombre>
<clave_curso>51
</clave_curso>
<periodo>1995
</periodo>
<clave_grupo>1
</clave_grupo>

</alumno>

<alumno>
<matricula>2030060
</matricula>
<apaterno>Nelson
</apaterno>
<amaterno>Perez
</amaterno>
<nombre>Laura
</nombre>
<clave_curso>51
</clave_curso>
<periodo>1996
</periodo>
<clave_grupo>3
</clave_grupo>
</alumno>

</encabezado>
</listado>

ejercicio_1.dtd
<!ELEMENT listado (lista-alumnos,datos-del-curso,encabezado+)>
<!ELEMENT lista-alumnos (#PCDATA)>
<!ELEMENT datos-del-curso (#PCDATA)>
<!ELEMENT encabezado (alumno+)>

<!ELEMENT alumno (matricula,apaterno,amaterno,nombre,clave_curso,periodo,clave_grupo)>
<!ELEMENT matricula (#PCDATA)>
<!ELEMENT apaterno (#PCDATA)>
<!ELEMENT amaterno (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT clave_curso (#PCDATA)>
<!ELEMENT periodo (#PCDATA)>
<!ELEMENT clave_grupo (#PCDATA)>


wlopez
03 de Enero del 2005
<sonia>

esta de mas...
no debe de ir...

Lucas
03 de Enero del 2005
Para eso tienes que darle uan propiedad al parser para que valide contra DTDs. Ademas debes indicar en el XML, en las cabeceras de procesamiento el DTD asociado y automaticamente el parser lo hara. Aunque creo que para eso debes utilizar un parser DOM, no uno SAX

alberto
03 de Enero del 2005
Y como consigo con un parser DOM en java comprobar si un XML es válido respecto a un DTD asociado a este?

Gracias

cle
03 de Enero del 2005
Hola! te agradecería mucho si m pasaras ese código,ya q yo tb estoy trabajndo en lo mismo y la verdad q estoy bastante perdida.Muchas gracias