DTD学习2

来源:互联网 发布:戴尔软件下载中心 编辑:程序博客网 时间:2024/06/17 13:07
2. DTD-XML 构造块在DTD看来,XML文档都是由以下简单的改造块构成的:Elements Attributes Entities PCDATA CDATA ElementsElements是主要的构造块,可以包含文本,其他元素,或者为空,如 <message>some message in between</message>  AttributesAttributes为Elements提供额外信息,他总是在Elements的起始标签中,总是以 name/value对 出现EntitiesEntities是用语定义通用文本的变量,Entities在XML文档被解析时被展开,下面的是XML预定义的实体:<          <  >         >  &      &  "      "  '     '  PCDATAPCDATA是字符数据,是会被解析的文本,文本中的tags会被当作标记处理,entities会被展开CDATACDATA也是字符数据,但他是不会被解析的文本,文本中的tags不会被当作标记处理,entities也不会被展开3. Elements(1)声明一个Element,语法: <!ELEMENT element-name category>or<!ELEMENT element-name (element-content)> (2)Empty elements, 用关键字 EMPTY 来声明 <!ELEMENT element-name EMPTY>example:<!ELEMENT br EMPTY>XML example:<br /> (3)Elements 只包含字符数据时,用 #PCDATA  来声明 <!ELEMENT element-name (#PCDATA)>example:<!ELEMENT from (#PCDATA)> (4)Elements with any contents, 用 ANY 声明时,元素可包含任何可以被解析的数据 <!ELEMENT element-name ANY>example:<!ELEMENT note ANY> (5)Elements with children (sequences) <!ELEMENT element-name  (child-element-name)>or<!ELEMENT element-name  (child-element-name,child-element-name,.....)>  example: <!ELEMENT note (to,from,heading,body)> 子元素出现的顺序必须和声明时的一致,子元素也可以有子元素(6) 声明相同元素只出现一次 <!ELEMENT element-name (child-name)>example:<!ELEMENT note (message)>说明 message 在 note 中只能出现一次 (7) 声明相同元素至少出现一次 <!ELEMENT element-name (child-name+)>example:<!ELEMENT note (message+)>"+"说明 message 在 note 中至少出现一次 (7) 声明相同元素出现0次或多次 <!ELEMENT element-name (child-name*)>example:<!ELEMENT note (message*)>"*"说明 message 在 note 中的出现是随意的 (8) 声明相同元素出现0次或一次 <!ELEMENT element-name (child-name?)>example:<!ELEMENT note (message?)>"?"说明 message 在 note 中可不出现,或者出现一次 (9) 声明 either/or 内容 example:<!ELEMENT note (to,from,header,(message|body))>note 必须包含一个to,一个from,一个header,和message body其中之一 (10) 声明混合内容 example:<!ELEMENT note (#PCDATA|to|from|header|message)*>note 可以包含 可被解析的字符,to, from, header, message, 并且可以出现任意次 4. Attributes(1) 声明Attributes,语法: <!ATTLIST element-name attribute-name  attribute-type default-value>  example: DTD example:<!ATTLIST payment type CDATA "check">XML example:<payment type="check" /> attribute-type 有下列值:CDATA    字符数据(en1|en2|..)    值必须是枚举列表中的一个ID    unique id IDREF    其他元素的idIDREFS    其他id 列表NMTOKEN    一个有效的XML名字NMTOKENS    有效的XML名列表ENTITY     一个实体ENTITIES    一个实体列表NOTATION    一个符号名xml:    一个预定义的XML值default-value 有下列值:value    默认值#REQUIRED    这个属性必须出现#IMPLIED    这个属性不是必须的#FIXED value    这个属性的只是固定的(2) 指定一个默认值属性 DTD:<!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">Valid XML:<square width="100" />square被定义为一个空元素,他有一个CDATA类型的属性 width,如果width没被指定值,那他就是0 (3) #IMPLIED语法: <!ATTLIST element-name attribute-name attribute-type #IMPLIED>example:DTD:<!ATTLIST contact fax CDATA #IMPLIED>Valid XML:<contact fax="555-667788" />Valid XML:<contact /> (4) #REQUIRED语法: <!ATTLIST element-name attribute_name attribute-type #REQUIRED> ExampleDTD:<!ATTLIST person number CDATA #REQUIRED>Valid XML:<person number="5677" />Invalid XML:<person /> (5) #FIXED语法: <!ATTLIST element-name attribute-name attribute-type #FIXED "value"> ExampleDTD:<!ATTLIST sender company CDATA #FIXED "Microsoft">Valid XML:<sender company="Microsoft" /Invalid XML:<sender company="W3Schools" />  (6) Enumerated attribute values <!ATTLIST element-name  attribute-name (en1|en2|..) default-value>  DTD example:<!ATTLIST payment type (check|cash) "cash">XML example:<payment type="check" />or<payment type="cash" /> 5. EntitiesEntities 是用来为普通文本定义捷径有两种声明方式:(1) 内部声明 Syntax: <!ENTITY entity-name "entity-value">DTD Example:<!ENTITY writer "Donald Duck."><!ENTITY copyright "Copyright W3Schools.">XML example:<author>&writer;©right;</author> (2) 外部声明 Syntax: <!ENTITY entity-name SYSTEM "URI/URL">DTD Example:<!ENTITY writer     SYSTEM "http://www.w3schools.com/dtd/entities.dtd">!ENTITY copyright  SYSTEM "http://www.w3schools.com/dtd/entities.dtd"> XML example: <author>&writer;©right;</author>

原创粉丝点击