五、 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查询语言。
配套的标准有
XQueryXREC: 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 2007XML查询(XQuery) 1.0需求。为W3 C的XQuery
数据模型和查询语言规定目标、需求和使用方案。它还包含每一需求的对应状态
以指明XQuery 1.0的系列W3 C标准的状态。
XQueryUCNote: 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的联合标准有
XDMREC: 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)。定义联合标准XDMXQuery 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的形式正式语义的联合标准。
XQPFOREC: 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 2003XML查询与XPath全文的需求。规定在XQuery与XPath中使用的全文搜索的需求。
XQPFTUCWD: 2006.5.1——XML Query and XPath Full-Text Use Cases,W3CWorking Draft 1 May 2006 XML查询与XPath全文的使用案例。
XQPFTWD: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 UCWD: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.0WD: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类似的EBNFExtended 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对资源限制比较严格,建议查看TOS,自己做好限制,优点是稳定。 vCPU 内存 空间 流量 带宽 IPv4 价格 购买 1 512MB 15GB SSD 500GB 1Gbps 1 $7/VirMach:$7/年/512MB内存/15GB SSD空间/500GB流量/1Gbps端口/KVM/洛杉矶/西雅图/芝加哥/纽约等 发布于 5个月前 (01-05) VirMach,美国老牌、稳...
青云互联怎么样?青云互联是一家成立于2020年6月份的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、香港服务器、美国云服务器,让您的网站高速、稳定运行。目前,美国洛杉矶cn2弹性云限时七折,美国cera机房三网CN2gia回程 13.3元/月起,可选Windows/可自定义配置。点击进入:青云互联官网青云互联优惠码:七折优惠码:dVRKp2tP (续...
每每进入第四季度,我们就可以看到各大云服务商的促销力度是一年中最大的。一来是年底的促销节日活动比较多,二来是商家希望最后一个季度冲刺业绩。这不还没有到第四季度,我们看到有些商家已经蠢蠢欲动的开始筹备活动。比如素有低价VPS收割机之称的Virmach商家居然还没有到黑色星期五就有发布黑五促销活动。Virmach 商家有十多个数据中心,价格是便宜的,但是机器稳定性和速度肯定我们也是有数的,要不这么低的...