XML
Download
1 / 51

XML 语言 及其应用 - PowerPoint PPT Presentation


  • 151 Views
  • Uploaded on

XML 语言 及其应用. 马自卫 北京邮电大学图书馆 信息处理和数字图书馆研究所 2002 年 11 月 8 日. 主要内容. XML 概述 什么是 XML XML 应用实例 XML 和 HTML 比较 XML 语法 XML 文档的逻辑结构 XML 整体逻辑结构总结 XML 文档的物理结构 DTD 的建立和使用 1) DTD 概述 2) 元素定义 3) 定义元素属性 4. Scheme 的建立与应用. XML 概述. 什么是 XML. 什么是 Html ( 例 1 - 1 ) 什么是 Xml ( 例 1 - 2 )

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' XML 语言 及其应用' - johnda


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

XML语言及其应用

马自卫

北京邮电大学图书馆

信息处理和数字图书馆研究所

2002年11月8日


主要内容

  • XML概述

    • 什么是XML

    • XML应用实例

    • XML和HTML比较

  • XML语法

    • XML文档的逻辑结构

    • XML整体逻辑结构总结

    • XML文档的物理结构

  • DTD的建立和使用

    1) DTD概述

    2) 元素定义

    3) 定义元素属性

    4. Scheme的建立与应用


XML概述


什么是XML

  • 什么是Html(例1-1)

  • 什么是Xml(例1-2)

    • 需要DTD作为置标的语法

    • 需要样式单来显示

    • DTD的描述(例1-3)

2)XML应用实例


返回

例1-1

<UL>

<LI>张三</LI>

<UL>

<LI>用户ID:001</LI>

<LI>公司:A公司</LI>

<LI>EMAIL:zhang@aaa.com</LI>

<LI>电话:(010)62345678</LI>

<II>地址:五街1234号</LI>

<U>城市:北京市</LI>

<LI>省份:北京</LI>

</Ul>

<LI>李四</LI>

<UL>

<U>用户ID:002</LI>

<LI>公司:B公司</LI>

<LI>EMAIL:li@bbb.org</LI>

<LI>电话:(021)87654321</LI>

<LI>地址:南京路9876号</LI>

<LI>城市:上海市</LI>

<LI>省份:上海<LI>

</UL>

</UL>


返回

例1-2

<联系人列表>

<联系人>

<姓名>张三</姓名>

<ID>001</ID>

<公司>A公司</公司>

<EMAIL>zhang@aaa.com</EMAIL>

<电话>(010)62345678</电话>

<地址>

<街道>五街1234号</街道>

<城市>北京市</城市>

<省份>北京</省份>

</地址>

</联系人>

<联系人>

<姓名>李四</姓名>

<ID>002</ID>

<公司>B公司</公司>

<EMAII>1i@bbb.org</EMAII>

<电话>(021)87654321</电话>

<地址>

<街道>南京路9876号</街道>

<城市>上海市</城市>

<省份>上海</省份>

</地址>

</联系人>

</联系人列表>


返回

例1-3

<!ELEMENT 联系人列表(联系人)*>

<!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)>

