<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>On the denotational semantics of XML-Lambda⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pavel Loupal</string-name>
          <email>pavel.loupal@fit.cvut.cz</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Karel Richta</string-name>
          <email>richta@ksi.mff.cuni.cz</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Software Engineering, Charles University, Faculty of Mathematics and Physics Prague</institution>
          ,
          <country country="CZ">Czech Republic</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Department of Software Engineering, Czech Technical University, Faculty of Information Technology Prague</institution>
          ,
          <country country="CZ">Czech Republic</country>
        </aff>
      </contrib-group>
      <fpage>33</fpage>
      <lpage>38</lpage>
      <abstract>
        <p>The article deals with the denotational seman- tegral part of the work, we have designed and develtics of a special query language called XML-Lambda oped a prototype of an XML- query processor for (abbreviated as XML- ), which is based on the simply typed validating the functional approach and experimenting lambda calculus. The exact semantics allows experimenta- with it. The main advantage of this concept is the tion with a language definition, prototyping of programs, possibility of a query optimizations in the XML- inand similar experiments. One of such experiment is the termediate form. It is much more easier than optimizaivmirpolnemmeenntt.aTtiohne mofatihneaXdvQaunetraygelaonfgouuargeapipnrothaechXiMstLh-e peons-- tions when we use the official W3C semantics ([3]). sibility of a query optimizations in the XML- intermedi- Since it is not possible to express the semantics of ate form. It is much more easier than optimizations based the whole XML- language in this contribution, the on the official W3C semantics. XML- is a part of more paper focuses chiefly on its main idea and concepts. complex XML- Framework which serves for experimenting with the tools for XML processing.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>In this paper, we define formally the semantics of
XML-Lambda Query Language. From now on we will
use abbreviation XML- . XML- employs the func- 2.1
tional data model for XML data elaboration. The first
idea for such an attitude was published in [5, 6]. This
research brought in the key idea of a functional query
processing with a wide potential that was later proven
by a simple prototype implementation [7].</p>
      <p>We can imagine two scenarios for this language;
firstly, the language plays a role of a full-featured query
language for XML (it has both formal syntax and
semantics and there is also an existing prototype that
acts as a proof-of-the-concept application). But there
already exist standard approaches for XML querying
– especially XQuery, with probably more appropriate
syntax for users. So, there is no need to define any new
query language.</p>
      <p>In the second scenario, the XML- Query
Language is utilized as an intermediate language for the
description of XQuery semantics. In [4] we propose
a novel method for XQuery evaluation based on the
transformation of XQuery queries into their
XMLequivalents and their subsequent evaluation. As an
inIn this section, we briefly describe the XML- Query
Language, a query language for XML based on the
simply typed lambda calculus.</p>
      <sec id="sec-1-1">
        <title>Language of terms</title>
        <p>Typical query expression has a query part — an
expression to be evaluated over data — and a constructor
part that wraps a query result and forms the output.</p>
        <p>The XML- Query Language is based on -terms
defined over the type system TE as will be shown later.</p>
        <p>-calculus is a formal mathematical system for
investigation of function definition and application. It was
introduced by Alonzo Church and has been utilized
in many ways. In this work, we use a variant of this
formalism, the simply-typed -calculus, as a core for
the XML- Query Language. We have gathered the
knowledge from [8] and [1]. Our realization is enriched
by usage of tuples.</p>
        <p>The main constructs of the language are variables,
constants, tuples, projections, and -calculus
operations — applications and abstractions. The syntax is
similar to -calculus expressions, thus the queries are
structured as nested -expressions, i.e.:</p>
        <p>Language of terms is defined inductively as the
least set containing all terms created by the
application of the following rules. Let T; T1; : : : ; Tn, n 1 be
members of TE . Let F be a set of typed constants, and
V an at most countable set of typed variables. Then:
1. variable: each variable (member of V) of type T is</p>
        <p>a term of type T
2. constant: each constant (member of F ) of type T</p>
        <p>is a term of type T
