以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  XML初学进阶学习笔记[原创]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=9248)


--  作者:卷积内核
--  发布时间:8/10/2004 9:35:00 AM

--  XML初学进阶学习笔记[原创]
简体中文码:GB2312
    繁体中文码:BIG5
    西欧字符: UTF-8


1、一般实体

我们前面说到的那个信件署名就是一般实体。定义一般实体的格式如下:
<!ENTITY 实体名 "文本内容"〉  

关于刚才的信件署名的实体定义如下:

<!ENTITY lettersign
"张三
某网络公司销售部门
北京市海淀区中关村88号,100000"〉  

另外,你也可以指定一个实体代替一个外部文件的内容,此时要使用SYSTEM这个关键字。例如:

<!ENTITY lettersign
SYSTEM "http://www.mydomain.com/lettersign.xml"〉  

在这个例子中,XML处理器将用指定文件的内容来替换实体指示。


2、参数实体
与一般实体相同,参数实体既可以是内部的也可以是外部的。不过,参数实体只用在DTD中。
参数实体的格式与一般实体很类似,只不过中间要加上“%”符。

<!ENTITY % 实体名 "文本内容"〉  


3、实体的使用包括两部分:实体声明和实体引用。

4、实体声明
对于实体的声明应该放在文件类型DOCTYPE中。DOCTYPE一般放在文件头(即XML声明和DTD)之后,
XML元素之前。这样一来,XML文件就变为下面的形式:

<?xml version="1.0"?>
<!DOCTYPE 文件根元素名 [
    实体声明部分
]>
<文件根元素名>
    具体数据内容
</文件根元素名>


--  作者:卷积内核
--  发布时间:8/10/2004 9:36:00 AM

--  
5、实体引用
说到实体引用,大家可能想起前面我们曾用“&lt;”代表字符“〈”。不错,这就是一个实体引用。

简而言之,实体引用指的是引用一个在实体声明中已经声明过的一个实体。实体引用的形式很简单:

&实体名;


6、实体引用有以下几点规则一定要注意:

在引用XML实体之前,必须已经在XML文件中对此实体进行过声明;
在实体引用中不能出现空格。也就是说,& lettersign;和&letterhead ;的用法都会引起错误。
尽管在一个实体中可以再引用其它实体,但是不能出现循环引用。也就是说,一个实体不能引用它自己;
同样,也不能出现实体A引用实体B,然后实体B再反过来引用实体A的情况。
实体引用不能在DOCTYPE声明中出现。
实体引用的文本必须是形式良好的XML。
同样,参数实体的引用与一般实体的引用大同小异,只是要把实体前的符号&换为%就可以了,形式是:

%实体名;


--  作者:卷积内核
--  发布时间:8/10/2004 9:37:00 AM

--  
7、实体引用不仅可以出现在字符数据中,还可以出现在标记的属性中。例如下面这个例子:

<联系人 公司=“B公司” 地址=“&B公司地址;”>  

如果在属性中出现实体引用,不但要遵守前面所述的实体引用的种种规则,还要注意以下两点:

在标记属性中不能引用一个外部实体。
引用的文本中不能出现字符“<”,否则替换后就不再是一个“形式良好的”XML文件了。
通过这一节的讲述,想必大家已然了解:实体主要是用来代替字符数据的,它可以节省大量的录入工作。

8、使用外部DTD时,要在DOCTYPE中使用关键字SYSTEM。实际上,SYSTEM不是引用外部DTD的唯一方法,
这个关键字主要用于引用一个作者或组织所编写的众多XML文件中通用的DTD。还存在一种外部DTD,
它是一个由权威机构制订的,提供给特定行业或公众使用的DTD。因此,另一个引用外部DTD的办法是使用关键字PUBLIC,
引用这一类公开给公众使用的DTD。

当使用关键字PUBLIC进行引用时,这个外部DTD还需要得到一个标识名。引用公共DTD的形式为:

<!DOCTYPE 根元素 PUBLIC "DTD名称" "外部DTD的URL">


--  作者:卷积内核
--  发布时间:8/10/2004 9:37:00 AM

