2016-07-06 42 views
5

Sto utilizzando MLCP (Marklogic Content Pump) per copiare il contenuto da un database a un altro. In questo sto usando -query_filter opzione e il suo valore è una cts: query in formato XML serializzato di una serie di cts: elemento-gamma-query avvolto in cts: e-query:Valore non valido Operatore '<' (minore di) segno quando passato come -query_filter in MLCP

<cts:and-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:element-range-query operator=">"> 
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element> 
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value> 
    </cts:element-range-query> 
    <cts:element-range-query operator="&lt;"> 
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element> 
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value> 
    </cts:element-range-query> 
</cts:and-query> 

Ora , la query sopra restituisce un risultato valido quando viene eseguita su ML Qconsole, ma quando viene passata nell'opzione -query_filter di MLCP, restituisce l'errore dicendo 'Carattere valore attributo non valido' < '.

La versione di Marklogic e MLCP è 8.0-5.

Su ulteriore scavo in questo ho osservato che il problema è solo quando il valore operatore inferiore '<'

Nota: Ho configurato un intervallo indice valido sul database per l'elemento "rilasciato".

risposta

1

Mark Logic incoraggia l'utilizzo di file di opzioni quando si utilizza una query cts serializzato come XML , perché i caratteri speciali possono essere interpretati dal sistema operativo sottostante sulla riga di comando.

La mia prima risposta sarebbe quella di provare a creare un file, ad esempio, options.txt con il contenuto:

--query_filter 
<cts:and-query xmlns:cts="http://marklogic.com/cts"> 
    <cts:element-range-query operator=">"> 
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element> 
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2000-12-21T00:00:00Z</cts:value> 
    </cts:element-range-query> 
    <cts:element-range-query operator="&lt;"> 
    <cts:element xmlns:c="http://iddn.icis.com/ns/core">c:released-on</cts:element> 
    <cts:value xsi:type="xs:dateTime" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">2016-12-21T00:00:00Z</cts:value> 
    </cts:element-range-query> 
</cts:and-query> 

(Potrebbe essere necessario fare la XML forma sulla stessa linea del file però)

e quindi richiamare MLCP con

mlcp.sh -options_file options.txt ...

+0

Questo è esattamente quello che sto facendo attualmente. Tutte le opzioni interessate sono racchiuse in un file options.txt e sto eseguendo lo stesso comando sopra menzionato. –

+0

Capisco. Sembra strano, perché l'XML è ben formato così com'è. Qualcosa che avevo in mente nel caso ci fosse un bug da qualche parte e "<" viene risolto a "<" troppo presto nella pipeline: hai provato "& lt;" invece "<"? –

+0

Ho provato a utilizzare '& lt;' ma ha lo stesso errore –