3. application: if M is a term of type ((T1;: : :; Tn) ! T )
and N1; : : : ; Nn are terms of the types T1; : : : ; Tn,
then M (N1; : : : ; Nn) is a term of the type T
4. -abstraction: if x1; : : : ; xn are distinct variables
of types T1; : : : ; Tn and M is a term of type T ,
then x1 : T1; : : : ; xn : T1:(M ) is a term of type
((T1; : : : ; Tn) ! T )
5. n-tuple: if N1;: : :; Nn are terms of types T1;: : :; Tn,</p>
        <p>then (N1; : : : ; Nn) is a term of type (T1; : : : ; Tn)
6. projection: if (N1; : : : ; Nn) is a term of type
(T1; : : : ; Tn), then N1; : : : ; Nn are terms of types</p>
        <p>T1; : : : ; Tn
7. tagged term: if N is a term of type N AM E and</p>
        <p>M is a term of type T then N : M is a term of
type (E ! T ).</p>
        <p>The set of abstract elements E serves as a notation
for abstract positions in XML trees. Terms can be
interpreted in a standard way by means of an
interpretation assigning to each constant from F an object of
the same type, and by a semantic mapping from the
language of terms to all functions and Cartesian
products given by the type system TE . Speaking briefly, an
application is evaluated as an application of the
associated function to given arguments, an abstraction
’constructs’ a new function of the respective type. The
tuple is a member of Cartesian product of sets of typed
objects. A tagged term is interpreted as a function
defined only for one e 2 E. It returns again a function.
3
As for evaluation of a query, we do not need its
complete derivation tree; such information is too complex
and superfluous. Therefore, in order to diminish the
domain that needs to be described without any loss of 4 Denotational semantics
precision, we employ the abstract syntax. With the
abstract syntax, we break up the query into logical pieces We use denotational semantics for the description of
that forming an abstract syntax tree carrying all orig- the meaning of each XML- query. The approach is
inal information constitute an internal representation based on the idea that for each correct syntactic
consuitable for query evaluation. We introduce syntactic struct of the language we can define a respective
meandomains for the language, i.e., logical blocks a query ing of it as a formal expression in another, well-known,
may consist of. Subsequently, we list all production notation. We can say that the program is the
denotarules. These definitions are later utilized in Section 4 tion of its meaning. The validity of the whole approach
within the denotational semantics. is based on structural induction; i.e, that the meaning
of more complex expressions is defined on the basis
3.1</p>
      </sec>
      <sec id="sec-1-2">
        <title>Syntactic domains</title>
        <p>By the term syntactic domain, we understand a
logical part of a language. In Table 1, we list all syntactic
domains of the XML- Query Language with their
informal meaning. Notation Q : Query stands for the
symbol Q representing a member of the Query
domain.</p>
        <p>Q : Query XML- queries,
O : Options XML input attachements,
C : Constructor constructors of output results,
E : Expression general expressions,
SQ : SubQuery (nested) subqueries,
T : T erm sort of expression,
F : F ragment sub-parts of a T erm,
As : Assignment variable assignments,
F lt : F ilter set pruning conditions,
F C : F unctionCall either built-in or user-de ned
functions,
BinOp : BinOperator binary logical operators,
RelOp : RelOperator binary relational operators,
N F : N ullary identi ers of nullary functions
(subset of Identif ier),
P roj : P rojection identi ers for projections
(subset of Identif ier),
B : Boolean logical values,
N : N umeral numbers,
D : Digits digits,
S : String character strings,
Id : Identif ier strings conforming to the</p>
        <p>N ame syntactic rule in [2].
The abstract production rules listed in Table 2
(written using EBNF) connect the terms of syntactic
domains from the previous section into logical parts with
suitable level of details for further processing. On the
basis of these rules, we will construct the denotational
semantics of the language.
of their simpler parts. As the notation we employ the
simply typed lambda calculus. It is a well-known and
formally verified tool for such a purpose.
4.1</p>
      </sec>
      <sec id="sec-1-3">
        <title>Prerequisites</title>
        <p>The denotational semantics utilizes a set of functions
for the definition of the language meaning. For this
purpose, we formulate all necessary mathematical
definitions. We start with the data types and
specification of the evaluation context followed by the outline
of bindings to the TE type system. Then, all auxiliary
and denotation functions are introduced.</p>
        <p>Data Types. Each value computed during the process
