validar xml contra dtd
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.
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.
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)>
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)>
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
Y como consigo con un parser DOM en java comprobar si un XML es válido respecto a un DTD asociado a este?
Gracias
Gracias
