Объединение таблиц с помощью 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

Любое предложение очень ценится. Спасибо,

Игорь


person Igor    schedule 24.05.2012    source источник


Ответы (2)


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

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

? Просто предположил...

person tohuwawohu    schedule 24.05.2012
comment
Я забыл упомянуть. Существует оболочка ‹roles›...‹/roles› вокруг элементов ‹role›..‹/role›, поэтому для доступа к роли мне сначала нужно получить доступ к ролям. В любом случае, спасибо за усилия! - person Igor; 24.05.2012

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

person Francis Upton IV    schedule 24.05.2012