Mark,

You can use the locking API for an application like this, where check-in and check-out semantics are desirable. See http://developer.marklogic.com/pubs/3.2/apidocs/UpdateBuiltins.html#lock-acquire - this is intended to support WebDAV applications, and many WebDAV-enabled editors support locking natively. For example, oXygen works for this scenario. If you are building your own editing application, it could use the same locking API.

Alternatively, your application could also retrieve property::prop:last-modified when checking the document out, and make sure that it hasn't changed before updating the document. That is, the last-modified timestamp can act as a version number, and it's maintained for you by the database.

You could also create your own trigger to maintain a version number, if you really want one. There's an example of creating a simple trigger in the developer guide.

-- Mike

Mark Waschkowski wrote:
HI Danny,

'If what you mean by versioning is check in/check out, then the answer to
your question is that one can build an application that versions documents
with MarkLogic'
The idea I'm referring to is not check in/check out, just assigning a
version number to a document.

If there is no versioning, consider Person A and Person B. Both persons load
a document and begin editing. A writes to the document, and then B writes to
the same document 5 minutes later. If the document doesn't have a version
number associated with it, there B doesn't know that the document has
already been updated (that his view of the document is actually stale), and
will merrily overwrite the changes that A made, hence 'last update wins'.
With versioning, before B is able to write to the document, (and within the
scope of a transaction) the version number would be checked to ensure that
B's data is not stale (ie. that the version numbers are identical) before
writing. If the data is stale, the data will NOT be written and B will be
forced to update their view (and the version number) of the document, and
may then make updates and try to write again.

I realize that I can code this behavior myself, was wondering if Marklogic
supports this transparently.

Thanks,

Mark


On Feb 4, 2008 2:04 PM, Danny Sokolsky <[EMAIL PROTECTED]> wrote:

 Hi Mark,



If what you mean by versioning is check in/check out, then the answer to
your question is that one can build an application that versions documents
with MarkLogic.  Because MarkLogic Server supports transactions, you can
build an application that would keep track of the versions of a document and
allow users to check out and check in different versions, and have MarkLogic
Server store all of the versions of the documents.



When you update a document in a transaction (in an XQuery statement), the
transaction is run as an update statement in what is known as
Readers/Writers mode.  In readers/writers mode, a lock is put on the
document(s) used in the statement, and no other transactions can update
those documents until those locks are released, which happens at the end of
the transaction when the update commits, so transactional integrity is
preserved.



I am not sure what you mean by the "last update wins" scenario; in a
transaction, the updates are always consistent.   These transactions all
happen automatically in MarkLogic Server, whenever there is an update that
occurs within an XQuery statement.  Now if another transaction comes along
after the first one commits, it will see the newly committed version of the
document, and if it updates it, it will lock it so no one else can update
during the transaction.  Meanwhile, the documents being updated are still
available for read-only queries (including searches); any query will use the
latest committed version of the document(s) at the time in which it runs.



For details how this works, see the "Understanding Transactions in
MarkLogic Server" chapter of the Developer's Guide (
http://developer.marklogic.com/pubs/3.2/books/dev_guide.pdf).



-Danny



*From:* [EMAIL PROTECTED] [mailto:
[EMAIL PROTECTED] *On Behalf Of *Mark Waschkowski
*Sent:* Saturday, February 02, 2008 6:25 AM
*To:* [email protected]
*Subject:* [MarkLogic Dev General] versioning of data



Hi,

I checked the dev doc but didn't see anything exactly like my question:
does Marklogic support versioning of documents, or any plans to in the
future? I'm concerned about the 'last update wins' scenario.

Thanks,

Mark

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general




------------------------------------------------------------------------

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general

Reply via email to