使用FLWOR连接表

时间:2012-05-24 09:55:49

标签: xml xquery flwor


我有关于FLWOR加入的问题。以下是我的XML的外观概述。

<user>
  <user-id>...</user-id>
  <username>...</username>
  <password>...</password>
  <!-- By schema file, there could be unbounded role-ids -->
  <role-id>...</role-id>
  <role-id>...</role-id>
  <role-id>...</role-id>
</user>

<role>
  <role-id>...</role-id>
  <name>...</name>
  <!-- By schema file, there could be unbounded permission-ids -->
  <permission-id>...</permission-id>
  <permission-id>...</permission-id>
  <permission-id>...</permission-id>
</role>

<permission>
  <permission-id>...</permission-id>
  <resource-id>...</resource-id>
  <operation-id>...</operation-id>
</permission>

我有一个FLWOR表达式query,它应返回给定用户的一系列权限。它应该很简单,但我无法弄清楚为什么每次运行查询时都会得到一个空的ResourceSet。

for $i in collection("data/rbac/users")/user[user-id="..."]/role-id
for $j in collection("data/rbac/roles")/roles/role
for $k in collection("data/rbac/permissions")/permission
where $i = $j/role-id and exists($j/permission-id[. = $k/permission-id])
return $k

非常感谢任何建议。 谢谢,

伊戈尔

2 个答案:

答案 0 :(得分:1)

您的XQuery似乎与您提供的数据不匹配。例如role-id不是user的孩子,也似乎没有roles元素。给定提供的XML的此查询可能会返回一个空资源集。

答案 1 :(得分:0)

由于源XML数据的结构并不完全清楚,因此很难说清楚。但似乎存在一个小的不一致性 - 您的XQuery的第二行假设您的集合roles中有一个名为data/rbac/roles的节点。也许第二行应该看起来像

  

for $j in collection("data/rbac/roles")/role

?猜猜......