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/.
- data XTree
- type XSeq = [XTree]
- type Tag = String
- type AttList = [(Name, String)]
- putXSeq :: XSeq -> IO ()
- xq :: String -> Q Exp
- xe :: String -> Q Exp
- xquery :: String -> IO XSeq
- xfile :: String -> IO XSeq
- xqdb :: String -> Q Exp
- connect :: FilePath -> IO Connection
- disconnect :: IConnection conn => conn -> IO ()
- prepareSQL :: IConnection conn => conn -> String -> IO Statement
- executeSQL :: Statement -> XSeq -> IO XSeq
- xqueryDB :: IConnection conn => String -> conn -> IO XSeq
- xfileDB :: IConnection conn => String -> conn -> IO XSeq
- shred :: IConnection conn => conn -> String -> String -> IO ()
- createIndex :: IConnection conn => conn -> String -> String -> IO ()
The XML Data Representation
Rose tree representation of XML data. The Int in XElem is the preorder numbering used for the document order of nodes.
XElem !Tag !AttList !Int XTree [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 |
putXSeq :: XSeq -> IO ()Source
Print the XQuery result (which is a sequence of XML fragments) without buffering.
The XQuery Compiler
Run an XQuery that reads XML documents. When evaluated, it returns IO XSeq.
Run an XQuery expression that does not read XML documents. When evaluated, it returns XSeq.
The XQuery Interpreter
The XQuery Compiler with Database Connectivity
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 Statement
s
active. In more precise language, the results in such situations are undefined
and vary by database. So don't do it.
prepareSQL :: IConnection conn => conn -> String -> IO StatementSource
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..