从 # XML
使用<a> </a> 表示一个节点
里面是节点的内容
允许节点有属性,属性只能出现一次,属性的顺序无关,属性必须是键值对,写在前一个<>之间
允许节点有子节点,子节点可以重复出现
<element> <\element> 不包含子节点,即内部不能出现<>
DTD
是一个xml文档的类型定义。主要有三种结构。
DOCTYPE是最外层的包裹:
<!DOCTYPE 根的名称[ … ]>
ELEMENT可以对表有哪些属性进行限定,也可以规定属性的类型
<!ELEMENT 节点名称(子节点1, 子节点2, 子节点 3,…)>
<!ELEMENT 属性名称(数据类型)>
ELEMENT中允许的数据类型为:
PCDATA: 字符数据
ENPTY: 无数据
ANY: 任意数据
ATTLIST是对元素的属性类型和默认声明。
<!ATTLIST 表名称
属性1 类型声明 默认声明
属性2 类型声明 默认声明 … … …>
其中属性的类型有:
CDATA 表示字符数据
ID 该属性值在整个element中是唯一,和主键差不多
IDREF 该属性出现在其他元素的ID位置,和外键差不多
IDREFS 允许一个引用列表,相当于这个外键是多个元素的ID
默认声明为:
#REQUIRED 表示有默认值
#IMPLIED 表示无默认值
XPath
‘/’ 表示所有孩子
’//‘ 表示任意后代
‘.’ 表示同辈
‘…’ 表示父辈
‘@a’ 表示a是一个属性, 而不是一个节点,返回的时候加,在括号里作为查询调节的时候不需要加。
‘a[b > 2]’ 表示a元素中b属性大于2的节点
‘a[count(.//) > 2]’ count表示计算节点个数,这个式子表示a节点的所有后代个数大于2的的a节点。
括号里面的路径必须加上./表示继承括号外面的路径。
‘count(a)’ a如果是一个@b,那么返回该元素属性b所引用的元素
‘id(a)’ 如果a是一个@b,那么返回该元素在b属性引用的元素
如果是一个字符串,返回
‘doc(a)’ 表示a文件的根, a应该是一个文件名
XQuery
表示$a遍历了路径为b的所有节点,对a进行测试,符合where的节点
return 表示返回了什么,如果是计算的值,必须括号{ }括起来,如果是固定的字符则不用。
return可以加上多个括号进行嵌套查询
for $a in n
where 。。。
return 。。。
多个for表示join
for $i in a,
for $j in b,
将c这个式子结果赋值给$n
好像自己设定的变量都需要加$
let $n = :c
表示$d所有的孩子
$d\*
XQury 函数
declare loacal: fun_name(b as string) as string*{
for .. in ...
where ...
return ...
}
local: 命名空间
as 后面表示类型
类型后面*表示可以返回多个该类型的值
调用的时候:
return local: fun_name(…)
或者
let $a = local:fun_name(b)