一、文档类型定义简介

DTD(英文:Document Type Definition,中文:文档类型定义)是一套关于标记符的语法规则,是标准通用标记语言和扩展标记语言1.0版规格的一部分,是文档的验证机制,也是一个美国信息交换标准代码文本文件。它是一种保证标准通用标记语言、可扩展标记语言文档格式正确的有效方法,可通过比较文档和文档类型定义文件来看文档是否符合规范,元素和标签使用是否正确。文件实例提供应用程序一个数据交换的格式。因为文档类型定义正是让标准通用标记语言、可扩展标记语言文件能够成为数据交换标准,所以不同的公司只需定义好标准文档类型定义即可,各公司都能依文档类型定义建立文档实例,并进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。

1.文档简介编辑
文档类型定义可定义合法的标准通用标记语言、可扩展标记语言文档构建模块。它使用一系列合法的元素来定义文档的结构。
文档类型定义可被成行地声明于标准通用标记语言、可扩展标记语言文档中,也可作为一个外部引用。

2.文档类型编辑
文档类型定义可定义合法的XML文档构建模块。
它使用一系列合法的元素来定义文档的结构。
它可被成行地声明于 XML 文档中,也可作为一个外部引用。
通过它,您的每一个 XML 文件均可携带一个有关其自身格式的描述。
通过它,独立的团体可一致地使用某个标准的文档类型定义来交换数据。
而您的应用程序也可使用某个标准的文档类型定义来验证从外部接收到的数据。
您还可以使用它来验证您自身的数据。

内部声明
假如 DTD 被包含在您的 XML 源文件中,

