2017-04-07 1 views
0

Rückkehr Ich habe die folgende Abfrage in einer Marklogic XQuery-Datei, und ich sehe die folgende FehlermeldungXQuery-Datei ungültig Entitätsverweis Verwendung von Sonderzeichen

zurück
XDMP-ENTITYREF: (err:XPST0003) Invalid entity reference " " . See the MarkLogic server error log for further detail. 

Im Folgenden ist der Code, den ich in der XQuery bin mit Datei.

xquery version "1.0-ml"; 

declare variable $query := 

    cts:or-query 
    ((
    cts:element-word-query(xs:QName("lines"),"l&l"), 
    cts:element-word-query(xs:QName("lines"),"pool & cue"), 
    cts:element-word-query(xs:QName("lines"),"look") 
)); 

declare function local:do-query(){ 
    element xml { 
    for $i in cts:uris((),(), $query) 
    let $item := doc($i) 

    return 
     element item { 
     element title { $item/title/string() } 
    } 
    } 
}; 

local:do-query() 

Offensichtlich sind die 2x Tags ich suche sind l&l und pool & cue. Ich habe mir auch den reparaturvollen Vorschlag in einer anderen Frage angeschaut, konnte aber nicht herausfinden, wie das in diese Abfrage passt. Wenn ich die mit Sonderzeichen entfernt habe, funktioniert es wie erwartet.

Irgendwelche Ideen?

+0

Dieser Code läuft gut in QConsole, vielleicht gibt es ein anderes Problem. Wie rufen Sie den Code auf und sind Sie sicher, dass Sie den obigen Code aufrufen und nicht etwas anderes? Könnte es stattdessen ein Datenproblem sein? – grtjn

+0

Ja der Code läuft gut in qconsole vereinbart, aber beim Hochladen besagten Codes in eine .xqy-Datei und versuchen, es in einem Browser auszuführen, ist es dort, wo die Fehlermeldung zurückgegeben wird. Das erwartete Verhalten besteht darin, dass die xml-Ergebnisse über die Konsole beobachtet werden. – Key

+0

Wie haben Sie die .xqy-Datei hochgeladen, und haben Sie zum Beispiel mit der QConsole Explore-Funktion in Ihrer Moduldatenbank überprüft, ob die einmal in die Datenbank geladene .xqy-Datei korrekt aussieht? – grtjn

Antwort

1

Basierend auf den zusätzlichen Informationen in den Kommentaren zu der Frage, ist dies kein Problem mit der Ausführung des Codes, sondern eher mit der Bereitstellung des Codes.

Dies passiert häufig, wenn Sie Code mit QConsole einfügen oder auf andere Weise, in denen Sie XQuery-Code auswerten. Das & wird interpretiert und in das & Zeichen übersetzt, das es darstellt. Wenn Sie das dann in eine .xqy-Datei in eine Modul-Datenbank schreiben, wird es nicht wieder in & zurückgemeldet, da XQuery-Dateien als einfacher Text in MarkLogic gespeichert werden und & im Nur-Text-Format nicht maskiert wird.

Eine bessere Methode zum Bereitstellen von Code ist das Hochladen oder Einfügen von Datenträgern. Auf diese Weise werden Zeichen wie &, > und { in XML nicht interpretiert, sondern beibehalten und unverändert eingefügt. Es gibt Tools wie ml-gradle und Roxy, die die Bereitstellung von MarkLogic-Code sehr einfach machen. Überlegen Sie, diese zu verwenden. Alternativ könntest du auch mit Curl gegen die Management REST api schauen.

Wenn Sie QConsole doch verwenden möchten, entziehen Sie Zeichen wie & zweimal. Z.B. & wird &amp;amp; und < wird &amp;lt;.

HTH!

+0

Danke für Ihre Hilfe – Key

Verwandte Themen