【发布时间】:2016-06-08 17:53:55
【问题描述】:
basex Database_Module db:replace "将数据库 $db 中由 $path 指定的资源替换为 $input 的内容,或者将其添加为新资源"。
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
当使用 db:replace 插入时,我希望数据库中只存在 2 个文件,这些文件的名称不是 28 个
FOIA/170562LAUNCHANGELSNHUS.xml
FOIA/170562LAUNCHANGELSMAUS.xml
我确实想强制执行单个实例,所以我做错了什么。
非常感谢
【问题讨论】: