XQuery несколько XML-файлов?

Приведенный ниже код помогает сохранить растровое изображение в галерее.

public static void addImageToGallery (final String filePath, final Context context) {

    ContentValues values = new ContentValues();

    values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
    values.put(MediaStore.MediaColumns.DATA, filePath);

    context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
8
задан cgreeno 9 February 2009 в 17:33
поделиться

2 ответа

Да, вот пример от спецификации XQuery.:

"Соединения, которые комбинируют данные из многочисленных источников в единственный результат, являются очень важным типом запроса. В этом разделе мы проиллюстрируем, как несколько типов соединений могут быть выражены в XQuery. Мы будем основывать наши примеры на следующих трех документах:

  1. Документ называют parts.xml это содержит многих part элементы; каждый part элемент в свою очередь содержит partno и description подэлементы.
  2. Документ называют suppliers.xml это содержит многих supplier элементы; каждый supplier элемент в свою очередь содержит suppno и suppname подэлементы.
  3. Документ называют catalog.xml это содержит информацию об отношениях между поставщиками и частями. Документ каталога содержит многих item элементы, каждый из которых в свою очередь содержит partno, suppno, и price подэлементы.

Стандартное ("внутреннее") соединение возвращает информацию из двух или больше связанных источников, как проиллюстрировано следующим примером, который комбинирует информацию из трех документов. Пример генерирует "описательный каталог", полученный на основании документа каталога, но содержащий описания детали вместо номеров деталей и имена поставщика вместо чисел поставщика. Новый каталог заказан в алфавитном порядке описанием детали и во вторую очередь именем поставщика.*

<descriptive-catalog>
   { 
     for $i in fn:doc("catalog.xml")/items/item,
         $p in fn:doc("parts.xml")/parts/part[partno = $i/partno],
         $s in fn:doc("suppliers.xml")/suppliers
                  /supplier[suppno = $i/suppno]
     order by $p/description, $s/suppname
     return
        <item>
           {
           $p/description,
           $s/suppname,
           $i/price
           }
        </item>
   }
</descriptive-catalog>

Предыдущий запрос возвращает информацию только о частях, которые имеют поставщиков и поставщиков, которые имеют части. Внешнее объединение является соединением, которое сохраняет информацию из одного или нескольких участвующих источников, включая элементы, которые не имеют никакого элемента соответствия в другом источнике. Например, левое внешнее объединение между поставщиками и частями могло бы возвратить информацию о поставщиках, которые не имеют никаких частей соответствия."

Обратите внимание, что XQuery не имеет стандартного документа () функцией (это - функция XSLT), и вместо этого имеет документ () функция, которая является частью "XQuery 1.0 и Функций XPath 2.0 и Операторов".

Существует по крайней мере две ошибки в ответе Chris:

  1. XQuery чувствителен к регистру - капитализированные ключевые слова, используемые в примере Chris, не будут позволены соответствующим процессором XQuery.
  2. Не необходимо снабдить префиксом стандартные функции как документ (), я просто заключаю в кавычки спецификацию XQuery, которая имеет префикс. Иначе в моем собственном коде я опустил бы"fn"префикс.
  3. Функциональный документ () не является стандартной функцией XQuery/XPath. Документ () функция должен использоваться вместо этого.
11
ответ дан 5 December 2019 в 13:02
поделиться

В XQuery, если Вы пишете что-то как следующее:

for $x in doc('doc1.xml')//a
for $y in doc('doc2.xml')//a
where $x/@name = $y/@name
return $x

затем Ваш процессор XQuery должен быть достаточно умным для определения этого, это - соединение.

Вы никогда явно указываете в XQuery, что что-то - соединение. Общая тема в XQuery - то, что в Вашей программе говорится, какую информацию Вы хотите, не, как вычислить его.

Хотя может быть похоже, что Вы неоднократно - цикличное выполнение по второму документу на практике, реальный процессор XQuery выполнил бы это более разумно, примерно аналогичный следующему SQL-оператору (мой SQL очень ржав, таким образом, я приношу извинения, является ли этот синтаксис абсолютно неправильным),

SELECT doc1.a
FROM doc1 INNER JOIN doc2
WHERE doc1.name = doc2.name

Сравнительный тест XMark содержит несколько демонстрационных запросов, они определенно стоят взгляда. В особенности запросы 9 - 12 выполняют соединения.

0
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: