表达式07定位、链接与查询3-xquery

链接查询  时间:2021-03-01  阅读:()

五、 XQuery

XQuery XM L Query Language X ML查询语言是查询各类XML数据源中数据的一种语言 当前版本为XQuery 1.0推荐标准Rec ommendation 由万维网联盟W3 C于2007年1月23日推出。

XQuery用于查询视作数据库的XML文档中的数据类似于查询关系数据库的S QL和查询面向对象数据库的OQL。

1 概述

随着采用XML存储、交换和表示的信息的不断增加聪明地查询X ML数据源的能力变得越来越重要。XML的强大实力之一是它在表示来自各式各样数据源的许多不同种类信息时的灵活性。为了利用这种灵活性 XML查询语言必须为检索和解释来自这些不同数据源的信息提供所需的特性。

XQuery是为满足W3 C的XML Query 1.0 Requirements和XML Query Use Cases推荐标准中所确定的需求而设计的它被设计成一种查询简洁易懂的语言。它足够灵活可查询范围宽广的XML信息源包括数据库和文档。XQuery采用的是非XML查询语法采用XML语法的查询语言参见下面配套标准中的XQueryX源自Don Chamberlin等人于2000年底提出的一种XML查询语言——Quilt。

XQuery在XML文档的抽象的逻辑结构上而不是在其语法表面上进行操作。该逻辑结构称为“数据模型”被定义在W3 C标准XDM中。

XQuery 1.0是XPath 2.0的一种扩展。任何在语法上有效并可成功执行的表达式在这两种语言中都会返回同样的结果。因为这两个语言是如此密切相关所以它们的语法和语言描述都来自同一个公共源以确保一致性而且这两个规范的编辑们也紧密地工作在一起。

1 标准系列

XQuery是一个标准系列其主标准为

XQuery 1.0 REC: 2007.1.23——XQuery 1.0:An XML Query Language,W3C

Rec ommendation 23 January 2007 XQuery 1.0一种XML查询语言。

配套的标准有

XQueryXREC: 2007.1.23——XML Syntax for XQuery 1.0 (XQueryX) ,W3 C

Rec ommendation 23 January 2007 XQuery 1.0的XML语法(XQueryX)。XML查询

语言的语法绑定可能不止一个XQueryX是XQuery的XML表示它将XQuery语

法的生成式produc tion映射到XML生成式。XQueryX可用于分析器重用、对查

询进行查询、生成查询、在XML中嵌入查询等。

XQueryReq REQ: 2007.3.23——XML Query (XQuery) 1.0 Requirements,W3 C

Working Group Note 23 March 2007XML查询(XQuery) 1.0需求。为W3 C的XQuery

数据模型和查询语言规定目标、需求和使用方案。它还包含每一需求的对应状态

以指明XQuery 1.0的系列W3 C标准的状态。

XQueryUCNote: 2007.3.23——XML Query 1.0 Us e Cas es,W3 C Working Group

1

Note 23 March 2007 XML查询1.0使用案例。详细说明XQuery的使用方案。与XPath 2.0和XSLT 2.0的联合标准有

XDMREC: 2007.1.23——XQuery 1.0 and XPath 2.0 Data Model (XDM),W3CRec ommendation 23 January 2007 XQuery 1.0和XPath 2.0的数据模型(XDM)。定义联合标准XDMXQuery 1.0和XPath 2.0的数据模型它是XPath 2.0、XSLT 2.0、XQuery和其他任意相关标准的数据模型。

XTQS REC: 2007.1.23 ——XSLT 2.0 and XQuery 1.0 Serialization,W3CRecommendation 23 January 2007 XSLT 2.0与XQuery 1.0的序列化。定义将XDM中所定义的数据模型实例序列化为八比特组的字节序列的一种联合标准。序列化是一种构件为可被诸如XSLT和XQuery的其他标准使用而设计的。

XQPFS REC: 2007.1.23——XQuery 1.0 and XPath 2.0 Formal Semantics,W3CRecommendation 23 January 2007 XQuery 1.0与XPath 2.0的形式语义。定义XQuery 1.0与XPath 2.0的形式正式语义的联合标准。

XQPFOREC: 2007.1.23——XQuery 1.0 and XPath 2.0 Functions and Operators ,W3 C Rec ommendation 23 January 2007 XQuery 1.0与XPath 2.0的函数和算符。定义面向XML Schema和XDM中所定义的数据类型的构造函数、运算符和函数的联合标准。也讨论面向XDM中所定义的节点和节点序列的函数和算符。这些函数和算符用于XPath 2.0、XQuery 1.0、XSLT 2.0和其他有关XML标准。所定义的函数之特征和汇总见XQuery 1.0,XPath 2.0, and XSLT 2.0 Functions and OperatorsNamespac e。

正在制定中的与XP ath的联合标准有

XQPFTReq WD:2003.5.2——XML Query and XPath Full-Text Requirements,W3 CWorking Draft 02 May 2003XML查询与XPath全文的需求。规定在XQuery与XPath中使用的全文搜索的需求。

XQPFTUCWD: 2006.5.1——XML Query and XPath Full-Text Use Cases,W3CWorking Draft 1 May 2006 XML查询与XPath全文的使用案例。

XQPFTWD:2006.5.1——XQuery 1.0 and XPath 2.0 Full-Text,W3C Working Draft 1May 2006 XML查询与XPath全文。定义XQuery 1.0和XPath 2.0的全文之语法和形式语义它是一种扩展XQuery 1.0和XPath 2.0使其具有全文搜索能力的语言。正在开发的XQuery更新工具让你编写的查询表达式可以修改文档和保存结果XQueryUF WD:2006.7.11——XQuery Update Facility,W3C Working Draft 11 July

2006 XQuery更新工具。

XQueryUFReq WD: 2005.7.3——XQuery Update Facility Requirements,W3CWorking Draft 3 June 2005 XQuery更新工具需求。

XQueryUF UCWD:2006.5.8——XQuery Update Fac ility Use Cases,W3 C WorkingDraft 8 May 2006 XQuery更新工具使用案例。

W3 C已经开始着手制订XQuery标准的下一个版本1.1 

XQueryReq 1.1 WD:2007.3.23——XML Query(XQuery) 1.1 Requirements,W3 CWorking Draft 23 March 2007 XML查询(XQuery) 1.1需求。

XQuerySEReq 1.0WD:2007.3.23——XQuery Scripting Extension 1.0 Requirements,W3C Working Draft 23 March 2007 XQuery脚本扩展。

由于篇幅和时间的限制这里只简单介绍主标准XQuery 1.0的一些基本内容。

2

2语法生成式

XQuery的语法采用与XML 1.0类似的EBNFExtended Backus-Naur Form扩展巴克斯-诺尔范式来描述但是也有一些区别。例如在XQuery的生成式中 白空符是无关紧要的。在XQuery 1.0中共有140条语法生成式grammar production规则现罗列如下

[1]Module : :=Vers ionDec l?(LibraryModu le |MainModu le)

[2]VersionDec l : :="xquery" "version"StringLiteral ("enc oding"StringLiteral)?Separator

[3]MainModule : :=Prolog QueryBody

[4]LibraryModule : :=ModuleDecl Prolog

[5]ModuleDecl : :="module" "namespac e"NCName"="URILiteral Separator

[6]Prolog::=((DefaultNamespaceDecl |Setter|Namespac eDecl | Import)Separator)*((VarDecl |

FunctionDec l |OptionDec l)Separator)*

[7] Setter::=BoundarySpac eDecl |DefaultCollationD ec l |BaseURIDecl |ConstructionDec l |

OrderingModeD ecl |EmptyOrderDecl |CopyNamespac esDecl

[8] Import ::=S c hemaImport |ModuleImport

[9] Separator::=";"

[10]NamespaceDecl ::="dec lare" "namespace"NCName"="URILiteral

[11]BoundarySpac eDec l : :="dec lare" "boundary-spac e" ("pres erve" | "strip")

[12]DefaultNamespaceDecl ::="dec lare" "default" ("element" | "function") "namespace"

URI Literal

[13]OptionDec l ::="dec lare" "option"QNam e StringLiteral

[14]OrderingModeDec l : :="dec lare" "order ing" ("ordered" | "unordered")

[15]EmptyOrderDec l : :="dec lare" "default" "order" "empty" ("greatest" | "least")

[16]CopyNamespac esDecl ::="declare" "copy-namespac es"PreserveMode"," InheritMode

[17]Pres erveMode ::="pres erve" | "no-pres erve"

[18] InheritMo de : :="inher it" | "no-inherit"

[19]DefaultCollationDecl : :="declare" "default" "collation"URILiteral

[20]BaseURIDecl : :="declare" "b ase-uri"URILiteral

[21] SchemaImport ::="import" "schema"SchemaPrefix?URILiteral ("at"URILiteral (","

URI Literal)*)?

[22] SchemaPrefix::=("namespac e"NCName"=") | ("default" "element" "namespace")

[23]ModuleImport ::="import" "module" ("namespac e"NCName "=")?URILiteral ("at"

URI Literal (","URILiteral)*)?

[24]VarDecl : :="declare" "variable" "$"QName TypeDeclaration?((":="ExprSingle) |

"externa l")

[25]ConstructionDecl : :="declare" "c onstruction" ("strip" | "preserve")

[26]FunctionDec l ::="dec lare" "function"QName "("ParamList? ")" ("as"Sequenc eType)?

(Enc los edExpr | "external")

[27]ParamList ::=Param(","Param)*

[28]Param::="$"QName TypeDeclaration?

[29]Enc los edExpr ::="{"Expr "} "

[30]QueryBody::=Expr

[31]Expr ::=ExprSing le(","ExprSing le)*

[32]ExprS ingle : :=FLWO RExpr |QuantifiedExpr |Typesw itc hExpr| IfExpr |OrExpr

[33]FLWORExpr ::=(ForClaus e |LetClaus e)+WhereClaus e?OrderByClaus e? "return"

3

ExprSing le

[34]ForClause : :="for" "$"VarName TypeDeclaration?PositionalVar? "in"ExprSingle("," "$"VarName TypeDeclaration?PositionalVar? "in"ExprSingle)*

[35]Pos itionalVar : :="at" "$"VarName

[36]LetClause : :="let" "$"VarName TypeDec laration? ":="ExprS ingle("," "$"VarNameTypeDec laration? ":="ExprSing le)*

[37]WhereClause ::="where"ExprS ingle

[38]OrderByClaus e : :=(("order" "by") | ("stable" "order" "by"))OrderSpec List

[39]OrderSpec List ::=OrderSpec(","OrderSpec)*

[40]OrderSpec ::=ExprSing le OrderModifier

[41]OrderModifier : :=("as c ending" | "des c ending")?("empty" ("greatest" | "least"))?("c ollation"URI Literal)?

[42]QuantifiedExpr : :=("s ome" | "every") "$"VarName TypeDec larat ion? "in"ExprSing le(",""$"VarName TypeDeclaration? "in"ExprSingle)* "satisfies"ExprS ingle

[43]TypeswitchExpr ::="typeswitch" "("Expr ")"Cas eC laus e+"default" ("$"VarName)?"return"Expr S ing le

[44]Cas eClaus e ::="c as e" ("$"VarName"as")?Sequenc eType"return"ExprSingle

[45] IfExpr ::="if" "("Expr ")" "then"ExprS ing le"e ls e"ExprS ing le

[46]OrExpr::=AndExpr ( "or"AndExpr)*

[47]AndExpr : :=Comparis onExpr ( "and"Compar is onExpr)*

