basex Database_Module db:replace「將數據庫$ db中的$ path指定的資源替換爲$ input的內容,或將其添加爲新資源」。Basex 8.44 db:替換不替換具有相同名稱的現有文件
db:add文檔建議「具有相同路徑的文檔可能會在數據庫中多次出現,如果要強制執行單個實例,請改用db:replace。」
既然我不理解,我有以下
得到的結果我有一個XML文檔的收集的物品,諸如
<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"/>
我使用下面的XQuery到讀取集合中的每個文件,使用由項目屬性構造的文件名保存每個項目,以便僅使用db:replace命令保存對這些屬性列表唯一的項目
declare 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)
據我查詢
let $items := //item[@CRD ='170562']
for $item in $items
return fn:base-uri($item)
還有,即使只有兩個唯一的文件名創建28個XML文件。
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
我希望只有2個文件,在使用這些名稱的數據庫中存在不28使用數據庫時:更換插入
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
我不希望強制實施單一的情況下,所以我在做什麼不正確。
非常感謝
好的,我不清楚爲什麼我需要db:replace函數。我確實有邏輯在撒克遜分組但是內存消耗是如此之大,我希望有一個簡單的替代方法,就像覆蓋現有文檔的替換函數。 – conteh
我只是想敦促你保持db:replace的功能,如basex文檔中所述。數據庫中的這種功能用一個函數調用用相同的文件名替換現有文檔是一件好事。我相信Marklogic有邏輯根據與文檔關聯的數據庫文件路徑覆蓋現有的文檔。 – conteh
有關更新表達式和操作引起的衝突評估,XQuery Update語義非常嚴格(請參閱http://docs.basex.org/wiki/XQuery_Update#Pending_Update_List)。這意味着文檔在被執行之前將被緩存,並且我們不應該允許超過同一個目標的操作(因爲它不會清楚哪個文檔在db中結束)。我假設解決方案組將更快,內存消耗更少。 db:如果你有後續的查詢訪問數據庫,仍然需要替換,所以它的語義不會改變。 –