Я очень новшество для технологий баз данных XML, Xquery/Xpath и т. Д. Так что это, вероятно, очень новичок вопрос.Как сохранить результаты XQuery в качестве нового документа в BaseX
Сценарий: на эти XML-документы (с использованием XQuery) можно запустить несколько XML-документов в качестве ввода, которые хотят запустить некоторое количество преобразований. Я хотел бы сохранить эти результаты. В том же хранилище данных XML, что и вход.
До сих пор я экспериментирую с использованием базы данных документов BaseX для хранения и обработки этих XML-документов, и до сих пор с ней было очень легко работать, я впечатлен.
В идеале я хотел бы взаимодействовать с BaseX с помощью XQJ API (http://xqj.net/basex/), поскольку мои рассуждения состоят в том, что XQJ будет поддерживать реализацию кода приложения независимо от BaseX, как может быть. Вторичный вариант будет писать мой Java-код непосредственно в BaseX API.
Проблема: Мне трудно понять, как сохранить результаты из XQuery в качестве нового «документа» в базе данных. Возможно, это скорее концептуальное отсутствие понимания с XQuery (или XQuery Update), чем любая проблема с API BaseX/XQJ.
В этом простом примере, если у меня есть запрос, как это, он возвращает некоторый вывод XML с в формате, который я хочу для моего нового документа
let $items := //firstName
return <results>
{ for $item in $items
return <result> {$item} </result>
}
</results>
дает
<results>
<result>
<firstName>Bob</firstName>
</result>
<result>
<firstName>Joe</firstName>
</result>
<result>
<firstName>Tom</firstName>
</result>
</results>
Я хочу сохраните этот новый документ <result>
обратно в базу данных, для использования в последующих запросах/преобразованиях и т. д. В SQL это имеет смысл для меня. Я бы сделал CREATE TABLE <name> SELECT <query>
или INSERT INTO
и т. Д. Но я не понимаю, что эквивалентно в XQuery. Я думаю, что функция XQuery Update - это то, что мне нужно здесь, но мне трудно найти конкретные примеры.
Это еще сложнее, когда дело с XQJ
XQResultSequence rs = xqe.executeQuery("//firstName");
// what do i do with it now??
Есть ли способ сохраняться этот XQResultSequence обратно в базу данных с помощью Basex? Или еще лучше, могу ли я запустить дополнительные XQueries непосредственно на XQResultSequence?
Спасибо за помощь!
Спасибо, используя функцию «fn: put» для меня. По крайней мере, я могу получить выходной файл * .xml, но похоже, что мне придется затем импортировать полученный файл обратно в базу данных для дальнейшей обработки. Есть ли способ пропустить этот промежуточный шаг? – barab157
Я думаю, что нашел хорошее решение, используя пример клиента Java Base Base \t \t 'String results = session.execute (" xquery "+ QUERY_STRING); \t \t \t session.add ("Результаты/Results.xml", новый ByteArrayInputStream (results.getBytes())); ' – barab157
@ barab157 То, что я собирался предложить просто делать все, что нужно в одном запросе. Это вопрос предпочтения, но я думаю, что чистое отделение от базы данных и промежуточного программного обеспечения делает приложения более удобными и эффективными. Но если вы нашли хороший способ сделать это на Java, пожалуйста, продолжайте и разместите свой ответ здесь. – wst