--  
9、这个DTD标识的命名规则和XML文件的命名规则稍有不同。具体地说,DTD名称只能包含字母、
数字、空格和下面的符号:_%$#@()+:=/!*;?。同时,DTD名称还必须符合一些标准的规定。
例如,ISO标准的DTD以“ISO”三个字母开头;被改进的非ISO标准的DTD以加号“+”开头;未被改进的非ISO标准的DTD以减号“-”开头。

无论是哪一种情况,开始部分后面都跟着两个斜杠“//”及DTD所有者的名称。在这个名称之后又是两个斜杠“//”,
再然后是DTD所描述的文件的类型。最后,在又一对斜杠之后是语言的种类(参见ISO 639)。例如下面这个公用DTD的引用:

<!DOCTYPE 联系人列表 PUBLIC "-//Luna Dong//Contact Data//CN"
"http://www.mydomain.com/dtds/fclml.dtd">

10、除了根元素外,在定义其它元素时使用关键字ANY都是不好的习惯。一般来说,在写一个XML文件时需要严格遵循DTD的规则,
这时,一个定义明确的DTD,虽然表面上似乎充满了条条框框,但实际上会使你在书写XML文件时有规可循,
反而方便了你的工作和语法分析器的工作。相反,一个在元素定义中充满了ANY的DTD,反而可能会搞得你不知所措,一头雾水。