<!ELEMENT 地址(街道,城市,省份)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT ID(#PCDATA)>

<!ELEMENT 公司(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ELEMENT 电话(#PCDATA)>

<!ELEMENT 街道(#PCDATA)>

<!ELEMENT 城市(#PCDATA)>

<!ELEMENT 省份(#PCDATA)>


XML应用实例

  • 为置标语言FCLML公司的客户列表置表语言制定的,文档类型定义DTD,其程序为fclml.dtd(例1-4)

  • 客户联系信息的XML文档Client.xml (例1-5)

  • 为client.xml制定一个样式Mystyle.xsl (例1-6)

  • Html格式及显示(例1-7,例1-8)

3)XML和Html比较


返回

例1-4

Fclml.dtd

<? xml version=“1.0” encoding=“GB2312”? >

<!ELEMENT 联系人列表(联系人)*>

<!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)>

<!ELEMENT 地址(街道,城市,省份)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT ID(#PCDATA)>

<!ELEMENT 公司(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ELEMENT 电话(#PCDATA)>

<!ELEMENT 街道(#PCDATA)>

<!ELEMENT 城市(#PCDATA)>

<!ELEMENT 省份(#PCDATA)>


返回

例1-5

Clent.xml

< ? xml version=“1.0”encoding=”GB2312” standalone=”no”?>

<!DOCTYPE 联系人列表 SYSTEM”fclml.dtd”>

<?xml—stylesheet type=”text/xsl” href=“mystyle.xsl”?>

<联系人列表>

<联系人>

<姓名>张三</姓名>

<ID>001</ID>

<公司>A公司</公司>

<EMAIL>zhang@aaa.com</EMAIL>

<电话>(010)62345678</电话>

<地址>

<街道>五街1234号</街道>

<城市>北京市</城市>

<省份>北京</省份>

</地址>

</联系人>

<联系人>

<姓名>李四</姓名>

<ID>002</ID>

<公司>B公司</公司>

<EMAII>1i@bbb.org</EMAII>

<电话>(021)87654321</电话>

<地址>

<街道>南京路9876号</街道>

<城市>上海市</城市>

<省份>上海</省份>

</地址>

</联系人>

</联系人列表>


返回

例1-6

MyStyle.xsl

<?xml version="1.0"encOding="GB2312"?>

<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl"

xmlHs="http://www.w3.org/TR/REC—html40"

result—ns:="">

<xst:template><xsI:apply—templates/></xsl:template>

<xsl:template match="/">

<HTML>

<HEAD>

<TITLE>F公司的客户联系信息</TITlE>

</HEAD>

<BODY>

<xsl:apply—templates select="联系人列表"/>

</BODY>

</HTMI>

</xsl:template>


1-6

<xsl:stemplat match="联系人列表">

<xsl:for—each select="联系人">

<UL>

<LI><xsl:value—of select="姓名"/><LI>

<UL>

<LI>用户ID:<xsl:value—of select="ID"/></LI>

<LI>公司:<xsl:value—of select=“公司"/></LI>

<LI>EMAIL:<xsl:value—of select=“EMAIL"/></LI>

<LI>电话:<xsl:value—of select=“电话"/></LI>

<LI>街道:<xsl:value—of select=“地址/街道"/></LI>

<LI>城市:<xsl:value—of select=“地址/城市"/></LI>

<LI>省份:<xsl:value—of select=“地址/省份"/></LI>

</UL>

</UL>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>


返回

例1-7

<HTML>

<HEAD>

<TITLE>F公司的客户联系信息</TITLE>

</HEAD>

<BODY>

<UL>

<LI>张三</LI>

<UI>

<LI>用户ID:001</LI>

<LI>公司:A公司</LI>

<LI>EMAIL:zhang@aaa.com</LI>

<LI>电话:(010)62345678</LI>

<LI>地址:五街1234号</LI>

<LI>城市:北京市</LI>

<LI>省份:北京</LI>

</UL>

<LI>李四</LI>

<UL>

<LI>ID:002</LI>

<LI>公司:B公司</LI>

<LI>EMAIL:1i@bbb.or8</LI>

<LI>电话:(021)87654321</LI>

<LI>地址:南京路9876号</LI>

<LI>城市:上海市</LI>

<LI>省份:上海</LI>

</UL>

</UL>

</BODY>

</HTML>


返回

例1-8

  • 张三

    • 用户ID:001

    • 公司:A公司

    • EMAIL:zhang@aaa.com

    • 电话:(010)62345678

    • 地址:五街1234号

    • 城市:北京市

    • 省份:北京

  • 李四

    • ID:002

    • 公司:B公司

    • EMAIL:1i@bbb.or8

    • 电话:(021)87654321

    • 地址:南京路9876号

    • 城市:上海市

    • 省份:上海


Xml html
XML和Html比较


Xml html1

GML(1969)

通用置标语言

SGML(1985)

标准通用置标语言

超文本置标语言

HTML(1993)

XML(1998)

可扩展置标语言

XHTML

SVG

SMIL

HDML

OEB

可缩放矢量图形语言

同步多媒体综合语言

手持设备置标语言

可扩展超文本置标语言

开放电子结构规范

XML和Html比较

置标语言家谱表


XML语法


XML文档的逻辑结构

  • 例2-1

    • 一个XML文档最基本构成

    • 上例出现的逻辑要素

    • 元素、根元素

    • 数据块CDATA节作用

    • 注释

    • 处理指令PI

2)XML整体逻辑结构总结


2-1

[1]<?xmlversion=“1.0”encoding=”GB2312“standalone=”no“?>

[2]<?xml—stylesheet type=“text/xsl”href=”mystyle.xsl”?>

[3]<专有名词列表>

[41 <专有名词>

[5] <名词>XML</名词>

[6] <解释>XMI。是一种可扩展的元置标语言,它可用以规定新的置标规则,并根据

这个规则组织数据</解释>

[7] <示例>

[8] <!—一个XML的例子—>

[9] <![CDATA[

[10] <联系人>

[11] <姓名>张三</姓名>

[12] <EMAIL>zhang@aaa.com</EMAIL>

[13] </联系人>

t14] ]]>

[15] </示例>

[16] </专有名词>

[17]</专有名词列表>


返回

例2-1

一个XMl文档最基本的构成是:

●XMl声明

●处理指令(可选)

●XML元素

例2—1中出现的逻辑要素有:

●[1]是XML声明

●[2]是处理指令

●[3]一[17]是文档中的各个元素

●[8]是注释

●[9]~[14]是CDATA节

●在[5]行的“<名词>XML</名词>”中,“<名词>”“</名词>”是标记,“XML”

是字符数据。


XML整体逻辑结构总结

  • XML文档通常以一个XML声明开始

  • 通过XML元素来组织XML数据

  • XML元素包括标记和字符数据

  • 为组织数据更方便、清晰,在字符数据中引入CDATA数据块

  • 在文档中引入注释

  • 需要给XML处理程序提供一些指示信息,XML文档中可以包含处理指令


XML文档的物理结构

  • 参数实体引用与通用实体引用的差异(例2-2,例2-3)

3 DTD的建立和使用


返回

例2-2

<?xml version=“1.0”encoding=”GB2312”standalone=“no”?>

<!DOCTYPE信件[

<!ENTITY lettersign

”张三

某网络公司销售部门

北京市海淀区中关村88号,100000”</正文>>

]>

<信件>

<收件人>李四</收件人>

<主题>hello</主题>

<正文>hello!&1ettersign;

</信件>

同样,参数实体的引用与通用实体的引用大同小异,只是要把实体换

为%就可以了,形式是:

%实体名;


返回

例2-3

<?xml version=“1.0”encoding=”GB2312“standalone=“no”?>

<!DOCTYPE联系人列表[

<!ENTITYA公司地址“北京市五街1234号’>

<!ENTITYB公司地址”上海南京路9876号“>

]>

<联系人列表>

<联系人>

<姓名>张三</姓名>

<公司>A公司</公司>

<地址>&A公司地址;</地址>

</联系人>

<联系人>

<姓名>李四</姓名>

<公司>B公司</公司>

<地址>&B公司地址;</地址>

</联系人>

<联系人>

<姓名>王五</姓名>

<公司>B公司</公司>

<地址>&B公司地址;</地址>

</联系人>

</联系人列表>


DTD的建立和使用


DTD概述

  • 概述

    • 是一套关于标记符的语法规则

    • 可以是XML文档的一部分,但通常是一份单独的或一系列的文档

    • 想使用XML进行数据交换的行业或组织可定义自己的DTD

    • DTD规定了语法分析器解释所有细节


DTD概述

  • 内部DTD

    • 文档由前导说明和文档体构成,前导说明中包含XML声明,文档体中是具体的数据信息,前导说明中可包含DTD定义。

    • 一个包含DTD的XML文档的结构(例3-1)

继续


3-1

C1ient.xml

<?xml version=“1.0”encoding=”GB2312,standalone=“yes”>

<!DOCTYPE联系人列表[

<!ELEMENT 联系人列表(联系人)*>

<!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)>

<!ELEMENT 夏NT地址(街道,城市,省份)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT ID(#PCDATA)>

<!ELEMENT 公司(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ELEMENT 电话(#PCDATA)>

<!ELEMENT 街道(#PCDATA)>

<!ELEMENT 城市(#PCDATA)>

<!ELEMENT 省份(#PCDATA)>

]>

<?xml—stylesheet type="text/xsl" href="mystyle.xsl"?>


返回

例3-1

<联系人>

<姓名>李四</姓名>

<ID>002</ID>

<公司>B公司</公司>

<EMAlL>1i@bbb.org</EMAIL>

<电话>(021)87554321</电话>

<地址>

<街道>南京路9876号</街道>

<城市>上海市</城市>

<省份>上海</省份>

</地址>

</联系人>

</联系人列表>

<联系人列表>

<联系人>

<姓名>张三</姓名>

<ID>001</ID>

<公司>A公司</公司>

<EMAIL>zhang@aaa.com</EMAIL>

<电话>(010)62345678</电话>

<地址>

<街道>五街1234号</街道>

<城市>北京市</城市>

<省份>北京</省份>

</地址>

</联系人>


DTD概述

  • 外部DTD(例3-2,例3-3)

  • 公用DTD

    • 每个XML文档单独定义的DTD可推广为一个系统内共享的公用DTD

    • 关键字system用于引用一个作者或组织所编写的众多XML文档中通用的DTD

    • 另一种外部DTD,一个由权威机构制定的,提供给特定行业或公众使用的DTD。关键字是PUBLIC(例3-4)

2)元素定义


返回

例3-2

<? xml version=“1.0” encoding=“GB2312”? >

<!ELEMENT 联系人列表(联系人)*>

<!ELEMENT 联系人(姓名,ID,公司,EMAIL,电话,地址)>

<!ELEMENT 地址(街道,城市,省份)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT ID(#PCDATA)>

<!ELEMENT 公司(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ELEMENT 电话(#PCDATA)>

<!ELEMENT 街道(#PCDATA)>

<!ELEMENT 城市(#PCDATA)>

<!ELEMENT 省份(#PCDATA)>


返回

例3-3

< ? xml version=“1.0”encoding=”GB2312” standalone=”no”?>

<!DOCTYPE 联系人列表 SYSTEM”fclml.dtd”>

<?xml—stylesheet type=”text/xsl” href=“mystyle.xsl”?>

<联系人列表>

<联系人>

<姓名>张三</姓名>

<ID>001</ID>

<公司>A公司</公司>

<EMAIL>zhang@aaa.com</EMAIL>

<电话>(010)62345678</电话>

<地址>

<街道>五街1234号</街道>

<城市>北京市</城市>

<省份>北京</省份>

</地址>

</联系人>

<联系人>

<姓名>李四</姓名>

<ID>002</ID>

<公司>B公司</公司>

<EMAII>1i@bbb.org</EMAII>

<电话>(021)87654321</电话>

<地址>

<街道>南京路9876号</街道>

<城市>上海市</城市>

<省份>上海</省份>

</地址>

</联系人>

</联系人列表>


返回

例3-4

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

<!DOCTYPE 联系人列表 PUBLIC”联系人DTD“”http://www.mydomain.com/dtds/fclml.dtd”>


元素定义

  • DTD作用

    • 告诉语法分析器它所关联的XML文档的根元素、内容及结构

    • 元素说明部分,使用元素类型声明ETD声明所有有效的文档元素

    • XML元素可以为空,也可以是纯文本或若干个子元素,子元素同时可以有各自的子元素。DTD通过元素之间父子关系描述整个文档的结构关系。(例3-5)


元素定义

  • 元素及其子元素

    • 其核心思想是采用“匹配”的逻辑(例3-6)

3)定义元素属性


返回

例3-5

< ? xml version=“1.0”encoding=”GB2312” standalone=”yes”?>

<!DOCTYPE 联系人列表〔

<!ELEMENT 联系人列表 ANY>

<!ELEMENT 联系人(姓名)>

<!ELEMENT 姓名(#PCDATA )>

〕 >

<联系人列表>

<联系人>

<姓名>张三</姓名>

< /联系人>

< /联系人列表>


返回

例3-6

<!ELEMENT 联系人 (姓名,EMAIL)+>

<!ELEMENT 姓名 (#PCDATA)>

<!ELEMENT EMAIL (#PCDATA)>


定义元素属性

  • 定义

    • 元素名是属性所属的元素的名字

    • 属性名是属性的名字

    • 缺省值是属性的初值

    • 属性类型用来指定其属于哪种有效属性

  • 属性值(例3-7,例3-8,例3-9,例3-10)


3 7 3 8 3 9
3-7,3-8,3-9

  • 例3-7

  • <!ATTLIST 元素名 属性名 属性类型 #REQUIRED>

  • <!ATTLIST 页面作者 姓名 CDATA #REQUIRED>

  • 例3-8

  • <!ATTLIST 元素名 属性名 属性类型 #IMPLIED>

  • <!ATTLIST 页面作者

  • 姓名 CDATA #IMPLIED

  • 年龄 CDATA #IMPLIED

  • 联系信息 CDATA # REQUIRED

  • 例3-9

  • <!ATTLIST 元素名 属性名 属性类型 #FIXED”缺省值“>

  • <!ATTLIST 页面作者

  • 姓名 CDATA #IMPLIED

  • 年龄 CDATA #IMPLIED

  • 联系信息 CDATA #REQUIRED

  • 网站职务 CDATA #FIXED”页面作者“


3-10

  • 例3-10

  • <!ATTLIST 元素名 属性名 属性类型 ”缺省值“>

  • <!ATTLIST 页面作者

  • 姓名 CDATA #IMPLIED

  • 年龄 CDATA #IMPLIED

  • 联系信息 CDATA #REQUIRED

  • 网站职务 CDATA #FIXED”页面作者“

  • 个人爱好 CDATA “上网”


4 schema
4.Schema的建立与应用


1 schema
1. Schema 的建立与应用

1) 在前面,我们介绍了DTD,作为XML 1.0规范的重要组成部分,DTD对于XML文档的结构起到很好的描述作用。

2) XML Schema 实际上也是XML的一种应用,就是将XML DTD重新按照XML语言规范来定义,这充分体现了XML自描述性的特点。


4-1

1.<?xml version=“1.0” encording=“GB2312”?>

2.

3. <学生花名册 年级=“六年级” 班级=“一班”>

  • <学生>

  • <姓名>李华</姓名>

  • <籍贯>河北</籍贯>

  • <年龄>14</年龄>

  • <电话>62875555 </电话>

  • </学生>

  • <学生>

  • <姓名>王珊</姓名>

  • <籍贯>北京</籍贯>

  • <年龄>12</年龄>

  • <电话>82618888</电话>

  • </学生>

    16. </学生花名册>


1 schema1
1. Schema 的建立与应用

将上述XML文档的结构用DTD来描述如下:

<!DOCTYPE 学生花名册[

<!ELEMENT 学生花名册 (学生*)>

<!ATTLIST 学生花名册 年级 CDATA # REQUIRED

班级 CDATA # IMPLIED>

<!ELEMENT 学生 (姓名+,籍贯,年龄,电话?)>

<!ELEMENT 姓名 (# PCDATA)>

<!ELEMENT 籍贯 (# PCDATA)>

<!ELEMENT 年龄 (# PCDATA)>

<!ELEMENT 电话 (# PCDATA)>

]>


1 schema2
1. Schema 的建立与应用

3)上述第2行可用下面语句替换:

<!DOCTYPE 学生花名册 SYSTEM “roster.dtd”>

4) 不难分析出这个XML文档的结构:根元素“学生花名册”有两个属性,一个是“年级”,另一个是“班级”;“学生花名册”元素下是“学生”元素,该元素不包含文本,但却包含“姓名”、“籍贯”、“年龄”、“电话”四个子元素,这些子元素均只包含文本,而不包涵子元素和属性。


1 schema3
1. Schema 的建立与应用

5)用XML Schema 来描述,可写成下面的程序,取名rosterschema.xml。

1.<?xml version=“1.0” encording=“GB2312”?>

2.<Schema xmlns=“urn:schemas-microsoft- com:xml-data”

xmlns:dt=“urn:schemas-microsoft-com:datatypes”>

  • <AttributeType name=“年级”/>

  • <AttributeType name=“班级”/>

  • <ElementType name=“姓名”/>

  • <ElementType name=“籍贯”/>

  • <ElementType name=“年龄”/>


(续上例)

8. <ElementType name=“电话” dt:type=“fixed.14.4”/>

9. <ElementType name=“学生” content=“eltOnly”/>

10. <elementType name=“姓名”/>

  • <elementType name=“籍贯”/>

  • <elementType name=“年龄”/>

  • <elementType name=“电话”/>

    14. <ElementType >

    15. <ElementType name=“学生花名册” content=“eltOnly”/>

  • <elementType =“学生”/>

  • <attribute type=“年级”/>

  • <attribute type=“班级”/>

  • </Element Type>

    20.</Schema>


1 schema4
1. Schema 的建立与应用

6)为了给roster.xml指定文档定义规则,roster.xml第2行可用下面语句替换:

<学生花名册 xmlns=“x-schema:rosterschema.xml”>

7)本XML Schema 的实现语法受到微软Internet Explorer 5.0的支持。该语法主要综合了W3C的两个Note规范XML-Data(http://www.w3.org/TR/1998/NOTE-XML-data-0105/)和文档内容描述(DCD)(http://www.w3.org/TR/NOTE-dcd),并加入一些扩展。因为微软的地位以及Internet Explorer 5.0的普及程度,因此该语法实现具有较强的适用性。


1 schema5
1. Schema 的建立与应用

8)XML Schema 让开发更轻松,下面逐句分析一下rosterschema.xml。

  • 第1行是XML类型声明语句,指明该文档是一个XML文档,并且符合版本1.0规范;该文档采用GB2312编码。

  • 第2行是Schema声明语句,它包含了Schema命名空间的声明。本例中用到了两个命名空间:一个是xmlns=“urn:schemas- microsoft-com:xml-data” ,它指定本文档是一个XMLSchema文档;另一个是xmlns:dt=“urn:schemas-microsoft-com:datatypes”>,它定义了本文档中可以使用的数据类型。


1 schema6
1. Schema 的建立与应用

  • 第3、4行是属性定义语句, 它定义了两个属性:年级和班级。

  • 第5~8行是元素定义语句,它定义了两个属性:年级和班级。

  • 第9 ~14行定义了本XML Schema的二级元素:学生,指明该元素含有包含四个子元素:姓名、年龄、籍贯、电话。

  • 第15~19行定义了本XML Schema的顶级元素:学生花名册,指明该元素包含一个子元素:学生,以及两个属性:年级、班级。

  • 第20行是结束标记语句,它指明该XML Schema 的描述到此为止。


2 schema
2. Schema 的优点

  • 一致性。读者不必为搞懂DTD而去重新学习,从而节省了时间。

  • 扩展性。引入了数据类型、命名空间。

  • 互换性。利用Schema,我们能够书写XML文档,验证文档的合法性。通过映射机制,还可以将不同的Schema进行转换,以实现更高层次得数据交换。

  • 规范性。同DTD一样,Schena定义了XML文档的整体结构,如哪些元素可以出现在文档中,元素间的关系是什么,每个元素又有哪些子元素、属性,以及元素出现的顺序和次数等等。

  • 易用性。XML文档的结构已变成Schema——一种“格式良好”的XML文档,用DOM和SAX去访问当然不在话下。


ad