of the query evaluation is of a type from T ype. Let E
be a type from the type system TE , we define T ype as:
T ype ::= BaseT ype j Seq(T ype)
Seq(T ype) ::= ? j BaseT ype Seq(T ype)
BaseT ype ::= E j P rimitiveT ype</p>
        <p>P rimitiveT ype ::= Boolean j String j N umber
Primitive types, Boolean, String, and N umber, are
defined with their set of allowed values as usual. The
type constructor Seq stands for the the type of ordered
sequences of elements of values of the type T ype3. We
use it only for base types, so Seq(T ype) is the type
of all ordered sequences of elements of base types. We
do not permit sequences of sequences. The symbol ?
stands for the empty sequence of types – represents
an unknown type. More precisely, we interpret types
as algebraic structures, where for each type 2 T ype
there is exactly one carrier V , whose elements are the
values of the respective type .</p>
        <p>Variables. An XML- query can use an arbitrary
(countable) number of variables. We model variables
as pairs name : , where name refers to a variable
name and is the data type of the variable – any
member of T ype. Syntactically, variable name is
always prepended by the dollar sign. Each expression in
XML- has a recognizable type, otherwise both the
type and the value are undefined.</p>
        <p>Query Evaluation Context. During the process
of query evaluation we need to store variables inside
a working space known as a context. Formally, we
denote this context as the State. We usually understand
a state as the set of all active objects and their values
at a given instance. We denote the semantic domain
State of all states as a set of all functions from the set
of identifiers Identif ier into their values of the type
2 T ype. Obviously, one particular state : State
represents an immediate snapshot of the evaluation
process; i.e., values of all variables at a given time. We
denote this particular value for the variable x as [[x]].
Simply speaking, the state is the particular valuation
of variables. We use the functor f [x v] for the
definition of a function change in one point x to the value v.
4.2</p>
      </sec>
      <sec id="sec-1-4">
        <title>Signatures of semantic functions</title>
        <p>Having defined all necessary prerequisites and
auxiliary functions (recalling that the SeqT ype represents
any permitted type of value), we formalize semantic
functions over semantic domains as:
SemQuery : Query → Seq(XM LDoc) → Seq(T ype)
SemOptions : Options → (State → State)
SemExpr : Expression → State → Seq(T ype)
SemT erm : T erm → (State → Boolean)
SemF rag : F ragment → State → Seq(T ype)
SemAssign : F ragment×Identif ier → State → State
SemRelOper : F ragment×RelOperator×F ragment →</p>
        <p>→ (State → Boolean)
SemBinOper : T erm × BinOperator × T erm →</p>
        <p>→ (State → Boolean)
SemAttrCons : AttrConstr × State → Seq(T ype)
SemElemCons : ElemConstr × State → Seq(T ype)
We start with the semantic equations for the
expres3 We suppose usual functions nil, cons, append, null, head, sions, then we will continue with the semantics
and tail for sequences. of queries.
Terms. Terms are logical expressions. It means, that
the meaning of any term in a given state is the Boolean
value.</p>
        <sec id="sec-1-4-1">
          <title>SemT erm : T erm</title>
          <p>! State !</p>
        </sec>
        <sec id="sec-1-4-2">
          <title>Boolean</title>
          <p>Terms are constructed with help of relational
operators (we call it f ilter, but we do not distinguise it
here), binary operators, negation sign, or primitive
Boolean literals (denoted as B in the definition).</p>
          <p>SemT erm[[B]] = :bool[[B]]</p>
          <p>if B is a constant of the type Boolean
SemT erm[[F1 RelOp F2]] =</p>
          <p>:SemRelOper[[F1 RelOp F2]]
SemT erm[[ ′not′ T ]] =</p>
          <p>:not(SemT erm[[T ]] )
SemT erm[[T1 BinOp T2]] =
= :SemBinOper[[T1 BinOp T2]]</p>
          <p>Relational Operators. Relational operators can be
