XML与DTD

xml全称Extensible Markup Language(可扩展标记语言),它是Standard Generalized Markup Language(标准通用标记语言)的一个子集.

SGML:80年代IBM提出==>GML(各文档之间共用属性)==>SGML(ISO提出)==>XML(W3C认为SGML不适合WEB,所以提出XML)

SGML,HTML和XML:
SGML是在WEB发明之前描述文档资料的通用语言,定义标记语言的元语言.HTML跟XML都是从SGML发展而来的标记语言.HTML是在SGML顶一下的一个描述性语言.只是SGML的一个应用.其DTD作为标准被固定下来.而XML是SGML的一个简化版本.

XML文档:都有一个逻辑结构和一个物理结构.
物理:文档由entities(实体)的存储单元组成.文档开始于root或document entity.entity可以分为parsed跟unparsed数据.
良好的XML文档形成一种层次树结构.这个树的树根就是document entity.
XML文档的根元素称为Document element
逻辑上主要分5个部分:1.XML声明 2.文档类型声明 3.元素 4.注释 5.处理指令

XML元素:分四种
1.空元素: <student/>
2.带属性的空元素: <student name="张三" age="14" />
3.待内容的元素:
<student>
  学生信息
  <name>张三</name>
  <age>14</age>
</student>
4.带内容跟属性的元素:
<student name="张三">
  <age>14</age>
</student>
XML元素内容中字符数据不能有"&","<","]]>",在CDATA段中,数据可以是不包括CDATA段的结束定界符的任意字符串.
如果想输入这些字符串可以用引用:
字符 字符引用(十进制) 字符引用(十六进制)  预定义实体引用
<       &#60;            &#x3c;              &lt;
>       &#62;            &#x3e;              &gt;
"       &#34;            &#x22;              &quot;
'       &#39;            &#x27;              &apos;
&       &#38;            &#x26;              &amp;
CDATA段eg
<?xml version="1.0" ?>
<java>
  <![CDATA[
       if(a>b && c<b)    
           max = a;
  ]]>
</java>
这段代码就可以完全显示出来

XML注释跟HTML一样: <!-- 这是注释 -->

XML处理指令(PIs):允许文档中包含由应用程序来处理的指令。
格式:<? 这是处理指令 ?> eg:<?xml-stylesheet href="hello.css" type="text/css"?>

DTD:关键字全部得大写
外部DTD文件语法格式:<!DOCTYPE 根元素的名字 SYSTEM "外部DTD文件的URI">
其中SYSTEM代表文档使用的是私有的DTD文件.
PUBLIC为公共的格式:<!DOCTYPE 根元素的名字 PUBLIC "DTD的名称" "外部DTD文件的URI">
注:当我们使用外部DTD文件的时候用<?xml version="1.0" encoding="gbk" standalong="no">其中standalong="no"表示依赖外部文档

DTD结构:元素类型声明,属性表声明,实体声明,记号声明等构成.
元素类型声明:<!ELEMENT 元素名称 元素内容说明>
eg:
<?xml version="1.0" encoding="gbk"?>

<!DOCTYPE company [
<!ELEMENT company (employee)>
<!ELEMENT employee (name.age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>

<company>
   <employee>
      <name>张三</name>
      <age>14</age>
   </employee>
</company>

其中DTD文件定义元素说明必须先写NAME再写AGE

实体:一般实体(general entity)和参数实体(parameter entity)
一般实体是在文档内容中使用的实体,而参数实体则是在DTD中使用的已分析实体
一般实体声明格式:<!ENTITY 实体名 "实体内容"> 引用实体方式:"&实体名"
eg.
<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE website[
<!ELEMENT website (name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY name "程序员之家">
<!ENTITY copyright "&#169;2005, 程序员之家, All Rights Reserved">
]>

<website>
   <name>&name;</name>
   <copyright>&copyright;</copyright>
</website>


然后在浏览器中可以看一下实际效果:用实体内容来替换实体引用
参数实体声明格式:<!ENTITY % 实体名 "实体内容">只能在DTD中声明
<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE website SYSTEM "website.dtd">

<website>
   <name>&name;</name>
   <copyright>&copyright;</copyright>
</website>


website.dtd
<?xml version="1.0" encoding="gb2312"?>

<!ELEMENT website (name,copyright)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT copyright (#PCDATA)>
<!ENTITY % name "程序员之家">
<!ENTITY copyright "&#169;2005, %name;, All Rights Reserved">


其中"%name"代表"程序员之家"

属性表声明:<!ATTLIST 元素名 属性名 属性类型 缺省声明>
eg.
<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE bbs[
<!ELEMENT bbs (article*)>
<!ELEMENT article (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST author ip CDATA #REQUIRED>
]>

<bbs>
  <article>
    <title>关于属性表声明的问题</title>
    <author ip="192.168.0.111">张三</author>
  </article>
  <article>
    <title>关于XML应用的问题</title>
    <author ip="192.168.0.123">李四</author>
  </article>	
</bbs>


#REQUIRED:代表必须包含IP属性
#IMPLIED:可有可无IP属性

记号声明:
一种是使用MIME类型:<!NOTATION gif SYSTEM "image/gif">
另一种是使用URI路径,指外部处理程序的位置:<!NOTATION gif SYSTEM "iexplore.exe">

你可能感兴趣的:(数据结构,xml,Web,css,bbs)