как на самом деле используется XQUERY? - PullRequest
5 голосов
/ 17 сентября 2008

Я много читал учебник по XQUERY на сайте. Почти все они учат меня синтаксису XQUERY. Допустим, я понял синтаксис XQUERY, как я собираюсь реализовать XQUERY на своем веб-сайте?

Например, у меня есть book.xml :

<?xml version="1.0" encoding="iso-8859-1" ?>
<books>
<book>
   <title>Doraemon</title>
   <authorid>1</authorid>
</book>
<book>
   <title>Ultraman</title>
   <authorid>2</authorid>
</book>
</books>

Тогда у меня есть author.xml

<?xml version="1.0" encoding="iso-8859-1" ?>
<authors>
<author id="1">Mr A</author>
<author id="2">Mr B</author>
</authors>

Я хочу создать HTML, который выглядит следующим образом:

<table>
    <tr>  <td>Title</td>     <td>Author</td> </tr>
    <tr>  <td>Doraemon</td>  <td>Mr A</td>   </tr>
    <tr>  <td>Ultraman</td>  <td>Mr B</td>   </tr>
</table>

Пожалуйста, покажите мне пример. Или любой сайт, на который я могу ссылаться. Большое спасибо.

Ответы [ 7 ]

4 голосов
/ 18 сентября 2008
(: file: titles.xqy :)
<table>
<tr><th>title</th><th>author</th></tr>
{
let $books-doc := doc("books.xml")
let $authors-doc := doc("authors.xml")
for $b in $books-doc//book,
    $a in $authors-doc//author
where $a/@id = $b/authorid
return 
<tr>
    <td>{$b/title/text()}</td>
    <td>{$a/text()}</td>
</tr>
}

3 голосов
/ 27 сентября 2008

Вам нужен сервер или библиотека для обработки XML в HTML. На мой взгляд, XQuery намного лучше, чем XSTL, когда вы имеете дело с чем-то немного сложным. Это намного более чистый язык. На этом сайте есть хороший список процессоров XQuery .

2 голосов
/ 21 сентября 2008

XQuery похож на SQL в том, что он позволяет вам извлекать определенные части данных из большого хранилища данных. SQL используется для реляционных баз данных (MS SQL Server, Oracle, Sybase, MySQL, PostreSQL, SQLite и т. Д.), А XQuery используется для баз данных XML (MARKLogic, Sedena, Qexo, Qizx / db и т. Д.).

MARKLogic предоставляет вам XDB-серверы и HTTP-серверы. Вы можете иметь обычный веб-сервер и подключаться к MARKLogic через XDB, или вы можете использовать их HTTP-сервер и напрямую смешивать ваш XQuery с вашим HTML.

Я предлагаю загрузить сервер разработчика MARKLogic (допускает 100 МБ документов) и попробовать его.

1 голос
/ 02 сентября 2011

Существует множество сценариев использования XQuery в настройках веб-сайта:

Динамическое создание страниц:

Вам понадобится библиотека, которая предоставляет API, который вы можете вызывать из своего серверного кода, это будет иметь место, если ваши данные XML хранятся, скажем, в обычной базе данных или в файловой системе. Например: Zorba предоставляет такой API для PHP, а также API XQuery для Java и т. Д.

Если ваши данные XML хранятся на сервере базы данных XML, который поддерживает XQuery, вы должны отправить запросы XQuery на сервер и получить результаты обратно. В этой категории есть много открытых и коммерческих продуктов. BaseX - это пример с открытым исходным кодом.

Генерация страниц статически:

Возможно, вы захотите сгенерировать некоторые HTML-страницы статически из данных XML. В этом случае вы можете запустить утилиту командной строки XQuery, например, Zorba, Saxon, BaseX и многие другие предоставляют такие инструменты CLI. Или вы также можете сделать это из своих собственных скриптов, используя API.

Затем вы должны определить правила в вашей системе сборки для выполнения этих команд или сценариев всякий раз, когда ваши данные XML изменяются.

В статическом и динамическом подходах вы можете настроить свою среду так, чтобы XQuery воспроизводил вашу систему шаблонов, например, вместо генерации целых страниц HTML с помощью XQuery, вы можете генерировать сегменты HTML на основе XML, а затем подключать их в ваши шаблоны.

Использование, отличное от преобразований:

Приведенные выше случаи касаются преобразования XML в HTML, но XQuery можно использовать другими способами в процессе веб-разработки. Один из способов, которым я нахожу это полезным, - это изменение документов XML. Скажем, у вас длинный XML-документ и вы хотите изменить значения полей или добавить поля или атрибуты - для этого вы можете использовать расширение XQuery Update Facility.

Надеюсь, это поможет. Я не обсуждал ваш пример, потому что полагаю, что это просто для пояснения.

1 голос
/ 21 августа 2011
1 голос
/ 20 сентября 2008

Честно говоря, может быть, вам вообще не нужно использовать XQuery.

Если вам нужно преобразовать умеренно сложные XML-документы из XML в HTML, я бы порекомендовал использовать XSL. Лично я нашел XSL легче в изучении, чем XQuery. В Интернете также доступно больше примеров и учебных пособий, поскольку XSL существует дольше.

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

0 голосов
/ 17 сентября 2008
<table>
<tr><td>Title<td><td>Author<td></tr>
{
    let $authordoc := fn:doc("author.xml")
    for $book in fn:doc("book.xml")/books/book
    return
        <tr>
                <td>{ $book/title }</td>
                <td>{ $authordoc/authors/author/[@id eq $book/authorid] }</td>
        </tr>
}
</table>

ps: не тестировал / не выполнял его, но так может выглядеть одно решение

...