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