基于MarkLogic REST API实现指定属性关联的去重值查询
解决方案
方法1:利用现有Lexicon和REST API约束查询
你已经为META/@name和META/@value创建了Lexicon,直接通过/v1/values端点结合过滤条件即可实现需求:
获取去重的name属性值列表
直接发起请求:GET /v1/values/META/@name?format=json会返回所有去重的
name值(如["fruit", "vegetable"]),用于填充第一个选择列表。根据指定name获取对应去重value列表
当选中某一name(比如fruit)时,添加过滤条件查询META/@value:GET /v1/values/META/@value?q=META/@name:fruit&format=json这里的
q参数会过滤出所有META/@name等于fruit的元素,再返回对应的value属性去重值列表,不会产生无效组合。
方法2:自定义REST扩展(精准关联查询)
如果方法1的过滤效果达不到预期,可编写XQuery扩展实现更精准的属性关联:
编写XQuery扩展代码
创建get-meta-values.xqy文件,内容如下:xquery version "1.0-ml"; declare variable $name as xs:string external; let $matching-values := cts:element-attribute-values( xs:QName("META"), xs:QName("value"), (), cts:element-attribute-value-query(xs:QName("META"), xs:QName("name"), $name) ) return fn:distinct-values($matching-values)部署扩展到MarkLogic
通过REST API完成部署:PUT /v1/config/resources/get-meta-values Content-Type: application/xquery -- 此处放入上述XQuery代码调用扩展获取结果
请求指定name对应的value列表:GET /v1/resources/get-meta-values?name=fruit&format=json该接口会精准返回与
name=fruit关联的所有去重value值,彻底避免无效组合问题。
UI联动逻辑
- 初始化页面时,调用
/v1/values/META/@name获取所有name值,填充第一个选择列表。 - 监听第一个列表的选中事件,将选中的name值作为参数传入上述接口,获取对应value列表后填充第二个选择列表。
内容的提问来源于stack exchange,提问作者eaolson
相关产品推荐
相关产品推荐

