2016-05-26 22 views
5

Abbiamo bisogno di aggiungere una raccolta a ogni documento che inglobiamo e vorremmo utilizzare CPF poiché la raccolta dipenderà dai dati nei documenti.MarkLogic: consente di eseguire CPF su ogni documento ingerito in cui gli URI sono "nome.xml" senza directory o barre

I nostri URI documento sono: GUID.xml senza barra in avanti o directory di fronte a essi.

Abbiamo tentato di ottenere CPF per attivare utilizzando:

documento scope = directory

uri =/

e

documento scope = documento

uri =/

La nostra teoria è che CPF si aspetta gli URI del documento per iniziare con una slash, ma dal momento che non lo fanno CPF non determina.

Abbiamo considerato l'utilizzo di una soluzione grezza di aggiungere una raccolta di base a ogni documento e utilizzarla come ambito del documento per CPF, ma ovviamente si tratta di dati non necessari aggiunti che non sono necessari.

Saremo grati per qualsiasi idea o soluzione.

+0

Solo curioso, hai provato l'ambito della directory con una stringa vuota come uri param? – grtjn

risposta

5

ho trovato questo nella Domain Scope section of the CPF Guide:

In Interfaccia di amministrazione, l'elenco a discesa portata documento specifica se il dominio si applica a un unico documento, una cartella o una raccolta. Ogni dominio può avere solo uno di questi ambiti documentali; se hai bisogno di più di uno di questi ambiti documentali, puoi creare più domini.

In altre parole, per utilizzare CPF su più di un documento, è necessario utilizzare una directory o una raccolta per organizzare un po 'i dati.

Si noti inoltre che la guida CPF dice "Do not overlap domains". Ciò significa che se hai mai desiderato CPF per indirizzare i contenuti in modo più preciso, ti consigliamo comunque un'organizzazione più specifica dei tuoi contenuti (diverse directory per tipi diversi o fonti di contenuto, ad esempio). Questo può anche essere utile durante le ricerche. Senza sapere nulla dei tuoi dati, non posso suggerire come potresti romperlo, ma qualche tipo di organizzazione è di solito utile.

Avrete bisogno di fare qualcosa di diverso nel vostro carico di dati. Penso che il tuo percorso di minor resistenza sia quello di aggiungere un/all'inizio del tuo URI.

+0

Grazie a Dave, parlerò con il team e vedremo come vogliono procedere. – zrdunlap

4

Sostengo il post di Dave come risposta appropriata. Tuttavia, per completezza, ho incluso un tuffo più profondo nel modo in cui CPF e trigger funzionano insieme e in che modo è possibile ottenere ciò che si desidera con gli strumenti disponibili. Ma anche se "riesci a" acclimatarlo, i tagli sarebbero solo più ordinati.

Sono d'accordo con il suggerimento di Dave sul "/". Iniziare con una barra è una buona cosa in ML (non richiesto, ovviamente). Tuttavia, ho attraversato una manciata di cose che presuppongono che all'inizio ci sia una barra.

Ma, questo richiede di cambiare quello che hai - e MarkLogic ha un sacco di chicche sotto il cofano, così possiamo avere un po 'di rovistare intorno e vedere quali altre borse di trucchi possiamo provare.

Che cos'è CPF? È un'applicazione basata su trigger che fa alcune cose davvero convenienti ed è altamente configurabile per le pipeline. - La cosa importante è che sotto il cofano, gira sui grilletti. - I trigger richiedono un ambito (nessun carattere jolly o ambito vuoto).

Ora MarkLogic è molto chiaro in quanto una "directory" termina con una barra. E questo vale per la directory radice. Quindi non è possibile utilizzare l'ambito della directory o l'ambito del documento nell'esempio basato su URIS.

Ma abbiamo ancora trgr: collection-scope() con cui giocare. Come? Bene, questo è facile: - Per qualsiasi utente viene utilizzato per inserire i documenti, aggiungere una raccolta predefinita (sotto il pannello di amministrazione) -> sicurezza -> utenti [o ruoli] - Quindi definire il trigger.

Per quanto mi riguarda, ho aggiunto una raccolta predefinita denominata 'default' e la seguente definizione di innesco:

trgr:create-trigger("myTrigger2", "Simple trigger example", 
    trgr:trigger-data-event(
    trgr:collection-scope("default"), 
    trgr:document-content("create"), 
     trgr:post-commit()), 
    trgr:trigger-module(0, "/dae/", "log.xqy"), 
    fn:true(), xdmp:default-permissions()) 

Così, ora i documenti possono essere attivate perché l'utente inserendoli ha già definito una collezione (che è già disponibile al momento dell'esecuzione di questo trigger). Sì, questa è la fine aziendale di CPF: l'ambito di raccolta è lo stesso delle configurazioni CPF.

In sostanza, i documenti sono associati a una raccolta da parte dell'utente utilizzato per inserirli (una raccolta predefinita). Con ciò, è possibile affermare che il trigger è applicato anche agli inserimenti di quell'utente. E in MarkLogic hai SEMPRE un utente, anche se di default.

Il percorso è questo: documento -> inserito con raccolta predefinita -> trigger viene attivato perché l'ambito di raccolta è definito per la raccolta predefinita.