[48]Comparis onExpr ::=Range Expr ( (Value Comp|GeneralComp|NodeComp)RangeExpr)?

[49]RangeExpr ::=Addit iveExpr ( "to"Addit iveExpr)?

[50]AdditiveExpr : :=Multip lic ativeExpr ( ("+" | "-")Multip lic ativeExpr)*

[51]Multip lic ativeExpr : :=UnionExpr ( ("*" | "div" | "idiv" | "mod")UnionExpr)*

[52]UnionExpr : :=Inters ec tExc eptExpr( ("union" | "|") Inters ec tExc eptExpr)*

[53] IntersectExc eptExpr ::=Instanc eofExpr ( ("intersect" | "exc ept") Instanc eofExpr)*

[54] Instanc eofExpr ::=TreatExpr( "instanc e" "of"Sequenc eType)?

[55]TreatExpr ::=Castab leExpr ( "treat" "as"Sequenc eType)?

[56]CastableExpr : :=CastExpr ( "c astable" "as"Sing leType)?

[57]CastExpr::=UnaryExpr ( "c ast" "as"SingleType)?

[58]UnaryExpr ::=("-" | "+")*Value Expr

[59]Value Expr : :=Validate Expr |PathExpr|Extens ionExpr

[60]GeneralComp: :="=" | "!=" | "<" | "<=" | ">" | ">="

[61]Value Comp: :="eq" | "ne" | "lt" | "le" | "gt" | "ge"

[62]NodeComp::="is" | "<<" | ">>"

[63]Validate Expr : :="validate"Validat ionMode? "{"Expr "}"

[64]Validat ion Mode : :="lax" | "stric t"

[65]Extens ionExpr ::=Pragma+"{"Expr? "}"

[66]Pragma::="(#"S?QName(S PragmaContents)?"#)" /*ws:explic it */

[67]PragmaContents ::=(Char* - (Char* '#)'Char*))

[68]P athExpr::=("/"Re lat iveP athExpr?) | ("//"Relativ eP athExpr) |Relat iveP athExpr/*xgs:leading-lone-slash*/

[69]Relativ eP athExpr : :=StepExpr (("/" | "//")StepExpr)*

[70]StepExpr ::=FilterExpr |Ax is Step

4

[71]Axis Step::=(Revers eStep|Forw ardStep)Predic ateList

[72]ForwardStep::=(ForwardAxis NodeTest) |AbbrevForwardStep

[73]Forw ardAxis : :=("c hild" ": :") | ("des c endant" ": :") | ("attribute" ": :") | ("s elf" ": :") |("desc endant-or-self" ": :") | ("following-sib ling" ": :") | ("following" ": :")

[74]AbbrevForwardStep::="@"?NodeTest

[75]Revers eStep::=(Revers eAx is NodeTest) |AbbrevRevers eStep

[76]ReverseAxis : :=("parent" ": :") | ("anc estor" ": :") | ("prec eding-sibling" "::") | ("prec eding"": :") | ("ancestor-or-self" ": :")

[77]AbbrevRevers eStep::=". ."

[78]NodeTest ::=KindTest |NameTest

[79]NameTest ::=QName |Wildc ard

[80]Wildcard::="*" | (NCName":" "*") | ("*" ":"NCName) /*ws:explicit */

[81]FilterExpr : :=PrimaryExpr Predic ateList

[82]Predic ateList : :=Predic ate*

[83]Predic ate ::="["Expr "]"

[84]PrimaryExpr ::=Literal |VarRef|P arenthes izedExpr |ContextItemExpr |Func tionCall |OrderedExpr |UnorderedExpr |Construc tor

[85]Literal ::=Numer ic Litera l |S tringLit eral

[86]Numeric Literal ::=IntegerLiteral |Dec imalLiteral |Double Literal

[87]VarRef: :="$"VarNam e

[88]VarNam e : :=QNam e

[89]P arenthes izedExpr : :="("Expr? ")"

[90]ContextItemExpr ::="."

