Acceso a DocTypeDecl en un mensaje XML

La declaración de tipo de documento XML incluye el elemento de sintaxis DocTypeDecl y sus descendientes. Juntos componen la construcción de DOCTYPE.

A continuación, se listan los descendientes, algunos de los cuales tienen atributos, junto con los nombres de correlación de cada elemento de sintaxis XML. Para obtener más información acerca de todos estos elementos, consulte Declaración de tipo de documento.

Elemento de sintaxis Nombre de la correlación
AttributeDef (XML.AttributeDef)
AttributeDefDefaultType (XML.AttributeDefDefaultType)
AttributeDefType (XML.AttributeDefType)
AttributeDefValue (XML.AttributeDefValue)
AttributeList (XML.AttributeList)
DocTypeComment (XML.DocTypeComment)
DocTypeDecl (XML.DocTypeDecl)
DocTypePI (XML.DocTypePI)
DocTypeWhiteSpace (XML.DocTypeWhiteSpace)
ElementDef (XML.ElementDef)
EntityDecl (XML.EntityDecl)
EntityDeclValue (XML.EntityDeclValue)
ExternalEntityDecl (XML.ExternalEntityDecl)
ExternalParameterEntityDecl (XML.ExternalParameterEntityDecl)
IntSubset (XML.IntSubset)
NotationDecl (XML.NotationDecl)
NotationReference (XML.NotationReference)
ParameterEntityDecl (XML.ParameterEntityDecl)
PublicId (XML.PublicId)
SystemId (XML.SystemId)
UnparsedEntityDecl (XML.UnparsedEntityDecl)

Las secciones siguientes de ESQL le muestran cómo crear contenido DocTypeDecl en un mensaje de salida generado por el nodo Compute. También puede utilizar los mismos nombres de correlación para interrogar a todos estos elementos en un mensaje XML de entrada.

El primer ejemplo muestra DocTypeDecl y NotationDecl:
-- Crear una declaración de DocType denominada 'test'
SET OutputRoot.XML.(XML.DocTypeDecl)test = '';

-- Establecer un ID público y del sistema para la declaración DocType
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.SystemId)
	= 'test.dtd';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.PublicId)
	= '//this/is/a/URI/test';

-- Crear un subconjunto interno para contener las definiciones DTD
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset) = '';

-- Crear una declaración de anotación denominada 'TeX'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
	(XML.NotationDecl)TeX = '';

-- La declaración de anotación contiene un SystemId y un PublicId
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.NotationDecl)TeX.(XML.SystemId) = '//TexID';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.NotationDecl)TeX.(XML.PublicId)
 = '//this/is/a/URI/TexID';

La sección siguiente muestra cómo configurar entidades:

-- Crear una declaración de entidad denominada 'ent1'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.EntityDecl)ent1 = '';

-- Esto debe contener un valor de declaración de entidad
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.EntityDecl)ent1.(XML.EntityDeclValue)
	= 'this is an entity';

-- Del mismo modo, para una declaración de entidad de parámetro
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ParameterEntityDecl)ent2 = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ParameterEntityDecl)ent2.(XML.EntityDeclValue)
 ='#PCDATA | subel2';

-- Crear ambos tipos de entidades externa, cada una de ellas con un
-- ID público y un ID del sistema
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalParameterEntityDecl)extent1 = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalParameterEntityDecl)extent1.(XML.SystemId)
 = 'more.txt';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalParameterEntityDecl)extent1.(XML.PublicId)
 = '//this/is/a/URI/extent1';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalEntityDecl)extent2 = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalEntityDecl)extent2.(XML.SystemId)
 = 'more.txt';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ExternalEntityDecl)extent2.(XML.PublicId)
 = '//this/is/a/URI/extent2';

-- Crear una declaración de entidad analizada denominada 'unpsd'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.UnparsedEntityDecl)unpsd = '';
-- Tiene un ID SystemId, PublicId y una referencia de anotación
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.UnparsedEntityDecl).(XML.SystemId) = 'me.gif';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.UnparsedEntityDecl).(XML.PublicId)
 = '//this/is/a/URI/me.gif';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.UnparsedEntityDecl).(XML.NotationReference) = 'TeX';

