Объединение таблиц с использованием 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, запрос, который должен возвращать последовательность разрешений для данного пользователя. Это должно быть достаточно просто, однако я не могу понять, почему я получаю пустой 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 ответа

Решение

Трудно сказать, так как структура исходных данных XML не совсем ясна. Но, похоже, есть небольшое несоответствие - вторая строка вашего XQuery предполагает узел с именем roles внутри вашей коллекции data/rbac/roles, Может быть, вторая строка должна выглядеть

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

? Просто угадаю...

Ваш XQuery не соответствует предоставленным вами данным. Например role-id не дитя user, а также, кажется, не существует roles элемент. Этот запрос с учетом предоставленного XML, скорее всего, вернет пустой набор ресурсов.

Другие вопросы по тегам