BASEX-从变量中获取唯一值

时间:2019-04-14 14:00:49

标签: xpath xquery basex

我正在尝试创建数据库中使用的标题的所有不同前缀的列表。标题作为内容文本(与属性相对)存储在xml标记中。

已提取所有标题,我想创建一个唯一前缀列表(标题本身是描述符,而不是唯一标识符)。

我已经理解到每个标题都带有前缀。我现在想做的是删除双打,只留下一小部分唯一值。

我尝试使用distinct-values(),但在我看来,这是对原始标题(即标记的内容)而不是对我创建的变量进行的操作。

我也尝试过将数组转换为in和out,但这也不会产生我想要的结果。

select user_id, min(event_id), min(timestamp),
       (sum(num_consecutive) / 3)
from (select user_id, min(timestamp) as timestamp,
             count(*) as num_consecutive,
             min(event_id) as min_event_id
      from (select t.*,
                   row_number() over (partition by user_id, timestamp::date order by timestamp) as seqnum,
                   row_number() over (partition by user_id, timestamp::date, tag order by timestamp) as seqnum_t
            from t
           ) t
      where tag = 1
      group by user_id, timestamp::date, tag, (seqnum - seqnum_t)
     ) t
where num_consecutive >= 3
group by user_id, timestamp::date;

我想做的是从这样的事情中走出来:

for $name in db:open('DUMMYDATABASE')//body
let $new := $name/mytitle
let $thetitles :=  array { tokenize(replace($new, 's', ''), '-')[1] }
let $result := <thing>{distinct-values($names)}</thing>

return $result

到这样的迭代 “ con”,“ sub”,“ para”,“ super”

以便以后可以迭代该顺序以查找文档。

1 个答案:

答案 0 :(得分:1)

这应该使您走得很远:

distinct-values(//body/tag/tokenize(., '\.')[1])

应用于

<body>
  <tag>con.text1</tag>
  <tag>sub.text1</tag>
  <tag>con.text2</tag>
  <tag>sub.text2</tag>
  <tag>para.text</tag>
  <tag>super.text</tag>
</body>

它产生四个值:'con', 'sub', 'para', 'super'