# XML复习
## 第一章
## 思考题
**什么是XML?**
XML是可扩展性标记语言,XML是标准通用标记的子集
**XML的特性和优点:**
XML特性:XML的核心是数据,数据具有自我描述性,并支持unicode字符集
优点:XML能够实现异构数据之间的数据转换,XML具有良好的保值性,有严格的语法要求
**XML的处理过程:**
首先通过编辑器或应用程序创建一个XML文档,然后通过语法分析或处理程序对文档进行检测并转化为元素的树状结构,然后传送给用户端用程序进行处理。
**XML的设计目标:**
1. XML应支持各种应用程序
2. XML应直接可用于Internet
3. XML应与SGML兼容
4. 编写处理XML的应用程序应该很轻松
5. XML可选特性的数目应尽可能少,最理想的情况是0个
6. XML文档应便于阅读而且相当清晰
7. XML的设计标注应该很快形成
8. XML的设计应该是正式而简洁的
9. XML文档应当时是易于创建的
10. XML标记的简洁性是最不重要的
## 第二章
**序言**:
XML版本号、文档的特征信息和文档遵循的文档类型
第一行必须是文件的声明
<?xml version=“1.0” encoding=“UTF-8” standalone=“no”?>
**主体区:**
1. 文档的主体由一个或多个元素组成
2. 主体必须包含唯一一个根元素
3. 从数据结构来说,xml文档的层次相当于树状结构
必须有唯一的根元素
元素不能交叉重叠
**元素的命名:**
1. 元素的名称第一个字符必须是字母或者下划线
2. 其他的可以为字母、数字、下划线、连字符-、.
3. 英文大小写敏感
4. 元素名称不能有空格
**属性名称:**
1. 必须放置为开始标记中,属性值需用单引号或双引号扩起来
2. 属性名称需满足元素命名规则
3. 同一个元素不能拥有相同的属性名称,但是不同元素可以
**属性值:**
1. 不能有<和>
**实体引用:**![image-20180629151227841](/var/folders/6l/0dvj6dpx5f7386x8rqdnfz900000gn/T/abnerworks.Typora/image-20180629151227841.png)
注释格式<!--正确的xml--> 不能有-->
<![CDATA[dasdasdasd]]>
**创建格式良好的XML文档:**
1. 文档的声明
版本信息、编码格式、文档的独立性信息
2. 元素
唯一的根元素
所有的非空元素必须闭合
空元素的约定
元素的嵌套
3. 属性
把子元素转换为属性
把相似的公有特性提取为属性
区分大小写
特殊字符
**JSON和XML对比**
**JSON:**
1.是一种轻量级的数据交换格式
2.和xml一样,基于纯文本的的数据格式
3.可以表达多种数据格式
4.适用于服务器和与JS客户端的交互
5.JSON实际上是基于JS语法的一个子集
**XML优点:**
1.格式统一,内容表示规范,符合标准
2.容易与其它系统进行交互,数据共享比较简单
3.很多框架配置文件都是使用xml方式存储
4.元语言、自描述、灵活、可扩展性强
**XML缺点:**
1.文件庞大,文件格式复杂,传输占用带宽
2.服务器和客户端需要花费大量时间来解析XML
3.客户端浏览器之间解析XML的方式不一致,需要重复编写代码
**JSON优点:**
1.数据格式简单,易于读写,格式压缩,占用带宽小
2.易于解析
3.主持多种语言
4.能直接被服务器端代码使用,简化了工作量
**JSON缺点:**
1.不是元语言
2.不支持命名空间
3.JSON没有XML一目了然
## 思考题:
**XML声明都包含哪些内容?哪些是必需的?哪些是可选的?**
答:
1.版本声明:version,指明采用哪个版本,必需的
2.编码声明:指明此文档使用什么编码,必需的
3.文档独立性声明:指明文档是否依赖于外部DTD,可选的
**XML的属性和HTML的属性语法上有什么区别?**
XML属性区分大小写,并且要用双引号或单引号括起。
HTML属性不区分大小写,不用括起。
**XML预定义了哪些实体引用?**
定义了五个实体引用
| 实体引用 | 对应字符 |
| -------- | -------- |
| &; | & |
| <; | < |
| >; | > |
| "; | " |
| &apos; | ' |
**XML元素与属性的区别:**
1.属性值不能包括多重数值,但是元素可以
2.CSS不能指定属性值演示样式,但是元素可以
3.属性值不能描述结构内容,但是元素可以
4.属性值很难通过DTD进行测试
**找出代码错误**
`<?XML version="1.0"?> `
<Teams>
<Team>
<Name>Germany</Name>
<Coach>Joachim Loew</Coach>
<Assistant>`<!-- Not sure about <--assistant-->-->`</Assistant> <Player Height="193">Manuel Neuer`<Player>`
<Player Height="170">Philipp Lahm</Player>
<Player Height="186">Thomas Muller</Player>
<Player Height="184">Miroslav Klose</Player>
`</team>`
</Teams>
## 第三章
在DTD中,用户可以控制文档类型的所有元素、属性以及实体等格式
**内部DTD:**一个DTD可以在XML文档中直接定义
**外部DTD:**独立定义在一个DTD文档中,用于被其他的XML文档调用
**一个简单的DTD实例**
```xml-dtd
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (TeamName, Country, Member+)>
<!ELEMENT TeamName (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ATTLIST Member
Age CDATA #REQUIRED
Sex (Male | Female) "Male">
```
**DTD的调用:**
DTD的调用也称作文档类型声明
**外部调用:**<!DOCTYPE Team SYSTEM "Team.dtd">
**内部调用:**
```xml-dtd
<!DOCTYPE poem[
<!ELEMENT poem (author,title,content) > <-----------子元素的名称及顺序
<!ELEMENT author (#PCDATA)> <------------------子元素的数据类型
<!ELEMENT title (#PCDATA)>
<!ELEMENT content (#PCDATA)>
]>
<poem>
<author>王维</author>
<title>鹿柴</title>
<content>空山不见人,但闻人语声.
返景入深林,复照青苔上.
</content>
</poem>
```
**外部DTD声明:**<!DOCTYPE Root_Element_name SYSTEM "URI">
> 该语句必须放在XML文档的头部,且XML文档处理指令中要将standalone属性值设定为“no”
引用公开DTD文件的基本语法为
<!DOCTYPE Root_Element_name PUBLIC "Public_Dtd_name" "Public_Dtd_URi">
Public_Dtd_name有4部分:
1. 发布者
2. 所有者名字
3. 这个DTD文件的主要内容或类别的简要文本
4. 使用的语言
这4部分需要用//来隔开,RUI为公开DTD文件的相对路径或绝对路径
**DTD的结构:**
DTD一般由元素声明、属性声明、实体声明等构成,一个DTD文件并非都要用到这些
```xml-dtd
<!ELEMENT Teams (Team*)>
<!ELEMENT Team (TeamName, Country, Member+)>
<!ELEMENT TeamName (#PCDATA)> <!ELEMENT Country (#PCDATA)>
<!ELEMENT Member (#PCDATA)>
<!ATTLIST Member
Age CDATA #REQUIRED
Sex (Male | Female) "Male">
```
**元素声明:**
<!ELEMENT name type>
| 元素内容类型说明 | 含义 |
| ---------------- | ------------------------------------------------------------ |
| \#PCDATA | 表示元素内容只能是可解析的文本数据 |
| EMPYT | 表示元素为空元素,但是元素中可以包含属性 |
| ANY | 表示元素内容为任意内容,可以是空元素、可解析文本数据、子元素、混合型元素中的任意一种 |
| 子元素 | 表示元素的内容只能是指定顺序和出现次数的子元素 |
| 混合型内容 | 表示元素的内部可以是可解析的文本数据,也可以是子元素,甚至是两者的结合 |
**子元素:**规定该元素中可以出现什么子元素,子元素出现的顺序,子元素出现的次数以及选择什么时候出现何种子元素
<!ELEMENT 元素名 (子元素A,子元素B,...)>
**混合型:**可以出现可解析的文本数据,也可以出现子元素
<!ELEMENT 元素名 (#PCDATA|子元素A|子元素B|···)*>
**ANY:**可以出现PCDATA、空元素、子元素、混合型
将根元素设为ANY后,元素出现的次数和顺序不受限制
**指示符的使用:**
*表示一个元素可以出现0次或多次
?表示元素可以出现0次或1次
+表示元素可以出现1次或多次
|表示在列表中选择其一出现
无符号:只能出现一次
**实体的声明:**
简单而言就是一段代码或者一堆数据的简写
位置:分为内部实体和外部实体
一般实体和参数实体
**内部一般实体:**
<!ELEMENT 实体名 “实体内容”>
引用:&实体名;
必须加“;”,不然就是语法错误
**外部一般实体:**
<!ELEMENT 实体名 SYSTEM "被引用的实体的URI">
引用:&实体名;
**内部参数实体:**
<!ENTITY %实体名 "实体内容">
引用:%实体名;
**外部参数实体:**
<!ENTITY % 实体名 "外部实体的URI">
引用:%实体名;
**属性的声明:**
<!ATTLIST 对应的元素名 属性名 属性的类型 \[属性特点] \[属性默认值]>
<!ATTLIST element-name
attribute-name1 attribute-type default
attribute-name2 attribute-type default
...
\>
一次为一个元素声明多个属性
> 可以多次我为一个标记声明其中所包含的属性
>
> 属性声明的次序没有严格的要求,可位于与其相连的元素声明之前或之后
>
> 所有标记的属性,都要在各自所对应的标记中声明
>
> 属性可以有缺省值
| 属性类型 | 含义 |
| ---------- | ------------------------------------------ |
| CDATA | 可解析的文本数据 |
| Enumerated | 枚举列表中的一个值 |
| ENTITY | 文档中的一个实体 |
| ENTITIES | 文档中的一个实体列表 |
| ID | 文档中唯一的取值 |
| IDREF | 文档中某个元素ID属性值 |
| IDREFS | 文档中若干个元素的ID属性值 |
| NMTOKEN | 合法的XML名称 |
| NMTOKENS | 合法的XML名称的列表<br />是CDATA的一个子集 |
| NOTATION | DTD中声明的记号名,P72 |
**属性的默认设置:**
| 元素内容说明 | 含义 |
| ------------ | ------------------------------------------------ |
| 只有默认值 | 如果元素中不包含该属性,解析器将默认值作为属性值 |
| \#REQUIRED | 元素的每个实例都必须包含该属性 |
| \#IMPLIED | 元素的每个实例可以选择是否包含该属性 |
| \#FIXED | 元素的属性取值不能更改 |
### 思考题
**什么是DTD?DTD的作用是什么?**
DTD是文档类型定义,他定义了某种文档类型的规则。对XML来说,他可以控制元素,属性,实体等的格式,也可以规定那些可以在文档中出现,那些不可以。
**DTD的声明方式有哪些?**
内部声明和外部声明,也可以同时使用。
**元素的内容可以分为哪几类?**
PCDATA、EMPTY、ANY、子元素、混合型元素
**属性设置的默认值有哪些?它们的含义各是什么?**
默认值、REQUIRED、IMPLIED、FIXED
默认值就是默认值,required就是必须出现,implied是可选出现或不出现,fixed是固定,不能修改的属性
**为一个XML文档创建外部DTD。该XML文档的结构要求如下:**
(1)根元素名称为Library。
(2)Library必须包含2个元素:Book和Member,分别表示书的详细信息和发行人。
(3)Book必须包含一个BookId属性。所有其它的元素,例如Title、Author、Price、Publisher和Cost都只能作为Book的子元素。
(4)元素Member包含Name和Address两个子元素。元素Name包含FirstName、MiddleName和LastName三个子元素。元素Address包含HouseNumber、Street、City三个子元素。
```xml-dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Library (Book+, Member+)>
<!ELEMENT Book (Title, Author, Price, Publisher, Cost)>
<!ELEMENT Member (Name, Address)>
<!ATTLIST Book BookId CDATA "">
<!ELEMENT Name (FirstName, MiddleName, LastName)>
<!ELEMENT Address (HouseNumber, Street, City)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Author (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Publisher (#PCDATA)>
<!ELEMENT Cost (#PCDATA)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT MiddleName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT HouseNumber (#PCDATA)>
<!ELEMENT Street (#PCDATA)>
<!ELEMENT City (#PCDATA)>
```
给个数据应用场景,能够设计出XML表示 的文档结构,并用DTD设计出XML文档模式;
## 第四章
**命名空间:**
**XML Schema与DTD:**
DTD的局限性:
1. 不支持命名空间、数据类型不够细化、语法独立于XML语法
XML Schema的格式与DTD的格式有着非常明显的区别
XML Schema事实上也是XML的一种应用,也就是说XML Schema格式与XML格式完全相同
作为SGML DTD的一个子集,XML DTD的格式与XML格式完全不同。
q
Schema优点:
1. 一致性:借助XML自身的特性,利用XML基本语法规则定义XML文档结构
2. 扩展性:对DTD进行了扩充,引入了命名空间和数据类型
3. 互换性:能书写XML文档以及验证文档的合法性。还可进行不同Schema的转换
4. 规范性:更具有规范性
XML Schema语法
```xml
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mynamespace/myschema"
elementFormDefault="unqualified">
<!--放入实际内容 -->
</xs:schema>
```
**XML Schema语法-数据类型**
**内置数据类型:**
字符串类型、数字类型、布尔类型 :string、boolean、decimal、float、double
XML数据类型 :anyURI、QName、NOTATION
二进制数据类型 :hexBinary、base64Binary
时间类型 :持续时间 duration 、时间或者日期 date、time和dateTime 、循环的日期或者时间 gDay、gMonth、gMonthDay、gYear和gYearMonth
## 思考题
**用xmlns属性定义命名空间时,前缀有什么作用?**
可以在多个来源中混合使用不同的命名空间
**怎样定义和使用默认的命名空间?**
默认命名空间声明是一个属性声明,名称是xmlns。其值为命名空间URI。
在其作用域中,所有不带前缀的元素名称都来自于声明命名空间。
**XML Schema相比DTD有哪些优势?**
1. 继承了XML的可扩展性和自描述性。有严格的语法要求
2. XML Schema有更多的数据类型
3. 引入了命名空间,增强了XML Schema的通用型
4. XML Schema应用更加广泛
总之XML Schema有更强的表现行,能够满足不同领域的应用需求。
**XML Schema提供哪两种方式来实现数据类型的定义?怎样实现?**
一种是简单类型。在XML Schema的内置的数据类型的基础上,或由其它XML Schema继承或定义的简单类型基础上,定义新的数据类型。另一种是复杂类型,提供了一种功能强大的复杂数据类型定义机制,可以实现包括结构描述在内的复杂数据类型。
## 第五章
**简单地说,DOM是一组独立于语言和平 台的应用程序编程接口,它能够描述如 何访问和操纵存储在结构化XML和 HTML文档中的信息 **
**XML文档编程解析的两种方法思路**
DOM和SAX
**理解SAX解析方式,及其与DOM的区别**
SAX是一个接口集合,它允许开发人员在自己的应用中通过这个接口集合来读取和分析XML文档中的数据。
SAX处理涉及以下几步:
1. 创建事件处理程序
2. 创建SAX解析器
3. 将事件处理程序分配给解析器官
4. 对文档进行解析,将每个事件发送给处理程序
SAX不需要在内存中建立整个文档的树结构,和DOM相比是一个轻量级的接口集合。
因为整个文档没有放到内存中,SAX不能随机的到达文档的某一部分,同时,开发人员必须在处理过程中按顺序处理信息,所以SAX在处理包含很多内部交叉引用的文档时就会有一些困难,不能实现复杂的搜索。
**理解DOM模型,DOM解析XML文档的 思路,如何生成文档对象?**
**DOM的工作方式:**
1. 将文档一次性装入内存,然后对文档进行解析,根据文档中定义的元素、属性、注释、处理指令等不同的内容进行分解,以节点树的形式在内存中创建XML文件的表示,也就是一个文档对象模型
2. 把文档对象化
3. 文档中的每个节点对应着模型中的一个对象
4. 根据对象提供的编程接口,在应用程序中访问XML文档,进而操作XML文档
## 思考题
**什么是DOM?简述DOM的结构和工作方式**
DOM是文档对象模型,他是一组独立于语言和平台的应用程序编程接口。
能够描述如何访问和操作存储在结构化XML和HTML中的信息。
DOM是树状结构,元素、属性、注释、处理程序都是DOM树状结构的节点。
DOM的工作方式:首先将XML文件一次性读入内存,然后对文档进行解析,对其中的元素、属性、注释、处理程序等不通内容进行分解,形成DOM树状结构。文档中的每个节点,对应着模型中的一个对象。然后根据节点提供的编程接口,在应用程序中对XML文档进行访问和操作。
**Node接口的appendChild()和insertChild()方法有什么不同?**
Node接口的appendChild()方法是在该节点的所有子节点之后追加一个子节点,而insertChild()方法是在该节点的所有子节点前插入一个子节点。
**如何删除XML文档的节点?**
删除节点可以使用node接口中的removechild()函数。指定删除某个子节点和他所有的子节点。并没有从内存中delete,只是remove。
## 第六章
XML强调形式描述与内容描述的分离
XSL标准本质上是一个指定如何翻译/显示一个XML文档标记的翻译机制,包括:
XSLT:将一个xml文档准换成另一个XML文档,甚至可以是html文档等其他格式的文档
XPath:一个在XML文档中查找信息的语言,并且XQuery和XPointer都构建在XPath之上
**XSLT匹配节点的模式**
1. 匹配根节点、子节点以及其他后代节点用 /
2. 匹配元素名称 match <xsl:template match="Matches">
3. 通配符 * 匹配所有元素
4. 使用ID匹配单个元素
<xsl:template match="id('g1')">
<h1><xsl:value-of select="."></h1>
\< /xsl:template>
5. 使用@匹配属性节点
<xsl:template match="@Type">
<h1><xsl:value-of select="."/></h1>
\</xsl:template>
6. 使用comments()匹配注释节点
7. 用processing-instruction()匹配处理指令节点
8. 使用text()匹配文本节点
9. 使用或操作符“|”
10. 使用[]进行测试
**XPath简介, XPath表达式含义与用法**
XPath表达式 /child::Match/child::City /Match/City
可用于match、select、test属性
位置步- 轴名称::节点测试[谓词]
child::book[price>35.00]
child::para[position()>1]
简略语法
- 简略语法{原语法}:描述
- nodename{child::nodename}:选取此节点的所有子节点
- //{descendant-or-self::node()/}:从匹配选择的当前节点选 择文档中的节点,而不考虑它们的位置
- .{self::node()}:选取当前节点
- ..{parent::node()}:选取当前节点的父节点
- @{attribute::}:选取属性
- [n]{position()=n}:选取第n个节点
## 思考题
**什么事XSL?他包含哪几部分?**
XSL代表可扩展样式表语言,包括XSLT、XPATH、XML-FO。
XSLT可将一个XML文档转换成另一个XML文档,同时可以完全忽略格式化文档。
XPath是一门XMl文档中查找信息的语言,并且XQuery和XPointer都构建在XPath之上。
XML-FO可根据数据的值对XML数据进行格式化,可以精确设置屏幕打印格式,而没有必要在XML上使用XSL转换。
**xsl:value-of和xsl:for-each元素有什么异同?**
两者都会输出模式匹配的节点,但如果匹配的节点多余一个。vlaue-of只会显示第一个,for-each可以显示所有匹配的节点。
**如何用XPath选择上下文节点中除第一个以外的所有para子元素?写出其完整形式。**
child::para[position()>1]
XPath提供了一系列节点轴,使用这些节点轴可以选取树 中相对于当前节点定位的其他节点。例如,显示当前元 素的父元素、子元素或者其他后代元素。Xpath也提供了 很多函数返回节点集,这些节点集包含符合匹配条件的 所有节点。
## 第七章
**什么是XQuery?它与XPath、XSLT有什么关系?**
答:XQuery即XML Query,是W3C制定的一套标准,用来从类XML文档中提取信息的查询语言。
XQuery与XPath和XSLT的关系十分密切。一方面,从XPath角度来看,XQuery被构建在XPath表达式之上,XQuery和XPath使用相同的数据模型,并支持相同的函数和运算符,他们的语法和语言描述也是同源的以保证统一性。另一方面,从XSLT角度来看,XQuery和XSLT都是构建在XPath之上,都可以用于提取XML中的数据,因此两者在功能方面有许多重叠的地方。
XQuery和XSLT的关键区别:
1. XQuery主要用于从类XML文档中提取数据,并可以将提取的数据放入任意的片段之中,XQuery采用全新的查询语法
2. XSLT主要用于将XML转换为其他文档,具有内置的遍历引擎,默认情况下会处理整个文档,XSLT仍然采用XML语法。
**什么是FLWOR表达式?**
FLWOR表达式是XQuery中最常用也是功能最强大的一种表达式,名字来自for、let、where、order by和return等子句首字母。FLWOR表达式的完整语法格式如下。
for子句 | let子句
where子句
order by子句
return子句
其中for子句和let子句可以出现一次或多次,但必须至少出现一次,表示遍历或者定义。
where子句用于对结果进行过滤
order by子句用于对结果进行排序
return子句用于指定返回表达式
## 第八章
XML文档中的任何元素均可成为XLink,包含链接的元素称为“链接元素”
链接元素由xlink:type属性定义,取值如下:
simple,表示元素是简单链接
extended,表示元素是扩展链接
locator,表示是远程资源
arc,表示是链接资源的弧
resource,表示是本地资源
titile,表示是自然语言的链接描述
例子:
```xml
<Name
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="Brazil.html" xlink:role="Brazil.html"
xlink:title="Brazil national football team" xlink:show="replace"
xlink:actuate="onRequest">
Brazil
</Name >
```
xlink:show属性定义了激活链接时如何进行显示内容。该属性包含了下列五个值:replae、new、embed、other、none。
xlink:actuate属性定义了如何激活链接,该属性包含下列4个值:inRequest、onLoad、other、none
扩展链接包含多向链接。
```xml
<Downloads xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="extended">
<Name xlink:type="resource">Local Download </Name>
<Homesite xlink:type="locator" xlink:href="http://www.abc.com/download/"/>
<Mirror xlink:type="locator" xlink:href="http://www.def.com/download/"/>
<Mirror xlink:type="locator" xlink:href="http://www.ghi.net/down/"/>
</Downloads>
```
XPointer使超级链接可以指向 XML 文档中更多具体的部分(片断)
Xpointer指向访问内容定位方法
## 思考题
**XML中的链接分为哪个两部分?它们有什么区别?**
XML中的链接分为XLink和XPointer。XLink定义了如何从一个文档链接到另一个文档,XPointer定义了如何对一个文档中的不同部分进行寻址和定位。XLink指向一个URI。这个URI指定了一项特定资源,并且可以包含XPointer,用以更准确地定位到目标资源或者文档的某一部分。
## 第十章
**NoSQL基本概念,BASE的含义**
## 第十一章
**MongoDB概述**:是一个开源的高性能无模式文档型数据库
**MongoDB特点:**
1. 分布式文件存储数据库,由C++编写
2. 功能丰富,最像RDB的NoSQL产品
3. 提供了不同语言版本的api来使用数据库
4. 提供原生shell
5. 支持的查询语言非常强大
6. 查询监视:MongoDB 包含一系列监视工具用于分 析数据库操作的性能。
7. 复制及自动故障转移:MongoDB 数据库支持服务 器之间的数据复制,支持主-从模式及服务器之间 的相互复制。复制的主要目标是提供冗余及自动故 障转移。
8. 高效的传统存储方式:支持二进制数据及大型对象 (如照片或图片) 。
9. 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
## 第十二章
**Neo4j特点**
1. 优越的性能:高效的读写能力
2. 设计的灵活性:无模式,自然扩展
3. 迭代的敏捷性:适用频繁迭代的敏捷开发方法
4. 安全可靠:支持事务管理,提供实时在线备份、日 志恢复功能
5. 简单易用:支持多种程序设计语言开发,特别是 Spring data Neo4j开发包;支持RESTAPI
6. 支持数据导出JSON、xls
7. 丰富的学习资源
8. 大企业实践应用的考验:拥有广大实力派用户群体 验证了其稳定性、健壮性
Neo4j数据特点
- 节点、关系、属性是构成图数据的三个基本元素
- 节点和关系的属性是一个KV数据集合;
- 每个关系都有一个开始节点和一个结束节点互相连接;是有方向的;
- 大多数情况下关系可以不需要属性;
Neo4j存储的数据是一个属性图
- 节点对应实体,可以是人、事物或者任何一种业务 概念定义;
- 节点属性是实体的描述内容
- 实体间关联表现为节点关系,如朋友、从属等关系
Neo4j数据模型:属性图抽象
Neo4j数据模型中用标签表示节点类别