[91]OrderedExpr::="ordered" "{"Expr "}"

[92]UnorderedExpr ::="unordered" "{"Expr "}"

[93]FunctionCall : :=QName"(" (ExprSingle(","ExprS ingle)*)? ")"

[94]Constructor::=D irectConstructor|ComputedConstructor

[95]DirectConstructor ::=D irElemConstructor|DirCommentConstructor |DirPIConstructor

[96]DirElemConstruc tor ::="<"QName D ir Attribute List ("/>" | (">"D irElemContent* "</"QName S? ">")) /*ws:explicit*/

[97]DirAttribute List ::=(S(QName S? "="S?DirAttributeValue)?)*/*ws:explic it */

[98]DirAttributeValue : :=('"' (Esc apeQuot |QuotAttrValue Content)* '"') | ("'" (Esc apeApos |Apos Attr ValueContent)* "'") /*w s:explic it*/

[99]QuotAttrVa lue Content : :=QuotAttrContent Char |CommonContent

[100]AposAttr ValueCont ent : :=Apos AttrContentChar |CommonContent

[101]DirElemCont ent : :=DirectConstructor |CDataSection|CommonContent |

El ementContentCh ar

[102]CommonContent ::=PredefinedEnt ityRef|CharRef| "{{" | "}}" |Enc lo s edExpr

[103]DirCommentConstructor ::="<!--"DirComment Contents "-->" /*w s:explic it*/

[104]DirCommentContents ::=((Char - '-') | ('-' (Char - '-')))*/*ws:explic it*/

[105]DirPIConstructor ::="<?"PITarget (S DirPIContents)?"?>" /*ws:explic it*/

[106]DirPIContents ::=(Char* - (Char*'?>'Char*)) /*ws:explic it */

[107]CDataSection::="<![CDATA["CDataSectionContents "]]>" /*ws:explicit */

[108]CDataSectionContents ::=(Char* - (Char* ']]>'Char*)) /*w s:explic it */

5

[109]ComputedConstructor ::=CompDoc Constructor|CompElemConstructor |

CompAttrCons truc tor|CompTextCons truc tor|CompCommentCons truc tor |

CompPIConstructor

[110]CompDoc Construc tor ::="document" "{"Expr "}"

[111]CompElemConstruc tor ::="e lem ent" (QName | ("{"Expr "}")) "{"ContentExpr? "} "

[112]ContentExpr ::=Expr

[113]CompAttr Cons truc tor ::="attribute" (QName | ("{"Expr "}")) "{"Expr? "}"

[114]CompTextCons truc tor ::="text" "{"Expr "}"

[115]CompCommentCons truc tor ::="c omment" "{"Expr "}"

[116]CompPIConstructor ::="proc es sing-instruction" (NCName | ("{"Expr "}")) "{"Expr? "}"

[117] SingleType : :=Atom ic Type"?"?

[118]TypeDec laration::="as"Sequenc eType

[119] Sequenc eType::=("empty-s equenc e" "(" ")") | (ItemType Occurrenc eIndic ator?)

[120]Occurrenc eIndic ator::="?" | "*" | "+" /*xgs:occurrenc e-indic ators */

[121] ItemType ::=KindTest | ("item" "(" ")") |Atom ic Type

[122]Atomic Type ::=QName

[123]KindTes t ::=Doc umentTes t |ElementTes t |AttributeTes t |Sc hemaElementTes t |

S c hemaAttributeTes t |PITest |CommentTes t |TextTes t |AnyKindTes t

[124]AnyKindTes t : :="node" "(" ")"

[125]Doc umentTes t ::="doc ument-node" "(" (E lementTes t |Sc hemaElementTes t)? ")"

[126]TextTest ::="text" "(" ")"

[127]CommentTes t ::="c omment" "(" ")"

[128]PITest ::="proc es s ing-instruction" "(" (NCName |StringLiteral)? ")"

[129]AttributeTes t ::="attr ibute" "(" (Attr ibNameOr Wildc ard(","Typ eName)?)? ")"

