HXQ-0.8.3: A Compiler from XQuery to Haskell

XML.HXQ.XQuery

Contents

Description

HXQ is a fast and space-efficient compiler from XQuery (the standard query language for XML) to embedded Haskell code. The translation is based on Haskell templates. It also provides an interpreter for evaluating ad-hoc XQueries read from input or from files and database connectivity using HDBC. For more information, look at http://lambda.uta.edu/HXQ/.

Synopsis

The XML Data Representation

data XTree Source

Rose tree representation of XML data. The Int in XElem is the preorder numbering used for the document order of nodes.

Constructors

XElem !Tag !AttList !Int [XTree]

an XML tree node (element)

XText !String

an XML tree leaf (PCDATA)

XInt !Int

an XML tree leaf (int)

XFloat !Float

an XML tree leaf (float)

XBool !Bool

an XML tree leaf (boolean)

XPI Tag String

processing instruction

XGERef Tag

general entity reference

XComment String

comment

XError String

error report

XStmt Statement

used internally to wrap an SQL statement

XNoPad

marker for no padding in XSeq

Instances

type XSeq = [XTree]Source

type AttList = [(Name, String)]Source

putXSeq :: XSeq -> IO ()Source

Print the XQuery result (which is a sequence of XML fragments) without buffering.

The XQuery Compiler

xq :: String -> Q ExpSource

Run an XQuery that reads XML documents. When evaluated, it returns IO XSeq.

xe :: String -> Q ExpSource

Run an XQuery expression that does not read XML documents. When evaluated, it returns XSeq.

The XQuery Interpreter

xquery :: String -> IO XSeqSource

Evaluate the XQuery using the interpreter.

xfile :: String -> IO XSeqSource

Read an XQuery from a file and run it using the interpreter.

The XQuery Compiler with Database Connectivity

xqdb :: String -> Q ExpSource

Run an XQuery that reads XML documents and queries databases. When evaluated, it returns (IConnection conn) => conn -> IO XSeq.

connect :: FilePath -> IO ConnectionSource

Connect to the relational database in filepath using the HDBC Sqlite3 driver

disconnect :: IConnection conn => conn -> IO ()

Disconnect from the remote database.

You do not need to explicitly close an IConnection object, but you may do so if you so desire. If you don't, the object will disconnect from the database in a sane way when it is garbage-collected. However, a disconnection may raise an error, so you are encouraged to explicitly call disconnect. Also, garbage collection may not run when the program terminates, and some databases really like an explicit disconnect.

So, bottom line is, you're best off calling disconnect directly, but the world won't end if you forget.

This function discards any data not committed already. Database driver implementators should explicitly call rollback if their databases don't do this automatically on disconnect.

Bad Things (TM) could happen if you call this while you have Statements active. In more precise language, the results in such situations are undefined and vary by database. So don't do it.

The XQuery Interpreter with Database Connectivity

xqueryDB :: IConnection conn => String -> conn -> IO XSeqSource

Evaluate the XQuery with database connectivity using the interpreter.

xfileDB :: IConnection conn => String -> conn -> IO XSeqSource

Read an XQuery with database connectivity from a file and run it using the interpreter.

Shredding and Publishing XML Documents Using a Relational Database

shred :: IConnection conn => conn -> String -> String -> IO ()Source

Store an XML document into the database under the given name.

createIndex :: IConnection conn => conn -> String -> String -> IO ()Source

Create a secondary index on tagname for the shredded document under the given name..