11、在定义元素时,ETD的顺序是无关紧要的。因此
    <!ELEMENT 姓名(#PCDATA)>    
    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人(姓名)>

    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人(姓名)>
    <!ELEMENT 姓名(#PCDATA)>    
所定义的文件结构是完全相同的。


12、还有一点要注意,不能对不同的元素使用相同的元素名,即便这些元素的内容、包含的子元素不同也不行,
因为它只会引起文件各个元素的混淆,使文件的可读性大打折扣。例如:
    <!ELEMENT 联系人列表 ANY>
    <!ELEMENT 联系人(姓名)>
    <!ELEMENT 联系人(EMAIL)>
    <!ELEMENT 姓名(#PCDATA)>
    <!ELEMENT EMAIL(#PCDATA)>
在这个例子中,对“联系人”的重复定义,会引起错误。


--  作者:卷积内核
--  发布时间:8/10/2004 9:37:00 AM

--  
13、最后再次强调一下元素的命名。元素名的第一个字母必须是字母、或下划线(_)、或冒号(:),
后跟字母、数字、句号(.)、冒号、下划线、连结号(-)的组合,并且不能包含空白符,不能以“xml”开头。
另外,尽管元素的第一个字母使用冒号是合法的,但最好避免这样做,因为它会引起混淆。再有需要注意的是,
尽管XML1.0标准允许使用任何长度的文件名,但是实际的XML处理器常常会限制标记名的长度。
--  作者:卷积内核
--  发布时间:8/10/2004 9:39:00 AM

--  
14、
学过《编译原理》的应该对正则表达式都非常理解拉,这里用法相同。

元 字 符        含    义

  +         出现一次或多次
  *         出现零次或多次
  ?        可选,不出现或出现一次
()       一组要共同匹配的表达式
  |            OR,或
  ,        AND,要求严格遵从顺序要求
  元素A
  元素B
  元素C    元素列表,无须遵从顺序要求


--  作者:卷积内核
--  发布时间:8/25/2004 4:49:00 PM

--  
斑竹怕看起来麻烦就整理一下吧,这是偶刚来时发的,不懂你的意思,没一次发出来,不好意思
--  作者:蜘蛛
--  发布时间:9/20/2005 1:43:00 AM

--  
好感谢,好感谢,我都把它复制到我的记事本了
--  作者:asgc_dgh
--  发布时间:9/26/2005 12:12:00 AM

--  
初学,非常感谢!!!
--  作者:一一
--  发布时间:11/4/2005 12:37:00 PM

--  
lz好好啊
--  作者:ymeng
--  发布时间:11/9/2005 6:26:00 PM

--  
先行谢过,好东东,收了
--  作者:hqh200023607
--  发布时间:11/10/2005 8:38:00 PM

--  
我是初学,非常感谢!
--  作者:hama
--  发布时间:11/12/2005 12:50:00 PM

--  
好在哪啊?
--  作者:xinq
--  发布时间:11/20/2005 11:21:00 AM

--  
非常感谢!
--  作者:随风飘0
--  发布时间:11/21/2005 11:53:00 AM

--  
辛苦辛苦了
--  作者:我在二楼
--  发布时间:11/21/2005 7:53:00 PM

--  
我头都看晕了
--  作者:绝不潜水得鱼
--  发布时间:11/23/2005

--  
问下楼主 以及各位 : vc 中用dcom访问 xml 文件碰到有<!DOCTYPE ......> 就解析不出来得问题怎么处理哈
--  作者:hjx_221
--  发布时间:11/23/2005 7:20:00 PM

--  
hope we will get more from you:)

--  作者:临渊羡鱼
--  发布时间:1/18/2006 9:57:00 AM

--  
还在学习中!
--  作者:guirongb
--  发布时间:2/24/2006 4:37:00 PM

--  
感谢搂住哦,终于看到点实际的内容了
--  作者:lirongde520
--  发布时间:2/28/2006 11:04:00 AM

--  
感谢!
--  作者:ld167
--  发布时间:3/1/2006 3:07:00 PM

--  
谢谢!!!
--  作者:holden
--  发布时间:3/2/2006 4:38:00 PM

--  
很有帮助,多谢!
--  作者:xmlspy2004
--  发布时间:3/6/2006 5:50:00 PM

--  
好呀

--  作者:lancet0903
--  发布时间:3/13/2006 9:01:00 PM

--  
不错

--  作者:hhai88
--  发布时间:3/21/2006 10:14:00 AM

--  
不错,希望能够整合PDF或CHM更好!
有例子演示更好!!
--  作者:ul5529
--  发布时间:3/21/2006 2:55:00 PM

--  
很不错的概括啊,就是内容少了点
--  作者:卷积内核
--  发布时间:3/21/2006 3:06:00 PM

--  
已经整理为完整版,沉底了而已
http://bbs.xml.org.cn/dispbbs.asp?boardID=1&ID=28676
在这里。
--  作者:meiyuan
--  发布时间:3/21/2006 4:05:00 PM

--  
学习中,继续~
--  作者:Suya
--  发布时间:4/1/2006 9:48:00 AM

--  初来者
刚开始学,看得有些迷惑。
--  作者:hldhl
--  发布时间:4/3/2006 1:46:00 AM

--  
谢谢 楼主..先顶再看
--  作者:hldhl
--  发布时间:4/3/2006 1:53:00 AM

--  
太好了.再帮顶一次..
--  作者:zhwpost
--  发布时间:4/3/2006 9:20:00 AM

--  
ding
--  作者:lian_531
--  发布时间:4/8/2006 5:59:00 PM

--  
我是一个初学者,我想问一个问题:
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/css"?>
<newcd xmlns:html="http://www.w3.org/TR/REC-html40">
   <html:style>
<!--

cd
{
   display:block;
   background-color:#ff66cc
}
title{
display:block;
font-family:Arial, Helvetica, sans-serif;
font-size:80%;
font-weight:bold;
text-align:center;
}
歌手{
display:block;
font-family:Arial, Helvetica, sans-serif;
color:coral;
font-size:120%;
font-weight:bold;
text-align:center;

}
song{
display:block;
text-indent:2em;
font-family:宋体;
font-size:9pt;
line-height:1.5em;
margin-right:15%;
margin-left:10;}
-->
</html:style>
<newcd>
   <cd>
      <title>红蔷薇</title>
      <歌手>萧亚轩</歌手>
      <song>一个人的精彩</song>
      <song>夜</song>
   </cd>
    <cd>
      <title>真爱无敌</title>
      <歌手>许如</歌手>
      <song>真爱无敌</song>
      <song>恒星</song>

   </cd>
</newcd>
这个程序结果有错误,


--  作者:lian_531
--  发布时间:4/8/2006 6:02:00 PM

--  
运行结果有错误,如下:下列标记没有被关闭:newcd处理资源

请问世哪位高手帮我一下,到底是什么原因


--  作者:xlxb1234
--  发布时间:4/9/2006 4:06:00 PM

--  
慢慢来学~
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
139.648ms