La sección siguiente muestra DocTypeWhiteSpace, DocTypeProcessingInstruction y DocTypeComment:

-- Crear un espacio en blanco en la declaración de DocType
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.DocTypeWhiteSpace) = '      ';

-- Crear una instrucción de proceso denominada 'test'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.DocTypePI)test = 'Do this';

-- Añadir un DocTypeComment
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.DocTypeComment) = 'this is a comment'; 

La sección siguiente muestra cómo configurar los elementos:

-- Crear diferentes elementos

SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
 XML.ElementDef)subel2 = '(#PCDATA)';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)subel1 = '(subel2 | el4)+';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el1 = '(#PCDATA)';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el2 = '(#PCDATA | subel2)*';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el3 = '(#PCDATA | subel2)*';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el4 = '(#PCDATA)';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el5 = '(#PCDATA | subel1)*';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.ElementDef)el6 = '(#PCDATA)';

La sección siguiente muestra cómo configurar las listas de atributos:

-- Crear una AttributeList para el elemento subel1

SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)subel1 = '';

-- Crear un atributo denominado 'size' con valores enumerados
-- 'big' o 'small'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)subel1.(XML.AttributeDef)size = '';

SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
(XML.AttributeList)subel1.(XML.AttributeDef)size.
(XML.AttributeDefType) = '(big | small)';

-- Establecer el valor por omisión del atributo en 'big'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)subel1.(XML.AttributeDef)size.
(XML.AttributeDefValue) = 'big';

-- Crear otro atributo, esta vez especificando
-- DefaultType como #REQUIRED
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)subel1.(XML.AttributeDef)shape = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)subel1.(XML.AttributeDef)shape.
(XML.AttributeDefType) = '(round | square)';

-- Crear otra lista de atributos para el elemento el5 con
-- un atributo que contiene CDATA como #IMPLIED
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)el5 = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)el5.(XML.AttributeDef)el5satt = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)el5.(XML.AttributeDef)el5satt.
(XML.AttributeDefType)CDATA = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).
 (XML.AttributeList)el5.(XML.AttributeDef)el5satt.
(XML.AttributeDefDefaultType) = 'IMPLIED';

Esto genera la siguiente declaración de DocType (tenga en cuenta que se han añadido retornos de carro para facilitar su visualización):

<!DOCTYPE test PUBLIC "//this/is/a/URI/test" "test.dtd"
[<!NOTATION TeX  PUBLIC "//this/is/a/URI/TexID" "//TexID">
<!ENTITY ent1 "this is an entity">
<!ENTITY % ent2 "#PCDATA | subel2">
<!ENTITY % extent1 PUBLIC "//this/is/a/URI/extent1" "more.txt">
<!ENTITY extent2 PUBLIC "//this/is/a/URI/extent2" "more.txt">
<!ENTITY unpsd PUBLIC "//this/is/a/URI/me.gif" "me.gif" NDATA TeX>	<?test Do this?>
<!--this is a comment-->
<!ELEMENT subel2 (#PCDATA)>
<!ELEMENT subel1 (subel2 | el4)+>
<!ELEMENT el1 (#PCDATA)>
<!ELEMENT el2 (#PCDATA | subel2)*>
<!ELEMENT el3 (#PCDATA | subel2)*>
<!ELEMENT el4 (#PCDATA)>
<!ELEMENT el5 (#PCDATA | subel1)*>
<!ELEMENT el6 (#PCDATA)>
<!ATTLIST subel1
    size (big | small) "big"
    shape (round | square) #REQUIRED>
<!ATTLIST el5
    el5satt CDATA #IMPLIED>
]>

Conceptos relacionados
Flujos de mensajes
ESQL
Diseño de mensajes

Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Gestión de archivos ESQL

Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Sentencia SET