Well, I'm not sure that I can easily incorporate an XML namespace into a
bunch of legacy XML docs.  We've been riding the non-namespace wave for a
bit.  I'm also not sure that I can get everyone to concur on adopting a
namespace for the new schema used in the secondary database - the XML schema
was adopted from a DTD, so the data needs to validate against both the DTD
and the schema.

There is also the concept that the secondary database will only contain what
we refer to the data of record - so there are some architectural decisions
that affect the separation of data.

I would like to better understand your recommendation for having one
database and to use different namespaces.  If there ever was a time for
adding namespaces, this would be the time to do so...  It may require that
we rethink things a little bit, but I'll need some really good reasons for
adding the namespaces.

Tim


-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Michael
Blakeley
Sent: Thursday, April 23, 2009 11:08 AM
To: General Mark Logic Developer Discussion
Cc: Paul Rooney
Subject: Re: [MarkLogic Dev General] How to configure a CPF when
deletingadocument?

Tim,

I'd suggest a rethink of that approach. How about using two namespaces 
instead of two databases?

-- Mike

On 2009-04-23 07:42, Tim Meagher wrote:
> Hi Mary,
>
> Thanks for the explanation - I'll give this a shot.  I'm assuming I can
just
> make the change in the same pipeline...
>
> I also appreciate the info about the links, however I don't think I can do
> the link because the linked document would be in another database.  I keep
> the secondary doc in different databases because they use different
schemas
> and it avoids problems with setting different fragment roots and range
> indexes on similarly named elements.
>
> So when I create or update the document, the pipeline calls a program that
> runs an xquery to transform the incoming doc into a new format and inserts
> or updates the results into the secondary database via an xdmp:invoke
> function call - nasty but necessary...  Likewise when I delete the
document
> it has to delete the document in the secondary database as well via an
> xdmp:invoke function call.
>
> If there's a better way to approach this I'm all ears...
>
> Tim
>
> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Mary
Holstege
> Sent: Thursday, April 23, 2009 10:16 AM
> To: General Mark Logic Developer Discussion
> Cc: 'Paul Rooney'
> Subject: Re: [MarkLogic Dev General] How to configure a CPF when deleting
> adocument?
>
>
> On Wed, 22 Apr 2009 16:41:08 -0700, Tim Meagher<[email protected]>  wrote:
>
>> I am creating a CPF to perform an action when a document is deleted, but
>> I'm
>> not seeing the entry in the error log.  Here is the part of my CPF XML
>> file
>> pipeline file that handles the deletion:
>>
>>
>>    <state-transition>
>>      <annotation>Delete Reference Set XML</annotation>
>>      <state>http://marklogic.com/states/deleted</state>
>>      <on-success>http://marklogic.com/states/final</on-success>
>>      <on-failure>http://marklogic.com/states/error</on-failure>
>>      <default-action>
>>        <module>/citedrefs/reference-set-delete-cpf.xqy</module>
>>      </default-action>
>>    </state-transition>
>>
>>
>
> Your fundamental problem is that deletion is not a *state* transition, but
> a *status* transition.  That it, it isn't just a normal advancement of
> processing inside your pipeline's state machine, but is something
> fundamental that happens to the document.
>
> Never fear, you can do this, but you have to change from using a
> state-transition element to using a status-transition element.
> The Status Change Handling pipeline has an example, but
> your transition should look something like this:
>
> <status-transition>
>        <annotation>Delete Reference Set XML</annotation>
>        <status>deleted</status>
>        <priority>10000</priority>
>        <execute>
>          <module>/citedrefs/reference-set-delete-cpf.xqy</module>
>        </execute>
>    </status-transition>
>
> Now for the caveats and warnings: deletion processing is trickier
> than normal processing because it all happens in a pre-commit
> trigger (normal state transition actions happen in a post-commit
> trigger) because if we waited, the document would already be gone.
> This means that you have to be extra careful that your code is
> bulletproof with no thrown errors or infinite cascades of work: because
> all of that will occur in the same transaction that deleted the document
> in the first place.
>
> What the normal CPF deletion handling does for cleaning up linked
> documents is to perform deletion in two phases: marking related targets
> with the deleted status, and then actually deleting them.  If your
clean-up
> process is somewhat involved, you can look to these modules for a guide.
>
> On the other hand, another way to slice the onion is to leverage the
normal
> deletion cleanup instead of replacing it.  The standard deletion action in
> CPF is to delete all documents marked as having a dependent link to
> the source document.  The conversion application makes use of this
> to remove the XHTML generated from a PDF file when that PDF is deleted.
> The secret is to set a link property on the document, for example:
>
> (This method is in the module http://marklogic.com/cpf/links at
> /MarkLogic/cpf/links.xqy)
>
> lnk:create( $dependent-uri, $source-uri, "source", "related", "strong" )
>
>> 1. Should the cpf:success state should be used since the document will be
>> deleted?  Any working examples out there?
>
> See Modules/MarkLogic/cpf/actions/link-coherency-action.xqy
> Yes, call cpf:success and cpf:failure according to the normal pattern.
> In this case it will be a no-op, but it is good practice to always build
> your actions in this style so that they function properly even if you
> modify your application to call them in a case where there is a document
> in hand (e.g. soft delete).
>
>> 2. Will the $cpf:document-uri contain the URI of the deleted document?
>
> Yes.
>
>> 3. Is there some default deletion trigger that needs to be replaced or
>> disabled?
>
> Yes and no.  There is one, but if you are not making use of automatic
> link coherency then you can just override it. Setting the priority and
> using an execute block rather than a default-action block will
> guarantee that your action will be chosen instead of the default one.
> You want the default one if you make use of any of the standard
> CPF applications (such as conversion or entity enrichment) that
> ship with the server.  If you do use those applications, then I would
> recommend that you make sure you incorporate the logic from
> the link-coherency-action into your action, or find a way to leverage
> the automatic link  processing yourself so you don't need to have
> your own method.
>
> Regards
>
> //Mary
>
> [email protected]
> Principal Engineer
> Mark Logic Corporation
> _______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
>
>
> _______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general

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


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

Reply via email to