Die Basex Database_Module db:replace "Ersetzt eine Ressource, die durch $ path angegeben ist, in der Datenbank $ db mit dem Inhalt von $ input oder fügt sie als neue Ressource hinzu".Basex 8.44 db: Ersetzen ersetzt keine vorhandenen Dateien mit demselben Namen
db:add Dokumentation schlägt vor "Ein Dokument mit dem gleichen Pfad kann mehr als einmal in einer Datenbank auftreten. Wenn Sie einzelne Instanzen erzwingen möchten, verwenden Sie stattdessen db: replace."
Da ich nicht die Ergebnisse zu verstehen, ich bin mit der
Ich habe eine Sammlung von XML-Dokumenten mit Gegenständen wie
<item X="14-03-04-SEC_Exempt_Reporting_Adviser_Report_2014-3-4"
DATE="2014-03-04"
TYPE="XLSX"
CRD="170562"
PRIMARYNAME="LAUNCH ANGELS"
LEGALNAME=""
STATE="MA"
COUNTRY="US"/>
Ich verwende den folgenden xquery folgenden
immer zu lese jede Datei in der Sammlung und speichere jedes Element mit einem aus den Elementattributen erstellten Dateinamen, um nur Elemente zu speichern, die für diese Attributliste mit dem Befehl db: replacedeclare namespace db="http://basex.org/modules/db";
declare namespace file="http://expath.org/ns/file";
for $file in file:list("/mnt/06_08_2016_08_50_20/XML/", false(), "*.xml")
let $doc := doc(concat("/mnt/06_08_2016_08_50_20/XML/", $file))
for $item in $doc//item
return
let $file := replace(concat($item/@CRD,$item/@PRIMARYNAME,$item/@LEGALNAME,$item/@STATE,$item/@COUNTRY,'.xml'),'\s+','')
return db:replace('FOIA', $file, $item)
eindeutig sind
Nach meiner Anfrage
let $items := //item[@CRD ='170562']
for $item in $items
return fn:base-uri($item)
gibt es 28 XML-Dateien erstellt, obwohl es nur zwei eindeutige Dateinamen.
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
Ich würde nur 2 Dateien erwartet 28 mit diesem Namen in der Datenbank nicht vorhanden, wenn db mit: ersetzen
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
Ich möchte auf einzelne Instanzen erzwingen, einfügen so, was ich tue falsch.
Dank viel
Okay, mir ist nicht klar, warum ich eine db: replace Funktion dann überhaupt brauchen würde. Ich hatte Logik in Sachsen zu gruppieren, aber der Speicherverbrauch war so groß, ich hoffte auf eine einfache Alternative wie die Replace-Funktion, die nur ein vorhandenes Dokument überschreibt. – conteh
Ich möchte Sie nur bitten, die db beizubehalten: Ersetzen Sie die Funktionalität wie in der Basex-Dokumentation angegeben. Ein solches Feature in einer Datenbank, das ein vorhandenes Dokument durch einen Funktionsaufruf mit demselben Dateinamen ersetzt, ist eine gute Sache. Ich glaube, Marklogic verfügt über eine Logik zum Überschreiben eines vorhandenen Dokuments basierend auf dem Dokument zugeordneten Datenbankdateipfad. – conteh
Die XQuery-Update-Semantik ist sehr streng in Bezug auf die Bewertung von Aktualisierungsausdrücken und Konflikten, die sich aus Operationen ergeben (siehe z. B. http://docs.basex.org/wiki/XQuery_Update#Pending_Update_List). Dies bedeutet, dass Dokumente sowieso vor ihrer Ausführung zwischengespeichert werden und dass wir nicht mehr als die Operation mit demselben Ziel zulassen sollten (da es nicht klar ist, welches Dokument in der Datenbank endet).Ich gehe davon aus, dass die Gruppe nach Lösung sogar schneller und weniger speicherintensiv ist. db: replace ist immer noch erforderlich, wenn nachfolgende Abfragen auf die Datenbank zugreifen, so dass sich ihre Semantik nicht ändert. –