= eXist Interface: Maintenance of user annotations =
User annotations are maintained by the interface function /mpdl/interface/external/object.xql.
This function has 3 parameters:
* operation (possible values: read, create, update, delete)
* type (possible values: element, query)
* object (see examples below)
* attributes
* uid: user id (normally email address) of the operation (e.g. andy@mpiwg-berlin.mpg.de)
* documentId: the eXist document identifier (e.g. /tei/en/Test_1789.xml)
* xpointer: the xpointer to the position in that document (e.g.: id('page2')/TEI[1]/text[1]/body[1]/p[1]/s[3]/point(4)); see [/wiki/schema/xpointer XPointer specification]; it consists of 3 parts:
* page number: (e.g. id('page2'))
* XPath identifier of the XML page node (e.g.: /TEI[1]/text[1]/body[1]/p[1]/s[3])
* text point within that node (e.g: /point(4))
* value: if operation is create or update: the new object (e.g. This is an annotation of Andy)
To maintain a user annotation "at the HTML side" one needs the XPath identifier of the XML page node at which the annotation should be created/updated/deleted. This identifier is displayed by the parameter "options=withXmlNodeIds" in the interface function /mpdl/interface/page-fragment.xql. Then the output HTML document page contains an additional attribute "xmlNodeId" in all HTML nodes which are XML nodes (e.g. This is the first sentence of the first paragraph.)
== Limitations ==
* Interface
* Java: no real user test done
* Display of a document page with external objects (insertExternalElements.xsl): full redesign and new implementation
* Bugs
* at one position there could be only one external user annotation so far (bug in XSL script)
== Examples ==
=== Example document ===
* [http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/page-query-result.xql?document=/tei/en/Test_1789.xml&mode=text&pn=1&options=withXmlNodeIds Test document: Display of page 1 with XPath identifiers for all XML nodes]
* [http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/page-query-result.xql?document=/tei/en/Test_1789.xml&mode=text&pn=2 Test document: Display of page 2 with external user annotations]
=== Read annotations ===
{{{
http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?
operation=read&
type=element&
object=
}}}
[http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?operation=read&type=element&object=%3Cobject%20documentId=%22/tei/en/Test_1789.xml%22%20xpointer=%22id%28%27page2%27%29%22%3E%3C/object%3E Read annotations]
=== Create annotation ===
{{{
http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?
operation=create&
type=element&
object=
}}}
[http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?operation=create&type=element&object=%3Cobject%20uid=%22andy@mpiwg-berlin.mpg.de%22%20documentId=%22/tei/en/Test_1789.xml%22%20xpointer=%22id%28%27page2%27%29/TEI%5B1%5D/text%5B1%5D/body%5B1%5D/p%5B1%5D/s%5B3%5D/point%284%29%22%3E%3Cnote%3EThis%20is%20an%20annotation%20of%20Andy%3C/note%3E%3C/object%3E Create annotation]
=== Update annotation ===
{{{
http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?
operation=update&
type=element&
object=
}}}
[http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?operation=update&type=element&object=%3Cobject%20uid=%22andy@mpiwg-berlin.mpg.de%22%20documentId=%22/tei/en/Test_1789.xml%22%20xpointer=%22id%28%27page2%27%29/TEI%5B1%5D/text%5B1%5D/body%5B1%5D/p%5B1%5D/s%5B3%5D/point%284%29%22%3E%3Cnote%3EThis%20is%20an%20annotation%20of%20Andy%3C/note%3E%3C/object%3E Update annotation]
=== Delete annotation ===
{{{
http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?
operation=delete&
type=element&
object=
}}}
[http://mpdl-test.mpiwg-berlin.mpg.de:30030/mpdl/interface/external/object.xql?operation=delete&type=element&object=%3Cobject%20uid=%22andy@mpiwg-berlin.mpg.de%22%20documentId=%22/tei/en/Test_1789.xml%22%20xpointer=%22id%28%27page2%27%29/TEI%5B1%5D/text%5B1%5D/body%5B1%5D/p%5B1%5D/s%5B3%5D%22%3E%3C/object%3E Delete annotation]