>元素属性举例: <计算机系学生登记表> <学生 学号=“1236” 性别=“女”>王芳学生> <学生 学号=“0694” 性别=“男”>李奇学生> <学生 学号=“6288” 性别=“男”>黄昂扬学生> <学生 学号=“5864” 性别=“女”>文笛声学生> 计算机系学生登记表> q属性定义规则属性定义规则 标记中可以使用多个属性,但属性名称不得重复; 属性名是大小写敏感的; 属性只能出现在起始标记或空标记中; 属性值必须用引号(英文);少用属性,尽可能用子元素因为属性有以下缺陷:少用属性,尽可能用子元素因为属性有以下缺陷: Ø属性值不能包含多重数值,但是元素可以;Ø属性值很难扩展; Ø属性不能描述结构内容,但是元素可以;Ø属性值很难通过 DTD 进行测试。
字符数据q字符数据字符数据 在起始和结束标记之间出现的字串信息为字符数据< <姓名姓名> >张三张三姓名姓名> >以下是两条不同的字符数据: <格式>一段文字格式> 和: 〈格式>一段文字〈/格式> 后者的文本数据比前者多了两个换行符字符数据可以是任何合法的UNICODE字符,但不能包含“<”、 ”>”等特殊字符q特殊字符数据表示法一:实体引用特殊字符数据表示法一:实体引用为了在字符数据和标记中使用一些特殊符号,XML提供了实体引用法:特殊字符实体引用>><<&&""’'字符数据q举例举例数据中的特殊字符Ø字符数据内容:“加入A>B,则B一定是偶数”Ø正确XML表示形式:<示例>加入A>B,则B一定是偶数示例>属性值中的特殊字符Ø错误写法:Ø正确写法:字符数据q特殊字符数据表示方法二:特殊字符数据表示方法二:CDATACDATA格式< <!![CDATA[[CDATA[文本内容文本内容]]>]]>CDATA文本内容中是不能出现字符串“]]>”,因为它代表了CDATA数据块的结束标志。
CDATA下所有内容都被当作字符数据看待字符数据qCDATA与实体引用比较CDATA表示方式<示例>张三姓名>]]>示例>实体引用表示方式<示例><姓名>张三</姓名>示例>字符数据qXMLXML注释注释用“<!--”和“-->”引起来可以是多行,但不允许出现嵌套字符串“--”、“<”和“>”不能出现在注释中例子:<名词列表> <名词>XML名词>名词列表>注释第二节、 XML的语法qXML基本规则q逻辑结构q物理结构XML文件的物理结构q什么是实体什么是实体一个 XML 文件可能由一个或多个存储单元组成,它们被称为实体(entity),它们都具有内容并且都用名字进行标识Ø类似程序设计中的变量,每个变量可存放一定数据实体充当着和别名类似的角色,一个简单的实体名称可以用来代表一大段文本内容实体类型:Ø一般实体Ø参数实体实体声明q一般实体声明—内部实体
]> <文件根元素名> … 文件根元素名>实体引用 q指引用一个已经声明过的实体一般实体引用形式:& &实体名实体名;例如: <地址>&NSLAddress;地址>参数实体引用形式:% %实体名;实体名;例如:例如: ]]> 实体引用q实体引用规则实体引用规则 被引用的实体必须已经在XML文件中声明过; 实体引用中不能出现空格: 错误引用:& & lettersignlettersign; ;和和& &lettersignlettersign ; ;在一个实体中可以再引用其它实体,但是不能出现循环引用。
实体引用不能在DOCTYPE声明中出现一般实体声明和引用例子一般实体声明和引用例子 <联系人列表> <联系人> <姓名>张三姓名> <公司>A公司公司>> <地址>&A公司地址;地址> 联系人> <联系人> <姓名>李四姓名> <公司>B公司公司> <地址>&B公司地址;〈/地址〉 联系人>联系人列表>实体声明实体引用参数实体声明与引用实例]]>实体声明实体引用q实体引用规则实体引用规则实体引用不仅可以出现在字符数据中,还可以出现在标记的属性中。
Ø例如:<联系人 公司=“B公司” 地址=“&B公司地址;”> 属性中实体引用规则: Ø在标记属性中不能引用一个外部实体 Ø引用的文本中不能出现字符“<” 实体引用第三节 DTD第三节 DTDqDTD基本结构q定义元素及其后代q定义元素属性DTD基本结构qDTDDocument Type Definition规定XML文档的逻辑结构,主要是来描述XML文件中元素的格式它可以定义文档的语法,以便支持XML语法分析程序根据DTD确认某个XML页面标记的合法性qDTD特点特点 DTD描述了一个置标语言的语法和词汇表,即定义了XML文件的整体结构及语法 编辑工具根据 DTD中定义的结构创建XML文档XML解析器利用DTD定义验证文档的有效性DTD可以非常简单,仅仅列出所有有效的元素DTD也可以非常复杂,除元素,还可以指出元素之间的关系DTD基本结构DTD的基本结构qDTD特点特点DTD中的关键字都必须是大写的Ø例如:ELEMENT、ATTLIST、#REQUIRED、#IMPLIED、NMTOKEN、ID等等DTD所定义的元素和属性名是大小写敏感Ø例如 “BOOKS”和“Books”并不相同。
DTD的基本结构qDTD类型类型内部DTD外部DTD公用DTD内部DTDq内部内部DTDDTD定义的信息放在XML文档中,加在XML文件头部,结构如下: ]>=""?> ..... ..... 内部DTD实例 ]><联系人列表> <联系人> <姓名>张三姓名> <公司>A公司公司> <>(010)62345678> <地址> <城市>北京市城市> <街道>五街1234号街道> 地址> 联系人> …联系人列表>外部DTDq什么是外部什么是外部DTDDTDDTD信息保存在XML文件之外的一个独立文件中。
优点Ø多个XML文件共享一个共用DTD文件Ø简化输入,改动DTD不用一一去改每个XML文件缺点Ø如果DTD的改动不是“向后兼容”的,这时原先写的那些XML文件可能就会出问题外部DTDq外部外部DTDDTD引用引用XML声明中必须说明这个文件不是自成一体的,即standalone属性值应该是“no”在DOCTYPE声明中,要加入SYSTEM属性:外部DTDq例子公共DTDq什么是公共什么是公共DTDDTD以关键字PUBLIC而不是SYSTEM来引用一个由权威机构制订的、提供给特定行业或公众使用的DTD,这个外部DTD还需要得到一个标识名公共DTD的引用形式URL">Ø例如 属性类型q 属性类型可以是以下十种中的任意一种: ØCDATA ØEnumerated ØID ØIDREF ØIDREFS ØENTITY ØENTITIES ØNMTOKEN ØNMTOKENS ØNOTATION 属性类型—CDATA q纯文本纯文本,即由字符、符号“&”、小于号“<”和引号“””组成的字符串。
q例子: ]> <剧本> <对话 演员演员=“=“路人甲路人甲””>我可不这么认为!对话> <对话 演员演员=“=“路人乙路人乙" ">为什么呢?对话>剧本>属性类型—枚举类型q 属性也可以被描述为一组可接受的取值的列表,关键字ENUMERATED是不出现在DTD定义中的 ]> <购物篮> <肉 类型 = “鱼肉”/> <肉 类型 = “牛肉”/> <肉/>购物篮>属性“类型”定义的缺省值是“鸡肉”,所以“购物篮”中的第三个元素的“类型”属性取值为“鸡肉”属性类型— IDqID ID 类型类型元素的某些属性值是不能重复的ID的值必须是一个有效的XML名称注意Ø不要给ID类型的属性事先指定缺省值,这很容易引起不同的元素具有相同的标识的情况;ØID属性经常使用REQUIRED缺省类型,也可以使用IMPLIED缺省类型,但不能使用FIXED缺省值。
实例实例 ]><联系人列表> <联系人 编号="1"> <姓名>张三姓名> zhang@ 联系人> <联系人 编号="2"> <姓名>李四姓名> li@bbb.org 联系人>联系人列表> 属性类型— IDREF/IDREFS q允许一个元素的属性使用文件中的另一个元素,方法就是把那个元素的ID标识值作为该属性的取值qIDREF/ IDREFS适用于多对一、一对多实例 ]><联系人列表> <联系人 编号=“2”> <姓名>张三姓名> zhang@ 联系人> <联系人 编号=“1” 上司=“2”> <姓名>李四姓名> li@ 联系人>联系人列表>属性类型—NMTOKEN/NMTOKENSq为XML数据处理操作指定一个操作方法(如一个java类),例如:DTD定义:XML文件:<数据 安全性="ON" 授权用户 = "IggieeB SelenaS GuntherB">blah blah blah数据>属性类型—NOTATIONqNOTATIONNOTATION类型类型允许属性值为一个允许属性值为一个DTDDTD中声明的符号中声明的符号,这个类型对于使用非XML格式的数据非常有用,如图象、声音、影象等等。
对于这些数据,XML应用通过为它设定NOTATION类型属性,可以向应用程序指定一个外部处理程序定义方法Ø使用MIME类型:< <!!NOTATION NOTATION 记号名记号名 SYSTEM “MIMESYSTEM “MIME类型类型””> >Ø使用一个URL路径(指定一个处理程序): < <!!NOTATION NOTATION 记号名记号名 SYSTEM “URLSYSTEM “URL路径名路径名””> >实例 ]><文件> <电影 演示设备 = "mp"/>文件> 为“电影”元素指定了两种可选设备:movPlayer.exe用来播映.mov文件另一种则用来绘制GIF图象。
属性类型— Entitiesq实体属性 >Ø实体–内部实体 –外部实体–实体引用&实体名称;实例 ]><文件> <电影 来源 = "&BladeRunner;"/>文件>。
点击阅读更多内容