0、简要理解几个基本概念
-----0.0 标记语言是什么?
-----0.1 标准通用标记语言(SGML)
-----0.2 可扩展标记语言(XML):本文主角
1、本文主角:XML(可扩展标记语言)
-----1.0 XML学习-思维导图
-----1.1 XML-语法规范概述
-----1.2 XML-文档声明
-----1.3 XML-注释
-----1.4 XML-元素(/标记/节点)
-----1.5 XML-属性
2、实例hadoop/core-site.xml
解析
提出问题:
在搭建Hadoop集群时,第一个配置的文件是:hadoop-2.6.5/etc/hadoop/core-site.xml
,添加RPC配置。
[root@master hadoop]# vi /opt/bigdata/hadoop-2.6.5/etc/hadoop/core-site.xml
fs.defaultFS
hdfs://192.168.11.128:9000
hadoop.tmp.dir
file:/opt/bigdata/hadoop-2.6.5/tmp
其中,RPC(remote procedure call,远程过程调用)是一种信息传输协议。即一种通过网络从远程计算机程序上请求服务、而不需要了解底层网络技术的协议。
但是:
xml
后缀文件是什么?是用来干什么的本质知其然,知其所以然的精神一探xml
。不过在此不会深究,会用、够用即可。
有时候需要具备“黑盒思维”,不是“白盒思维”,知道怎么用它即可。也就是说:只需了解做成某个样子,就有利于计算机、程序来呈现出来。形象类比:不需要每个人都知道人民币在造币厂怎么生产的,我们要知道的是怎么合法、最大化地赚钱。
了解这些基本概念,有助于理解xml。
【标记】是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文档等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。
现在编辑的CSDN博客的Markdown(有道云笔记等)、Web设计或开发的HTML、XML、XHTML等,都是一种标记语言。与代码有何区别?
从外观、组织上看,它们有规范的标签形式,是一种注释文本的语言,目的是便于计算可以操作标签中的文本。
标记语言,是一种将文本、文本相关的墙体信息结合起来,展现出关于文档结构、数据处理细节的电脑文字编码。不过用标记(标签)对其进行标识,将其与文本本身区别开来。
标记语言,像其他编程语言一样,需要一个运行时环境,使其有用。这个提供运行时环境的元素称为用户代理。
标记语言举例:一段HTML代码
标记语言
标记语言
标记语言 是一种 语法简单 的标记语言。
它使用易于理解的格式标记 。
- 可以使用最简单的文本编辑器编辑。
- 所见即所得,非技术控亦可直接阅读源码。
- 可版本控制。
- 实现单一源文件出版。
只要这么写,计算机上的浏览器就能轻易识别,打开后呈现如下:其中的标签、、
等等不会呈现在网页上的,而且对于计算机浏览器而言都有固定的含义,知道怎么处理这些标签。
CSDN的Markdown也可以理解为一种标记语言,只要如下这么写(其中星号、等号等可理解为标签、标记),网页就会呈现想要的效果。
当规则被编写为 如何编写和使用这些标记时,标记就成为一种语言,并且由外部权限定义,形成标记语言的工作方式,供许多不同的人不同的场合下使用。
不然A这么标记、B那么标记、C这样标记,就乱套了,增加成本。所以,必须用一系列约定好的标记来对电子文档进行标记,以实现对电子文档的语义、结构、格式(样式)的定义。并且,这些标记必须很容易地区分内容(文本本身),易于识别。
于是国际标准化组织(ISO)发布了一个信息管理管理方面的国际标准:标准通用标记语言(Standard Generalized Markup Language,SGML),基本思想是分开文档的内容与样式。
通过其中的修饰词“标准”、“通用”就可以理解其用意了,让地球人都通用,都按这个来写。一个典型的符合SGML的文档可分为3个层次:
这也是SGML的工作原理。
可扩展标记语言(eXtensible Markup Language,XML),从名字能看出大概了:可扩展、标记、语言。
修饰词:可扩展(extensible)。主要在于XML能够控制无穷无尽的标记,而且控制每个标记的方式也是无穷尽的,即允许用户对于自己的标记语言进行定义的源语言。没有被预定义,需要自定义标签,是W3C的推荐标准。
XML的出现,肯定是为了解决某一个或某一类问题的。举一例:HTML解决了在Web上显示数据,但如果需跨设备、跨平台(安卓、PC、服务器等)之间利用这个文档中的数据(文本本身),HTML是做不到的。XML的诞生是为了完善HTML的缺陷和局限性。
XML文件的后缀名是.xml
,XML的定位是用于传输和存储数据,是为了不同应用、不同平台之间的数据共享和通信;是Internet环境中跨平台的、依赖于内容的技术,是当前处理结构化文档信息的有力工具;是一种简单的数据存储语言,使用一系列简单的标记来描述数据;与操作系统、编程语言无关,就能实现不同系统、不同应用之间的数据交换;独立于硬件、软件的信息传输工具。具体场景有:
core-site.xml
】XML只是一种标记语言(本质就是个纯文本),不存在将.xml文件
转换为可执行的二进制代码直接运行的说法。Java、python、scala等编程语言都能操作.xml文件
(有能力处理纯文本的软件都可以处理 XML)。
HTML | XML | |
---|---|---|
作用 | 显示数据 | 传输和存储数据 |
语法上明显的区别 | 没有右边XML的要求 | 要求嵌套、成对,并遵循DTD的树形结构 |
空格 | 多个空格只会显示一个 | 输入几个显示几个 |
与数据库的关系 | 无直接联系 | 与关系型、层状数据库均可对应和转换 |
大小写敏感性 | 不区分 | 区分 |
侧重点 | 显示数据、以及如何更好地显示数据,焦点是数据的外观 | 描述数据、以及如何存放数据,焦点是数据的内容 |
简要说明与XML的闺蜜(不是一个妈妈生的):JSON(Javascript Object Notation,js对象表示法)区别
数据是一样的,不同的只是数据的格式而已。同样的数据,可以用XML格式传递,用XML解析出来;也可以用JSON格式传递,用JSON解析出来。
XML、JSON,这些只是包装数据的不同的格式而已,重要的是其中的数据,而不是包装的格式。选择一种最适合场景的工具就行。
文章开头core-site.xml
,在Chrome浏览器中打开,显示如下
对于我刚才没写文档声明的core-site.xml
文件,用IE会自动在头部加上这句(Chrome不会):
文档声明语句不是必需的。完整的文档声明如下:在XML文档的第一行
version –文档符合XML1.0规范
encoding –文档字符编码,比如”GB2312”或者”UTF-8”
standalone –文档定义是否独立使用。standalone=”no”为默认值。yes代表是独立使用,而no代表不是独立使用
1、注释内容不要出现
- -
2、不要把注释放在标记中间;
3、注释不能嵌套
4、可以在除标记以外的任何地方放注释
可以横跨多行,如下:
每个XML文档必须有且只有一个根元素。
XML元素 就是指XML文件中的标签,一个标签包含:开始标签、结束标签。
XML元素命名规范
XML 元素是可扩展的
也就是说,可以经常在不中断应用程序的情况下进行扩展,比如:临时向原xml文档增加几个元素,而不必中断应用程序。
一个标签中也可以嵌套若干子标签。但所有标签必须合理地嵌套,绝对不允许交叉嵌套。下方是错误的:
welcome to www.baidu.com
对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。
XML元素可以在开始标签中包含属性(Attribute),用于提供关于原始的额外(附加)信息。
lijiacheng
实体 | 符号表示 | 描述 |
---|---|---|
< |
< | 小于 |
> |
> | 大于 |
& |
& | 与 |
' |
’ | 单引号 |
" |
" | 双引号 |
一个元素可以有多个属性,基本格式为:
<元素名 属性名1="属性值1" 属性名2="属性值2">
特定的属性名称在同一个元素标记中只能出现一次
什么时候用属性?什么时候用元素?元数据(有关数据的数据)应当存储为【属性】,而数据本身应当存储为【元素】。
不过,在XML中,使用【属性】注意事项:
hadoop/core-site.xml
fs.defaultFS
hdfs://192.168.11.128:9000
hadoop.tmp.dir
file:/opt/bigdata/hadoop-2.6.5/tmp
通过分析Hadoop源码(一般工程路径是:/hadoop-2.6.5/blob/master/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java
),start-all.sh
脚本启动Hadoop集群的过程中:
Configuration conf = new Configuration();
;addDefaultResource("core-site.xml")
方法从指定路径(CLASSPATH)加载到core-site.xml文件
;get?()
读取core-site.xml文件
中配置的数据,用于启动hadoop时生效。参考大佬博客:
hadoop配置文件加载机制
hadoop配置文件加载顺序:分析的很6