[130]AttribNameOrWildc ard: :=Attr ibuteName | "*"

[131] SchemaAttributeTest ::="s chema-attribute" "("AttributeD ec larat ion")"

[132]AttributeDec larat ion: :=Attribute Name

[133]ElementTes t ::="e lement" "(" (ElementNameOrWildc ard(","TypeName"?"?)?)? ")"

[134]ElementNameOrWildc ard: :=ElementName | "*"

[135] Sc hemaElementTest ::="s c hema-element" "("ElementDec laration")"

[136]ElementDec larat ion: :=ElementN ame

[137]Attr ibut eN am e : :=QNam e

[138]ElementName : :=QName

[139]Typ eName ::=QName

[140]URILit eral : :=S tringLit eral

2基础

XQuery的基本组成模块为表达式expression——一个Unic ode字符串。该语言提供了几种表达式可由关键字、符号和操作数构成。通常表达式的操作数是另一些表达式。XQuery允许表达式完全一般性地被嵌套。 但是不像纯功能语言当在变量的声明中包含新节点的构造时它不允许变量替换

似XML X Query是一种区分大小写的语言。XQuery中的关键字使用小写字符而且

6

不被保留即在XQuery表达式中的名字允许与关键字相同但是下列无前缀的函数名除外 attribute、 c omment、 doc ument-node、 element、 empty-s equenc e、 if、 item、 node、proc ess ing-instruc tion、 sc hema-attribute、 sc hema-element、 text、 typesw itch。

定义在数据模型XDM中值value始终是一个序列序列sequenc e是零或多个项的有序集项item是一个原子值或节点原子值atomic value是定义在XML Schema中的原子类型atomic type值空间中的一个值节点node是定义在XDM中的节点类型node kinds之一的一个实例每个节点都具有唯一的节点标识node identity、类型值和串值此外某些节点还具有名称。节点的类型值typed value是零或多个原子值的序列节点的串值string value是一个xs:string类型的值节点的名称name是一个xs:QName类型的值。

定义恰好包含一个项的序列被称为单元集singleton一个项等同于包含该项的单元集序列。序列是绝不嵌套的例如1, (2,3), ( )被组合成一个单一的结果序列(1,2,3)。包含零个项的序列被称为空序列empty s equenc e。

术语XDM实例XDM instanc e被用作属于值value的同义词表示该数据模型中的节点和/或原子值的无约束序列。

XQuery中的名字name被称为QName s 限定名与XML命名空间标准中的语法一致由可选的命名空间前缀与本地名组成如果存在命名空间前缀则在命名空间前缀与本地名之间用冒号分隔。可以利用把命名空间前缀解析为命名空间URI的方法将词汇QNames转换成扩展限定名expanded QName。命名空间URI是按照XML Schema中的x s:any URI类型的规则进行了白空标准化的。如果两个扩展限定名的命名空间URI相同且本地名相同即使它们的命名空间前缀不同则它们是相等的。

下列命名空间前缀已被XQuery预先声明并且被绑定到了固定的命名空间URI上

 xml=http://www.w 3.org/XML/1998/namespac e

 x s=http://www.w 3.org/2001/XMLS c hema

 xs i=http://www.w 3.org/2001/XMLS chema-instanc e

 fn=http://www.w 3.org/2005/xp ath-func tions

 loc al=http://www.w 3.org/2005/xquery-loc al-func tions

元素节点具有域内命名空间in-scope namespaces——一种命名空间绑定namespacebindings的集合其中的每个命名空间绑定将命名空间前缀与其URI关联在一起。从而定义了可在元素的范围内解释QNames的命名空间前缀集。对给定的元素命名空间的绑定可以为空前缀。在此元素范围内该命名空间的URI绑定到缺省的命名空间。

2.1表达式上下文

给定表达式的表达式上下文expres sion c ontext由所有能影响表达式结果的信息组成。这些信息被分成被称作静态上下文static c ontext和动态上下文dynamic c ontext的两类。

