Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema con DTD

Estas en el tema de Problema con DTD en el foro de Programación General en Foros del Web. Hola, estoy validando mi XML con un DTD que acabo de hacer el DTD es asi: Código: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT root (campo+)> <!ELEMENT campo ...
  #1 (permalink)  
Antiguo 22/03/2005, 16:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 5 meses
Puntos: 0
Problema con DTD

Hola, estoy validando mi XML con un DTD que acabo de hacer el DTD es asi:

Código:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT root 	(campo+)>
<!ELEMENT campo (nombre_tabla, nombre_real, tipo, longitud?, editable)>
<!ATTLIST campo
	name 			CDATA #IMPLIED
	nombre_tabla 	CDATA #IMPLIED
	nombre_real 	CDATA #IMPLIED
	tipo 			(TEXTO | NUMERO) #IMPLIED
	longitud 		CDATA #IMPLIED
	editable 		CDATA #IMPLIED
>
<!ELEMENT nombre_tabla 	(#PCDATA)>
<!ELEMENT nombre_real 	(#PCDATA)>
<!ELEMENT tipo 			(#PCDATA)>
<!ELEMENT longitud 		(#PCDATA)>
<!ELEMENT editable 		(#PCDATA)>

Ya fijense en el elemento tipo en el ATTLISt, le digo q solo puede poner o TEXTO o NUMERO pero en el XML le pongo cualquier cosa y a la hora que lo valido me sale que esta bien, deberia salir que esta mal, estoy haciendo algo mal???? Aca les mando el xml por sea el caso.

Código:
<?xml version="1.0"?>
<!DOCTYPE root SYSTEM "estructuras.dtd">
<root>
  <campo name="cc">
    <nombre_tabla>CC</nombre_tabla>
    <nombre_real>CC</nombre_real>
    <tipo>dfff</tipo>
    <longitud>20</longitud>
    <editable>1</editable>
  </campo>
  <campo name="cc">
    <nombre_tabla>D D</nombre_tabla>
    <nombre_real>CC</nombre_real>    
    <tipo>1</tipo>
    <longitud>20</longitud>
    <editable>1</editable>
  </campo>
   <campo name="cc">
    <nombre_tabla>A A</nombre_tabla>
    <nombre_real>CC</nombre_real>    
    <tipo>1</tipo>
    <longitud>20</longitud>
    <editable>1</editable>
  </campo>
</root>
Saludos
Rubén
  #2 (permalink)  
Antiguo 22/03/2005, 19:57
 
Fecha de Ingreso: abril-2004
Ubicación: Juli - Puno - Perú
Mensajes: 51
Antigüedad: 20 años
Puntos: 0
Hola Rubén
Lo que pasa es que estás tomando como elemento tipo #PCDATA, es decir, cualquier cadena de texto y es válida.
Pero si intentas dar valor al atributo tipo del elemento campo distinto a (texto|numero) no será válido y eso lo puedes comprobar con un procesador de XML como el XMLSpy, por ejemplo este valor <campo name="cc" tipo="aaa"> no será aceptado por el procesador.
__________________
Juli - La Pequeña Roma Aymara
  #3 (permalink)  
Antiguo 22/03/2005, 23:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 148
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola , gracias por responder pero como hago para q el elemento TIPO pueda solo tener como ingreso el textos definidos. Asi lo he hecho pero me sale error. El T1 , T2 , y T3 parece q los toma como elementos y no como un texto que yo quiero. Es decir q pongan T1 o T2 o T3, si ponen otro texto esta mal

Código:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT root 	(campo+)>
<!ELEMENT campo (nombre_tabla, nombre_real, tipo, longitud?, editable)>
<!ATTLIST campo
	name 			CDATA #IMPLIED
>
<!ELEMENT nombre_tabla 	(#PCDATA)>
<!ELEMENT nombre_real 	(#PCDATA)>
<!ELEMENT tipo 			(T1 | T2 | T3)>
<!ELEMENT longitud 		(#PCDATA)>
<!ELEMENT editable 		(#PCDATA)>
Saludos
Rubén

P.D.: Yo tambien uso el XMLSpy
  #4 (permalink)  
Antiguo 23/03/2005, 13:39
 
Fecha de Ingreso: abril-2004
Ubicación: Juli - Puno - Perú
Mensajes: 51
Antigüedad: 20 años
Puntos: 0
Rubén,
sobre lo que quieres restringir contenido en un elemento en una DTD no se puede hacer, ya que DTD es muy pobre en las restricciones sobre los elementos. Una salida sería que ésa restricción la lleves como un atributo que eso sí acepta en las DTD. La otra salida es que utilices esquemas XML con la siguiente restricción:
Código:
<xs:element name="tipo">
	<xs:simpleType>
		<xs:restriction base="xs:string">
			<xs:enumeration value="NUMERO"/>
			<xs:enumeration value="TEXTO"/>
		</xs:restriction>
	</xs:simpleType>
</xs:element>
__________________
Juli - La Pequeña Roma Aymara
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.