访问 XML 消息中的 DocTypeDecl

XML 文档类型声明包括 DocTypeDecl 语法元素及其子代。并且它们由 DOCTYPE 构造组成。

下面列出了后代和每个 XML 语法元素的相关名,其中有一些后代具有属性。有关所有这些元素的更多信息,请参阅XML 文档类型声明

语法元素 相关名
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)

以下 ESQL 部分显示如何在 Compute 节点生成的输出消息中创建 DocTypeDecl 内容。您还可以使用相同的相关名来查询输入 XML 消息内的所有这些元素。

第一个示例显示了 DocTypeDecl 和 NotationDecl:
-- Create a DocType Declaration named 'test' 
SET OutputRoot.XML.(XML.DocTypeDecl)test = '';

-- Set a public and system ID for the DocType Declaration
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.SystemId) 
	= 'test.dtd'; 
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.PublicId) 
	= '//this/is/a/URI/test';

-- Create an internal subset to hold our DTD definitions
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset) = '';

-- Create a Notation Declaration called 'TeX'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.NotationDecl)TeX = '';

-- The Notation Declaration contains a SystemId and a 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';

下面的部分显示如何设置实体:

-- Create an Entity Declaration called 'ent1'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.EntityDecl)ent1 = '';

-- This must contain an Entity Declaration Value
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.EntityDecl)ent1.(XML.EntityDeclValue) 
= 'this is an entity';

-- Similarly for a Parameter Entity Declaration
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.ParameterEntityDecl)ent2 = '';
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.ParameterEntityDecl)ent2.(XML.EntityDeclValue) 
	='#PCDATA | subel2';

-- Create both types of External Entity, each with a 
-- public and system ID
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';

-- Create an Unparsed Entity Declaration called 'unpsd'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.UnparsedEntityDecl)unpsd = '';
-- This has a SystemId, PublicId and Notation Reference
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';

下面的部分显示 DocTypeWhiteSpace、DocTypeProcessingInstruction 和 DocTypeComment:

-- Create some whitespace in the DocType Declaration
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.DocTypeWhiteSpace) = '      '; 

-- Create a Processing Instruction named 'test'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.DocTypePI)test = 'Do this';

-- Add a DocTypeComment
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.DocTypeComment) = 'this is a comment'; 

下面的部分显示如何设置元素:

-- Create a variety of Elements

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)';

下面的部分显示如何设置属性列表:

-- Create an AttributeList for element subel1

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

-- Create an attribute called 'size' with enumerated 
-- values 'big' or '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)';

-- Set the default value of our attribute to be 'big'
SET OutputRoot.XML.(XML.DocTypeDecl).(XML.IntSubset).	
	(XML.AttributeList)subel1.(XML.AttributeDef)size.
(XML.AttributeDefValue) = 'big';

-- Create another attribute - this time we specify 
-- the DefaultType as being #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)';

-- Create another attribute list for element el5 with 
-- one attribute, containing CDATA which is #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';

这生成以下 DocType 声明(注意,已添加了回车以便于查看):

<!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>
]>
相关概念
消息流概述
ESQL 概述
消息建模
相关任务
设计消息流
定义消息流内容
管理 ESQL 文件
相关参考
Compute 节点
Database 节点
Filter 节点
ESQL 引用
SET 语句
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ac17320_