2 1 1静态上下文

表达式的静态上下文static context是在求值之前静态分析表达式期间的可用信息。这些信息可被用于确定表达式是否含有静态错误。如果表达式的解析依赖于静态上下文中的某些没有赋值的构件则会出现静态错误。

静态上下文的各个构件汇总如下

XPath 1.0兼容模式XPath 1.0 compatibility mode——XQuery设置该构件的值为

假。

静态可知命名空间Statically known namespaces——定义所有在静态处理给定表

7

达式期间可知的命名空间的一个前缀URI对偶集。这些URI是按照XML Schema中的x s:any URI类型的规则进行了白空标准化的。与作为元素节点的动态特性的域内命名空间不同静态可知命名空间是表达式的一种静态特性。

缺省元素/类型命名空间Default element/type namespace——一个命名空间URI或"none"

缺省函数命名空间Default function namespace——一个命名空间URI或"none"。域内模式定义In-scope schema definitions——对在处理表达式期间处于范围内的所有元素声明、属性声明和schema类型定义的一种通用术语。包含下列三个部分域内模式类型In-scope schema types——每个模式类型被一个扩展QName 对

命名类型或一个实现相关类型标识符对匿名类型所标识。域内模式类型包

括预定义的模式类型。如果支持模式输入特征域内模式类型还包括输入模式中

的所有类型定义。

域内元素声明 In-scope element declarations ——每个模式类型被一个扩展

QName 对顶层元素声明或一个实现相关元素标识符对局部元素声明所标

识。如果支持模式输入特征域内元素声明还包括输入模式中的所有元素声明。

元素声明包含关于替换组关系的信息。替换组substitution group被定义在XML

Schema的第一部分中它由一个给定元素称为头元素[head element]牵头包

含一个元素的集合可用该集合中的元素来替换头元素而不会影响模式验证的

结果。

域内属性声明In-scope attribute declarations ——每个模式类型被一个扩展

QName 对顶层属性声明或一个实现相关属性标识符对局部属性声明所标

识。如果支持模式输入特征域内属性声明还包括输入模式中的所有属性声明。域内变量In-scope variables——一个扩展QName类型对的集合。它定义在表达式内可引用变量的集合。其中 “扩展QNam e”为变量的名称 “类型”为变量的静态类型。序言Prolog中的变量声明被添加到域内变量中。绑定变量的表达式如let、 for、 s ome或every表达式利用新的绑定变量及其类型来扩展其子表达式中的域内变量。在函数声明function dec laration中域内变量被函数参数functionparameters的名称和类型所扩展。变量的静态类型可在查询中声明或如果静态类型特征被激活被定义在XQuery 1.0 and XPath 2.0 Formal Semantic s推荐标准中的静态类型推理规则所推出。

上下文项静态类型Context item static type——在给定表达式范围内定义上下文项的静态类型之构件。

 函数签名Function signatures——可在一表达式内被调用的一个函数集合。每个函数被其扩展QNam e和参数数量arity所唯一标识。除了名称和参数数量之外每个函数签名还指定函数参数和结果的静态类型。函数签名包括构造函数的签名。静态可知对照Statically known collations——一个由实现定义的(URI,对照)对的集合。它定义可被用于处理查询和表达式的对照的名称。对照collation是一种方式规范用于字符串和URI的比较和被扩展后排序。

缺省对照Default collation——

构造方式Construction mode——

排序方式Ordering mode——

空序列的缺省排序Default order for empty sequenc es——

边空策略Boundary-space policy——

复制命名空间方式Copy-namespaces mode——

8

基URI Base URI——

静态可知文档Statically known documents——

静态可知缺省对照类型Statically known default collection type——

2 1 2动态上下文

表达式的动态上下文dynamic c ontext被定义为在表达式被求值时可用的信息。如果表达式的求值依赖于动态上下文中的某些没有赋值的部分则会出现动态错误。

