2008-09-17 14 views
5

私はウェブサイト上で多くのXQUERYチュートリアルを読んでいます。それらのほとんどすべてが私に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> 

いくつかの例を示してください。または私が参照することができる任意のウェブサイト。どうもありがとう。

答えて

0
<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:テストしていない/それを実行したが、これは、多分あなたは使用する必要はありません一つの解決策は完全に正直に言うと

+0

私はそれをテストしていませんが、@ id = $ book/authoridが必要だと思っています。これらのケースでeqがどのように比較されているかわからない - 値ではなく参照を比較すると思う。 – Tirno

3
(: 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> 
} 

1

ように見える可能性がどのようですXQueryはまったくありません。

複雑なXML文書をXMLからHTMLに変換する必要がある場合は、XSLの使用をお勧めします。個人的には、XSLはXQueryよりも簡単に学ぶことができました。また、XSLの使用期間が長くなっているため、オンラインで利用可能なサンプルとチュートリアルが多数あります。

XQueryは、私たちがライセンスを取得した特殊なXMLソフトウェアの一部として必要とされるため、XQueryを現在使用しています。 XQueryは大きなリポジトリからXMLを選択するための素晴らしいツールですが、XSLを使用してドキュメントを変換しています。

2

XQueryは、大規模なデータリポジトリから特定のデータ部分を取得できる点でSQLと似ています。 SQLはリレーショナルデータベース(MS SQL Server、Oracle、Sybase、MySQL、PostreSQL、SQLiteなど)に使用され、XQueryはXMLデータベース(MARKLogic、Sedena、Qexo、Qizx/dbなど)に使用されます。

MARKLogicはXDBサーバーとHTTPサーバーを提供します。一般的なWebサーバーを使用し、XDBを通じてMARKLogicに接続するか、HTTPサーバーを使用してXQueryをHTMLと直接ミックスすることができます。

MARKLogicの開発者用サーバー(100MBのドキュメントを許可)をダウンロードし、試してみることをお勧めします。

+0

OracleやSql ServerなどのリレーショナルデータベースもXQueryをサポートしています。 – tuinstoel

3

xmlをhtmlに処理するには、サーバーまたはライブラリが必要です。私の意見では、XQueryはXSTLよりもはるかに複雑なものを扱っているときにこの種のものより優れています。それはもっときれいな言語でもあります。このウェブサイトはa nice list of XQuery processorsです。

1

をサーバー側のコードから呼び出せるAPIを提供するライブラリです。XMLデータが格納されている場合は、通常のデータベースeまたはファイルシステム上で実行されます。たとえば、ZorbaはPHP用のAPIを提供していますが、Java用のXQuery APIなどがあります。

XMLデータがXQueryをサポートするXMLデータベースサーバーに格納されている場合は、サーバーにXQueryクエリを発行します結果を戻してください。このカテゴリには多くのオープンソースと商用製品があります。 BaseXはオープンソースの例です。

静的ページを生成:

をあなたは静的XMLデータからHTMLページの一部を生成したい場合があります。この場合、Zorba、Saxon、BaseXなどのコマンドラインXQueryユーティリティを実行できますが、他の多くのツールでこのようなCLIツールを提供しています。または、APIを使用して独自のスクリプトから実行することもできます。

次に、XMLデータが変更されたときにいつでも、これらのコマンドまたはスクリプトを実行するようにビルドシステムにルールを定義します。

静的アプローチと動的アプローチの両方で、XQueryでHTMLページ全体を生成する代わりに、XQueryをテンプレートシステムとともに使用するように環境を設定し、XMLに基づいてHTMLセグメントを生成してからそれらをテンプレートに接続します。

は、変換以外を使用します:

上記の例は、XMLをHTMLに変換する程度ですが、XQueryはWeb開発プロセスの他の方法で使用することができます。 XML文書を変更すると便利です。長いXML文書があり、フィールド値を変更したり、フィールドや属性を追加したりする場合は、XQuery Update Facility拡張機能を使用してそれを実現できます。

これが役に立ちます。私はあなたの事例を議論しませんでした。

関連する問題