Script para almacenar en XQuery
motivación
[editar]Usted tiene algunas formas de la tela (como XForms) que necesitan para salvar sus datos a su base de datos. ¿Quieres un solo XQuery que se utiliza para guardar los datos nuevos y actualizar los datos existentes. Si un formulario se utiliza para actualizar un registro existente, se puede asumir que tiene una etiqueta <id> en el documento XML de ser salvos. Nuevos documentos deberán tener un identificador de documento nuevo creado para ellos.
método
[editar]Utilizamos datos HTTP POST y buscar un elemento específico como 'id'. Si el registro no tienen un elemento id, sabemos que tenemos que crear un nuevo registro. Tenga en cuenta que no hay un número de secuencia generado en este ejemplo todavía. Si no hay parámetro 'id' un, vamos a eliminar el archivo antiguo y guardar los nuevos datos en el mismo archivo. Tenga en cuenta que no hay ninguna copia de seguridad o archivo.
Programa de ejemplo de guardar / eliminar un único archivo XML
[editar]
xquery version "1.0";
declare namespace exist = "http://exist.sourceforge.net/NS/exist";
declare namespace request="http://exist-db.org/xquery/request";
declare namespace xmldb="http://exist-db.org/xquery/xmldb";
declare option exist:serialize "method=xhtml media-type=text/xml indent=yes";
(: Call this like this:
For new records:
http://localhost:8080/exist/rest/db/xquery-examples/save-test/new-update-save.xq?new=true
For updates where each record has an id:
http://localhost:8080/exist/rest/db/xquery-examples/save-test/new-update-save.xq?id=123
:)
(: replace this with your document, for example use request:get-data() :)
let $my-doc :=
<data>
<id>123</id>
<message>Hello World</message>
</data>
let $id := $my-doc/id
let $collection := 'xmldb:exist:///db/xquery-examples/save-test'
(: this logs you in; you can also get these variables from your session variables :)
let $login := xmldb:login($collection, 'mylogin', 'my-password')
(: replace this with a unique file name with a sequence number :)
let $file-name := 'test-save.xml'
return
if (not($id))
then (
let $store-return-status := xmldb:store($collection, $file-name, $my-doc)
return
<message>New Document Created {$store-return-status} at {$collection}/{$file-name}</message>
)
else (
let $remove-return-status := xmldb:remove($collection, $file-name)
let $store-return-status := xmldb:store($collection, $file-name, $my-doc)
return
<message>Document {$id} has been successfully updated</message>)
}</results>
Programa de ejemplo para insertar un elemento XML en el final de un archivo XML
[editar]A veces uno no desea crear un nuevo archivo XML, pero sólo guardar los resultados al final de un archivo XML existente. Esto se puede hacer usando las operaciones de actualización XQuery.
W3C Candidate Recommendation for XQuery Update Operations
eXist 1.2/1.3/1.4/1.5 syntax for XQuery Update Operations
For example, in eXist 1.2/1.3/1.4 the operation syntax is the following:
let $append-result := update insert <item/> into doc("myfile.xml")/items