动态上下文的各个构件汇总如下。

动态上下文包含静态上下文中的所有构件以及下面列出的额外构件。

动态上下文的开始三个构件上下文项、上下文位置和上下文大小被称为表达式的焦点focus。焦点使得处理程序可以知晓表达式正在被处理的是哪个项。

某些语言结构特别是路径表达式E 1/E2和谓词E 1[E2] 会为子表达式的求值创建一个新焦点。在这些结构中对求值E 1的结果序列中的每一项 E2都会被求值一次。每次E2被求值时它被以不同的焦点来求值。E2的求值焦点在下面被称为内部焦点inner focus而E1的求值焦点在下面则被称为外部焦点outer focus。 内部焦点只在E2被求值时才存在。当该求值完成后包含表达式的求值继续保持原焦点不变。

上下文项c ontext item——

上下文位置context position——

上下文大小c ontext size——

变量值Variable values——

 函数实现Function implem entations——

当前数据时Current dateTime——

隐含时区Implicit timezone——

可用文档Available documents——

可用对照Available collections——

缺省对照Default collection——

2.2处理模型

XQuery是用数据模型和表达式上下文来定义的。

图1提供了将在下面仔细介绍处理步骤的原理概观其中有些步骤完全在XQuery范围之外。在图1中用位于表示该语言的边线之外来描述标识为“外部处理” externa lprocessing的区域。外部处理区域包括表示被查询数据的XDM实例的生成、模式输入处理和序列化。该语言边界内的区域被称为“查询处理域” query processing domain它包含静态分析和动态求值阶段。查询处理域上的一致性约束在2.2.5小节中定义。

9

VirMach:$7.2/年KVM-美元512MB/$7.2/年MB多个机房个机房可选_双线服务器租赁

Virmach对资源限制比较严格,建议查看TOS,自己做好限制,优点是稳定。 vCPU 内存 空间 流量 带宽 IPv4 价格 购买 1 512MB 15GB SSD 500GB 1Gbps 1 $7/VirMach:$7/年/512MB内存/15GB SSD空间/500GB流量/1Gbps端口/KVM/洛杉矶/西雅图/芝加哥/纽约等 发布于 5个月前 (01-05) VirMach,美国老牌、稳...

青云互联:洛杉矶CN2弹性云限时七折,Cera机房三网CN2gia回程,13.3元/月起

青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...

Virmach($5.23/年)年付VPS闪购

每每进入第四季度,我们就可以看到各大云服务商的促销力度是一年中最大的。一来是年底的促销节日活动比较多,二来是商家希望最后一个季度冲刺业绩。这不还没有到第四季度,我们看到有些商家已经蠢蠢欲动的开始筹备活动。比如素有低价VPS收割机之称的Virmach商家居然还没有到黑色星期五就有发布黑五促销活动。Virmach 商家有十多个数据中心,价格是便宜的,但是机器稳定性和速度肯定我们也是有数的,要不这么低的...

链接查询为你推荐
伪装微信地理位置微信朋友圈怎么使用伪装地理位置安装程序配置服务器失败sql安装程序配置服务器失败手游运营手册堡垒之夜新武器是什么 堡垒之夜新武器介绍图文解析吴晓波频道买粉五大知识付费平台有哪些?ps抠图技巧photoshop最基本的抠图方法和技巧!今日热点怎么删除怎么删除手机百度实时热点如何建立一个网站要建立一个网站怎么弄啊?开机滚动条电脑开机有滚动条的画面神雕侠侣礼包大全神雕侠侣陈晓礼包兑换码怎么获得ejb开发EJB是啥玩意了
广州主机租用 北京域名空间 怎么申请域名 主机测评 骨干网 联通c套餐 inmotionhosting 博客主机 搬瓦工官网 谷歌香港 名片模板psd 网页背景图片 商家促销 国外网站代理服务器 牛人与腾讯客服对话 免费活动 hdd www789 cxz 国外在线代理服务器 更多