applied to any two fragments and the meaning of
resulting expression is the mapping from the current state
to Boolean values. They serve in filters.
Binary Operators. Binary operators can be applied to
any two terms and the meaning of resulting
expression is the mapping from the current state to Boolean
values. XML- uses clasical logical conectives – logical
’or’ and logical ’and’
Fragments. Fragments are logical parts of filters and
have the same meaning as expressions.</p>
          <p>SemF rag : F ragment ! State ! Seq(T ype)
SemF rag[[Id]] =</p>
          <p>: [[Id]]
SemF rag[[f (E1; :::; En)]] =
= :f (SemExpr[[E1]] ; :::; SemExpr[[En]] )
SemF rag[[F P ]] =
= :(SemF rag[[F ]] ◦ SemF rag[[P ]])
SemF rag[[(subquery)(arg)]] =
= :(SemExpr[[subquery]]( )(SemExpr[[arg]]( )))
SemF rag[[I1I2:::InE]] =
= SemExpr[[I2:::InE]]( [SemExpr[[E]]
← I1])
SemF rag[[N ]] =
= :num[[N ]] if N is a constant of the type N umeral
SemF rag[[S]] =
= :str[[S]] if S is a constant of the type String
SemF rag[[B]] =
= :bool[[B]] if B is a constant of the type Boolean</p>
          <p>Assignments. An assignment expression is a
mandatory part of a query. It sets the initial context of the
evaluation, more precisely, such expression evaluates
a nullary function and stores the result into a
variable. Then, the evaluation process will filter results
and than iterates over all values and computes
remaining results.</p>
        </sec>
        <sec id="sec-1-4-3">
          <title>SemAssign : F ragment</title>
          <p>! State ! State</p>
        </sec>
        <sec id="sec-1-4-4">
          <title>Identif ier</title>
          <p>SemAssign[[Id '=' F ]] =</p>
          <p>: [Id ← SemF rag[[F ]] ]</p>
          <p>Expressions. Each expression e has a defined value
SemExpr[[e]]( )( ) in a state and in an
environment . The state represents the values of
variables, the environment represents XML document that
is elaborated. The result is a state SemExpr[[e]]( )( ),
where all interesting values are bound into local
variables. We do not need the environment in the next
computation, because all information is in the state.
We can model input data as a mapping Env from
identifiers to XML documents, formally:</p>
          <p>Env : Identif ier ! XM Ldoc</p>
        </sec>
        <sec id="sec-1-4-5">
          <title>SemExpr : Expression</title>
          <p>Seq(T ype)</p>
        </sec>
        <sec id="sec-1-4-6">
          <title>State</title>
          <p>Env !
SemExpr[[A1A2:::AnF1F2:::Fm]] =</p>
          <p>= SemExpr[[A2:::AnF1F2:::Fm]](SemAssign[[A1]] )
SemExpr[[F1F2:::Fm]]</p>
          <p>=
= append(SemExpr[[F1]] ; SemExpr[[F2:::Fm]] )</p>
          <p>if SemRelOper[[F1]] = true
SemExpr[[F1F2:::Fm]]
= SemExpr[[F2:::Fm]]</p>
          <p>if SemRelOper[[F1]]
SemExpr[[]]
= nil
=
= f alse
SemElemCons[[N A1:::AnI]] =
= element(N; [[I]]; SemAttrCons[[A1]] ; :::;</p>
          <p>SemAttrCons[[An]] )
SemElemCons[[N A1:::AnE]] =
= element(N; SemExpr[[E]] ; SemAttrCons[[A1]] ; :::;</p>
          <p>SemAttrCons[[An]] )
SemElemCons[[N I]] = element(N; [[I]]; nil)
SemElemCons[[N E]] =</p>
          <p>= element(N; SemExpr[[E]] ; nil)
Constructors. Resulting values are created by
constructors. A constructor is a list of items which can
be either a variable identifier or a constructing expres- returning in the given state the string
sion.
:element(′book′; [[a]]; attribute(′title′; [[b]]))</p>
        </sec>
        <sec id="sec-1-4-7">
          <title>SemCons : Constructor</title>
          <p>State ! Seq(T ype)