<!DOCTYPE根元素 [元素声明]>
带有 DTD 的 XML 文档实例<?xmlversion="1.0"?>
note[
body)>
<!ELEMENTto(#PCDATA)>
<!ELEMENTfrom(#PCDATA)>
<!ELEMENTheading(#PCDATA)>
<!ELEMENTbody(#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don'tforgetmethisweekend</body>
</note>

以上 DTD 解释如下:
!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:“to、from、heading,、body”
!ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
!ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
!ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
!ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

外部声明

假如 DTD 位于 XML 源文件的外部,

<!DOCTYPE 根元素 SYSTEM "文件名">
这个 XML 文档和上面的 XML 文档相同,
<?xmlversion="1.0"?>
<!DOCTYPEnoteSYSTEM"note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don'tforgetmethisweekend!</body>
</note>

这是包含DTD的"note.dtd"文件:

<!ELEMENTnote(to,from,heading,body)> <!ELEMENTto(#PCDATA)> <!ELEMENTfrom(#PCDATA)> <!ELEMENTheading(#PCDATA)> <!ELEMENTbody(#PCDATA)>

3构建模块编辑
XML 以及 HTML 文档的主要构建模块是类似 … 这样的标签。
XML 文档构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA
下面是每个构建模块的简要描述。

元素
元素是 XML 以及 HTML 文档的主要构建模块。
HTML 元素的例子是 “body” 和 “table”。XML 元素的例子是 “note” 和 “message” 。元素可包含文本、其他元素或者是空的。空的 HTML 元素的例子是 “hr”、“br” 以及 “img”。
实例:

<body>body text in between</body>
<message>some message in between</message>

属性
属性可提供有关元素的额外信息。
属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。

 <img src="computer.gif" />

元素的名称是 “img”。属性的名称是 “src”。属性的值是 “computer.gif"并且可以用样式来控制大小等显示效果。由于元素本身为空,它被一个 " /” 关闭。

实体
实体是用来定义普通文本的变量。实体引用是对实体的引用。
大多数同学都了解这个 HTML 实体引用:" "。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。
当文档被 XML 解析器解析时,实体就会被展开。

PCDATA
PCDATA 的意思是被解析的字符数据(parsed character data)。
可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 & 、< 以及 > 实体来分别替换它们。

CDATA
CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

4文档元素编辑
在一个 DTD 中,元素通过元素声明来进行声明。

声明一个元素
在 DTD 中,XML 元素通过元素声明来进行声明。

<!ELEMENT 元素名称 类别>

或者

<!ELEMENT 元素名称 (元素内容)>

空元素
空元素通过类别关键词EMPTY进行声明:

<!ELEMENT 元素名称 EMPTY>

只有 PCDATA 的元素
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

<!ELEMENT 元素名称 (#PCDATA)>

带有任何内容的元素
通过类别关键词 ANY 声明的元素,

<!ELEMENT 元素名称 ANY>

带有子元素(序列)的元素
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:

<!ELEMENT 元素名称 (子元素名称 1)>

或者

<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>

相同的元素至少出现一次的声明
语法格式为:

<!ELEMENT element-name (child-name+)>

例:

note (message+)>

例中的+是指子元素message必须在被包含的note元素里出现一次或者多次。
5.同元素次数编辑
同元素不出现或者多次出现
语法格式为:

<!ELEMENT element-name (child-name*)>

例:

<!ELEMENT note (message*)>

例中的*是指子元素message能够在被包含的note元素里不出现或者出现多次。
同元素不出现或者出现一次
语法格式为:

<!ELEMENT element-name (child-name?)>

例:

<!ELEMENT note (message?)>

例中的?是指子元素message能够在被包含的note元素里不出现或者出现一次。
6.文档属性编辑
在 DTD 中,属性通过 ATTLIST 声明来进行声明。
声明属性
属性声明拥使用下列语法:

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

以下是属性类型的选项:
类型描述
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个预定义的 XML 值
默认值参数可使用下列值:
值 解释
值 属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
规定一个默认的属性值
DTD:

<!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0">

合法的 XML:

<square width="100" />

在上面的例子中,“square” 被定义为带有 CDATA 类型的 “width” 属性的空元素。如果宽度没有被设定,其默认值为0 。
7.文档实体编辑
实体是用于定义引用普通文本或特殊字符的快捷方式的变量。
实体引用是对实体的引用。
实体可在内部或外部进行声明。
一个内部实体声明
语法:

<!ENTITY 实体名称 "实体的值">

DTD 例子:

<!ENTITY writer "Bill Gates">

copyright “Copyright 具体的url”>XML 例子:
&writer;©right;注释: 一个实体由三部分构成: 一个和号 (&), 一个实体名称, 以及一个分号 (?。
一个外部实体声明
语法:

<!ENTITY 实体名称 SYSTEM "URI/URL">

DTD 例子:

<!ENTITY writer SYSTEM "具体的url"> <!ENTITY copyright SYSTEM "具体的url">XML 例子:

<author>&writer;&copyright;</author>

8.DTD实例编辑

<!DOCTYPENEWSPAPER[
<!ELEMENTNEWSPAPER(ARTICLE+)>
<!ELEMENTARTICLE(HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENTHEADLINE(#PCDATA)>
<!ELEMENTBYLINE(#PCDATA)>
<!ELEMENTLEAD(#PCDATA)>
<!ELEMENTBODY(#PCDATA)>
<!ELEMENTNOTES(#PCDATA)>
<!ATTLISTARTICLEAUTHORCDATA#REQUIRED>
<!ATTLISTARTICLEEDITORCDATA#IMPLIED>
<!ATTLISTARTICLEDATECDATA#IMPLIED>
<!ATTLISTARTICLEEDITIONCDATA#IMPLIED>
<!ENTITYNEWSPAPER"VervetLogicTimes">
<!ENTITYPUBLISHER"VervetLogicPress">
<!ENTITYCOPYRIGHT"Copyright1998VervetLogicPress">
]>

产品目录

<!DOCTYPECATALOG[
<!ENTITYAUTHOR"JohnDoe">
<!ENTITYCOMPANY"JDPowerTools,Inc.">
<!ELEMENTCATALOG(PRODUCT+)>
<!ELEMENTPRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLISTPRODUCT
NAMECDATA#IMPLIED
CATEGORY(HandTool|Table|Shop-Professional)"HandTool"
PARTNUMCDATA#IMPLIED
PLANT(Pittsburgh|Milwaukee|Chicago)"Chicago"
INVENTORY(InStock|Backordered|Discontinued)"InStock">
<!ELEMENTSPECIFICATIONS(#PCDATA)>
<!ATTLISTSPECIFICATIONS
WEIGHTCDATA#IMPLIED
POWERCDATA#IMPLIED>
<!ELEMENTOPTIONS(#PCDATA)>
<!ATTLISTOPTIONS
FINISH(Metal|Polished|Matte)"Matte"
ADAPTER(Included|Optional|NotApplicable)"Included"
CASE(HardShell|Soft|NotApplicable)"HardShell">
<!ELEMENTPRICE(#PCDATA)>
<!ATTLISTPRICE
MSRPCDATA#IMPLIED
WHOLESALECDATA#IMPLIED
STREETCDATA#IMPLIED
SHIPPINGCDATA#IMPLIED>
<!ELEMENTNOTES(#PCDATA)>
]>

图书馆

books[
<!ENTITY%attrib"(every|default)"> 
<!--设定类型的临时实体--> 
<!ELEMENTbooks(book*)> 
<!--图书馆图书元素--> 
name,id,attrib+,description?,writer?,corp?,comment?)>
<!--一本图书的元素--> 
<!ELEMENTname(#PCDATA)> 
<!--名字--> 
<!ELEMENTidEMPTY>
<!--ID(空)--> 
<!ATTLISTididID#REQUIRED> 
<!--ID属性--> 
<!ELEMENTattribEMPTY> 
<!--类型(空)--> <!ATTLISTattribattrib%attrib;"default"> <!--类型属性--> 
<!ELEMENTdescription(#PCDATA)> 
<!--描述--> <!ELEMENTwriter(#PCDATA)> 
<!--作者--> 
<!ELEMENTcorp(#PCDATA)> <!--出版社--> 
<!ELEMENTcomment(#PCDATA)> 
<!--注释--> 
<!ENTITYlibrary"OurLibrary"> 
<!--定义图书馆产权实体-->
]>

9优劣对比编辑
DTD的优势

每一个XML文档都可携带一个DTD,用来对该文档格式进行描述,测试该文档是否为有效的XML文档。既然DTD有外部和内部之分,当然就可以为某个独立的团体定义一个公用的外部DTD,那么多个XML文档就都可以共享使用该DTD,使得数据交换更为有效。甚至在某些文档中还可以使内部DTD和外部DTD相结合。在应用程序中也可以用某个DTD来检测接收到的数据是否符合某个标准。
对于XML文档而言,虽然DTD不是必须的,但它为文档的编制带来了方便。加强了文档标记内参数的一致性,使XML语法分析器能够确认文档。如果不使用DTD来对XML文档进行定义,那么XML语法分析器将无法对该文档进行确认。
元素的定义
根元素的声明
每个XML文档都只有一个根元素,其它的子元素都包含在该根元素中。因此在DTD中对根元素的声明是必不可少的。

root[
<!-- 子元素 --> ]>
<!-- 文件体 -->

DOCTYPE是“document type”(文档类型)的简写,DOCTYPE声明必须放在文档最顶部,在所有代码和标识之上,DOCTYPE声明是必不可少的关键组成部分。DTD语法要求DOCTYPE必须要大写,而且DOCTYPE和元素之间必须要有空格隔开。如在以上代码中DOCTYPE和根元素root之间要有空格隔开。
DTD的缺陷
利用DTD验证有效性的解析器,就能够立即对文档的完整性进行可靠的检查。DTD虽然比较实用,但DTD也有不少的缺陷。
DTD有自己的特殊语法,
DTD只提供了有限的数据类型,
DTD不支持域名机制。

二、DTD介绍

Document Type Definition;

DTD是一种XML的约束方式,除了此种约束方式外,还有XSchema,XSchema比DTD的约束能力还要强,因此DTD正在逐渐淘汰;

DTD的目的就是约束XML标签的写法;比如在我们struts2开发当中,编写struts.xml时,需要遵循

<struts><package name="" namespace="" extends=""><action></action>    </package>
</struts>

的规则,就是通过DTD进行约束的,因此我们在开发当中通过Eclipse导入DTD文件,便于开发提示,如果在开发中开发人员不遵循DTD的规范,则会出现错误提示;
XML约束的重要性:在编写XML时,对于XML进行约束是非常重要的,因为如果对于XML不约束,则会让开发人员很难掌握;
而DTD通常是由框架设计人员定义的,一般的开发人员只需要在XML中遵循DTD规范编写XML即可;
三、导入DTD
如果要导入DTD,可以通过两种方式:
(1)在XML中直接编写;
(2)在专门的DTD文件中编写,然后在XML中通过特定的语句导入DTD文件;

1、在XML中直接编写
语法如下:

<!DOCTYPE 根节点[.........
]>

2.XML文件中导入DTD文件
此种方式需要考虑两个情况:
(1)如果是本地文件,则:

<!DOCTYPE 根节点 SYSTEM "dtd的URL">

此处的URL指的是比如 “F:\1.dtd”
(2)如果是共享文件,则:

<!DOCTYPE 根节点 PUBLIC "dtd名称" "dtd的URL">

四、DTD语法
在DTD中可以定义XML标签的顺序、个数,属性的值,实体;
1.XML元素定义
语法如下:

<!ELEMENT 元素名称 元素类型> //定义元素的类型,但是只能是 ANY(表示任意类型)或EMPTY(空元素); <!ELEMENT 元素名称 (元素内容)> //定义元素的内容,一定要加上();

对于元素内容,
----可以定义子元素的名称,比如:

<!ELEMENT 元素名称 (子元素1,子元素2,子元素3)> 表示3个子元素只能出现一次,并且按照此顺序出现; <!ELEMENT 元素名称 (子元素1|子元素2|子元素3)> 表示3个子元素中只能出现一个;

我们还可以定义子元素的个数,比如:
(1)+:1次或多次;比如 (name+)表示此name元素只能出现1次或多次。
(2)?:0次或1次;比如(name?)表示此name元素只能出现0次或1次。
(3):0次或多次;比如(name)表示此name元素任意出现几次。
(4)无:只能一次;比如(name)表示此name元素只能出现1次。
对于元素内容,
----也可以定义子元素内容的类型,比如#PCDATA,表示字符串;

举例:

<!DOCTYPE personlist [    <!-- 根节点为personlist-->
<!ELEMENT personlist (person+)>    <!-- personlist的子元素为person,并且可以出现1次或多次-->
<!ELEMENT person (name,age,salary)>    <!-- person的子元素是name,age,salary,并且可以出现一次,并且出现顺序以此顺序为准-->
<!ELEMENT name ANY>    <!--name可以使任意类型 -->
<!ELEMENT age (#PCDATA)>    <!-- age可以是字符串-->
<!ELEMENT salary (#PCDATA)>    <!-- salary可以是字符串-->
]>

从以上可以看出,DTD不可以定义数字等类型,此为DTD的缺陷;

2.XML属性定义
语法如下:

<!ATTLIST 标签名属性名1        属性类型        属性说明属性名2        属性类型        属性说明>

属性类型可以是
(1)CDATA:最普通的字符串;
(2)枚举,即(值1|值2|值3),需要括号
(3)ID:属性值需要以字母或下划线开头;
属性说明可以是:
(1)#REQUIRED:必须设置;
(2)#IMPLED:可选值,即此属性可以设置,也可以不设置;
(3)#FIXED:固定值,通常语法为:#FIXED “固定值”
(4)默认值;

举例:

<!DOCTYPE personlist [
<!ELEMENT personlist (person+)>
<!ELEMENT person (name,age,salary)>
<!ELEMENT name ANY>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ATTLIST person
aaa CDATA #REQUIRED        <!-- -->
bbb CDATA #IMPLIED         <!-- 可选属性-->
ccc CDATA #FIXED "xiazdong" <!--固定值,不需要设置 -->
ddd CDATA "XZDONG"         <!--默认值为"XZDONG", 可以自己设置 -->
eee ID #REQUIRED             <!--ID -->
fff (1|2|3) "1"                         <!--枚举值,默认为1 -->
>
]>

3、XML实体定义
实体类似于一个可重用常量,或者说是ant中的classpath,可以被引用;
语法如下:

<!ENTITY 实体名称 "实体内容">

引用实体语法:
&实体名称; 注意:最后的“;”一定需要;
注意:引用实体必须在XML中引用;

举例:

<!DOCTYPE personlist [
<!ENTITY constant "aaaa">
<!ELEMENT personlist (person+)>
<!ELEMENT person (name,age,salary)>
<!ELEMENT name ANY>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
]>
<personlist>
<person >
<name>&constant;</name>        <!-- 引用constant实体-->
<age>aaa</age>
<salary>aaa</salary>
</person>
</personlist>

小知识点:根据XML自动生成DTD
因为一般我们写的XML基本都是没有DTD的,如果要自己写DTD,又很麻烦,因此我们可以通过工具来自动生成:trang
功能:能够完成如下转换:
(1)XML —> DTD
(2)XML —>XSchema
(3)DTD—>XSchema
使用方法:
java -jar trang.jar -I xml -O dtd input.xml output.dtd 即可;
-I xml 表示输入为xml;
-O dtd表示输出为dtd文件;
input.xml表示输入文件;
output.dtd表示输出文件;

原文:https://blog.csdn.net/xiazdong/article/details/7270593
原文: https://baike.sogou.com/v10557738.htm?fromTitle=dtd

DTD-文档类型定义(Document Type Definition)相关推荐

  1. XML——文档类型定义(DTD-Document Type Definition)

    [0]README 0.1)本文文字描述转自 core java volume 2 , 旨在理解 XML--文档类型定义(DTD-Document Type Definition) 的基础知识: 0. ...

  2. XML--- XML文档类型定义(DTD)

    **定义:**DTD定义了文档的逻辑结构,规定了文档中所使用的元素.实体.元素的属性.元素与实体之间的关系.其作用主要表现在以下几个方面. (1) 使用DTD可以提供一种统一的格式.XML的可扩展性为 ...

  3. DTD(文档类型定义)概述

    DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. DTD 简介 文档类型定义(DTD)可定义合法的XML文档构建模块.它 ...

  4. 前端:HTML5/36/HTML5简介,文档类型定义,网页字符集,页面结构标记,文章相关的标记,其它标记,音频标记,视频标记,表单中新增的属性,表单input元素type属性的值

    HTML5简介 HTML5是新一代的HTML: HTML5目前主要应用在手机端,在PC端最新浏览器已经开始支持了,但还不全面: HTML5是由W3C和WHATWG合作的结果: W3C是万维网联盟,主要 ...

  5. 文档声明Doctype和Doctype html区别 文档类型定义(DTD)

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 文档声明的作用: 文档声明是为了告诉浏 ...

  6. 文档类型定义和合法性(2)

    8.5.3 子元素列表 由于SEASON元素被声明为可以接受任何元素作为子元素,因而可以接受各种各样的元素.当遇到那些多多少少有些非结构化的文本,如杂志文章时,这种情况就很有用.这时段落.副栏.项目列 ...

  7. XML之文档类型定义和合法性(转)

    来至:liang--liang博客:http://www.cnblogs.com/liang--liang/archive/2008/01/15/1039277.html 好牛 XML被作为一种元标记 ...

  8. DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义

    DOCTYPE html PUBLIC 指定了 HTML 文档遵循的文档类型定义 今天看到一篇CSS应用的一个友好搜索,我按网页上的代码复制.粘贴后预览时总达不到效果,而直接拷贝他的实例却能达到效果, ...

  9. XML文档类型定义DTD

    DTD概述 DTD用来定义XML文档的结构,它包含一系列规则说明,以确保XML文档的一致性和有效性 DTD定义了XML文档可用的词汇(元素和属性的名称)和结构: 元素名称,包括根元素 元素的属性及属性 ...

  10. J2EE之dtd(文档类型定义)

    一:良好xml的格式 1:xml的作用 1.1 数据交互(两种方式) 第一种:{name:xxx,sex:'男',age:18},{name:xxx,sex:'男',age:18},{name:xxx ...

最新文章

  1. C# + ArcEngine 常用方法(不定时更新)
  2. android fps 垂直同步,浅谈Android流畅度
  3. 洞悉物联网发展1000问之物联网会产生哪些独角兽?机会在哪里?
  4. 精华自取:神策 2019 数据驱动大会亮点回顾
  5. 常用开源工具、框架收藏
  6. 计算机兴趣小组意义,信息技术兴趣小组开展之我见
  7. 工业交换机出现故障问题排查步骤详解
  8. Spring 4 MVC 单元测试例子
  9. 生产者-消费者模式的实现
  10. arcgis 字段计算器 条件赋值_ArcGIS中属性表的常用操作汇总
  11. html网址怎么收录,新站如何快速收录 让新网站快速被收录的几点技巧
  12. php mirror怎么安装,如何安装Composer配置国内Packagist镜像
  13. Oracle XE安装具体解释
  14. jdbc显示mysql的数据_JDBC链接mysql插入数据后显示问号的原因及解决办法
  15. python提取国家和地区信息
  16. 嫡权法赋权法_组合赋权法确定权重的方法探讨
  17. 滴滴竟然已经投资了这么多公司?
  18. 常州2021高考成绩查询,2021年常州高考成绩排名及成绩公布时间什么时候出来
  19. 线性模型(梯度下降随机梯度下降)
  20. python列表查找值_查找列表中某个值的位置(python)

热门文章

  1. 利用PicGo快速获得图片外链(七牛云图床)
  2. 使用addClass和removeClass完成内容切换
  3. 【总结】计算机网络原理
  4. Unity3D之FingerGestures使用
  5. 基于Java毕业设计游戏分享平台源码+系统+mysql+lw文档+部署软件
  6. 视频: 老罗演讲问答集锦
  7. 手动挡五个档位示意图_捷达档位示意图手动挡
  8. 来自清华学子的一个自述---在树洞里
  9. 计算机常见的三种bios,各种类型电脑进入BIOS方法汇总,包含中英文对照图表!...
  10. 电影《五十度灰》主题曲《Love me like you do》——尽你所能爱我Ellie Goulding(埃利·高登)——【英文小清新歌曲推荐】