SemCons[[E1E]] = append(SemElemCons[[E1]] ;</p>
          <p>SemCons[[E]] )
SemCons[[I1E]] = cons( [[I1]]; SemCons[[E]] )
SemCons[[ ]] = nil
Element Constructors. The most common kind of
resulting value is undoubtedly the element constructor;
obviously, all its alternatives are supported – either
with empty content, textual content or more complex
(i.e. “mixed”) content. For all cases we can also attach
attributes to elements. In the definition we use
abstract functions element and attribute, which serves
to construct output XML values from arguments.
element(book,"the value of a",</p>
          <p>attribute(title,"the value of b"))
Options. The only allowed option in the language is
now the specification of input XML documents.</p>
        </sec>
        <sec id="sec-1-4-8">
          <title>SemOptions : Options</title>
          <p>Env ! Env
SemOptions[[ ]](E) = E
SemOptions[[ xmldata( X ) Y ]] =</p>
          <p>= :SemOptions[[Y ]]( [Dom(X) ← X#])</p>
          <p>We explore a function Dom(X) that converts an
input XML document X into its internal representation
accessible under identification X#.</p>
          <p>Query. A query (denoted as Q) consists of query
options (denoted as O), where input XML documents are</p>
          <p>SemElemCons : ElemConstr State ! Seq(T ype) ebvoaulnudatteodi(tdsefnoormteadlansaEm)e,sa,ntdhethqeueoruytpeuxtprceosnssiotrnutcotiobne
Attribute Constructors. Elements can have attributes commands (denoted as C). At first, input files are
elabassigned by attribute constructors orated, than an initial variable assignment takes place,
followed by evaluation of expression. Finally, the
outSemAttrCons : AttrConstr State ! Seq(T ype) put is constructed. This idea is inbuilt into the
definition of SemQuery[[O C E]] bellow. The whole meaning
SemQuery[[Q]] of a query Q can be modeled as a
mapping from the sequence of input XML documents into
a sequence of output values of the type of T ype. The
definition is carried by the structural induction on the
possible forms of an input sequence.</p>
          <p>SemQuery[[Q]] : Seq(XM LDoc) ! Seq(T ype)</p>
          <p>SemQuery[[O C E]] : XM LDoc ! Seq(T ype)
SemQuery[[Q]](nil) = nil
SemQuery[[Q]](cons(H; T )) =</p>
          <p>= append(SemQuery[[Q]](H); SemQuery[[Q]](T ))
SemQuery[[O C E]] =
=</p>
          <p>:(SemCons[[C]](SemExpr[[E]]( :⊥)
(SemOptions[[O]]( :⊥)( )))
The following example illustrates the computations
performed in order to evaluate given XML- queries
inside a virtual machine. It just computes a simple
numerical term. More complex examples could be found
in [4].
5.1</p>
        </sec>
      </sec>
      <sec id="sec-1-5">
        <title>Simple computation</title>
        <p>
          Let us suppose the following simple query in the
XML- and its evaluation.
lambda $v1 ($v1 = plus(
          <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
          ))
We can compute its meaning according to the
XMLsemantics as (the result is independent on the input
XML documents, so we can use the empty sequence
nil as the input):
SemQuery[[′lambda $v1 ($v1=plus(
          <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
          )′]](nil) =
= :(SemCons[[′lambda $v1 ($v1 = plus(
          <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
          ))′]]
(SemExpr[[ ]])( :?)( ))(nil) =
= SemCons[[′lambda $v1 ($v1 = plus(
          <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
          ))′]]
( :?) =
= SemAssign[[′$v1 = plus(
          <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
          )′]]
        </p>
        <p>
          ( :?)(′$v1′) =
= 1: 1[′$v1′ SemF rag[[′plus(
          <xref ref-type="bibr" rid="ref2 ref3">3,2</xref>
          )′]]
        </p>
        <p>
          (
          <xref ref-type="bibr" rid="ref1">1</xref>
          )]( :?)(′$v1′) =
= ( :?)[′$v1′ SemF rag[[′plus(
          <xref ref-type="bibr" rid="ref2 ref3">3,2</xref>
          )′]]
        </p>
        <p>( :?)](′$v1′) =
= ( :?)[′$v1′ 2:plus(SemExpr[[′3′]]
( 2:?); SemExpr[[′2′]]( 2:?))
( :?)](′$v1′) =
= ( :?)[′$v1′ 2:plus(num[[′3′]]</p>
        <p>( 2:?); num[[′2′]]( 2:?))( :?)](′$v1′) =
= ( :?)[′$v1′ 2:plus(3; 2)( :?)](′$v1′) =
= ( :?)[′$v1′ 2:5( :?)](′$v1′) =
= ( :?)[′$v1′ :5](′$v1′) =
= ( :?)[′$v1′ 5](′$v1′) =
= 5
6</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Conclusion</title>
      <p>In this paper, we have presented syntax and
denotational semantics of the XML- Query Language,
a query language for XML based on simply typed
lambda calculus. We use this language within the
special XML- Framework as an intermediate form of
XQuery expressions for description of its semantics.
Nevertheless the language in its current version does
not support all XML features, e.g. comments,
processing instructions, and deals only with type information
available in DTD, it can be successfully utilized for
fundamental scenarios both for standalone query
evaluation or as a tool for XQuery semantics description.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. H. Barendregt:
          <article-title>Lambda calculi with types</article-title>
          .
          <source>In: Handbook of Logic in Computer Science, Volumes</source>
          <volume>1</volume>
          (Background:
          <article-title>Mathematical Structures) and 2 (Background: Computational Structures)</article-title>
          ,
          <source>Abramsky &amp; Gabbay &amp; Maibaum (Eds.)</source>
          , Clarendon, volume
          <volume>2</volume>
          , Oxford University Press,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>T.</given-names>
            <surname>Bray</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Paoli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. M.</given-names>
            <surname>Sperberg-McQueen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Maler</surname>
          </string-name>
          , and
          <string-name>
            <given-names>F.</given-names>
            <surname>Yergeau</surname>
          </string-name>
          <article-title>: Extensible markup language (XML) 1.0 (fifth edition</article-title>
          ),
          <year>November 2008</year>
          . http://www.w3.org/TR/2008/REC-xml-
          <volume>20081126</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>D.</given-names>
            <surname>Draper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fankhauser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fernandez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Malhotra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Rose</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Rys</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Simeon</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Wadler</surname>
          </string-name>
          <article-title>: XQuery 1.0 and XPath 2.0 formal semantics</article-title>
          ,
          <year>September 2005</year>
          . http://www.w3.org/TR/xquery-semantics.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>P.</given-names>
            <surname>Loupal. XML-</surname>
          </string-name>
          :
          <article-title>A functional framework for XML</article-title>
          .
          <source>Ph.d. Thesis</source>
          , Department of Computer Science and Engineering, Faculty of Electrical Engineering, Czech Technical University in Prague,
          <year>February 2010</year>
          , submitted.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>J. Pokorny:</surname>
          </string-name>
          <article-title>XML functionally</article-title>
          . In: B.
          <string-name>
            <surname>C. Desai</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          <string-name>
            <surname>Kioki</surname>
            , and
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Toyama</surname>
          </string-name>
          , (Eds),
          <source>Proceedings of IDEAS2000, IEEE Computer Society</source>
          ,
          <year>2000</year>
          ,
          <volume>266</volume>
          {
          <fpage>274</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>J.</surname>
          </string-name>
          <article-title>Pokorny: XML- : an extendible framework for manipulating XML data</article-title>
          .
          <source>In: Proceedings of BIS</source>
          <year>2002</year>
          , Poznan,
          <year>2002</year>
          ,
          <volume>160</volume>
          {
          <fpage>168</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>P.</given-names>
            <surname>Sarek</surname>
          </string-name>
          <article-title>: Implementation of the XML lambda language</article-title>
          .
          <source>Master's thesis</source>
          , Dept. of Software Engineering, Charles University, Prague,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. J. Zlatuska:
          <article-title>Lambda-kalkul. Masarykova univerzita</article-title>
          , Brno, Ceska republika,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>