2

次のような XML ファイルから情報を抽出するために、いくつかの xpath 式を使用しようとしています (これは OAI-PMH プロトコル応答です)。

<?xml version="1.0" encoding="UTF-8"?>

<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/
                             http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
  <responseDate>2013-10-11T09:24:55Z</responseDate>
  <request verb="ListRecords" metadataPrefix="oai_dc">http://request.url.com/oai</request>
  <ListRecords>
    <record>
      <header>
        <identifier>oai:identifier:item1</identifier>
        <datestamp>2012-06-07T12:03:53Z</datestamp>
        <setSpec>set:identifier</setSpec>
      </header>
      <metadata>
        <oai_dc:dc
            xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
                                http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
          <dc:title xml:lang="en-US">Title</dc:title>
          <dc:creator>creator</dc:creator>
          <dc:description xml:lang="en-US">abstract</dc:description>
          <dc:publisher xml:lang="en-US">publisher</dc:publisher>
          <dc:contributor xml:lang="en-US"></dc:contributor>
          <dc:date>2011-10-18</dc:date>
          <dc:type xml:lang="en-US"></dc:type>
          <dc:format>application/pdf</dc:format>
          <dc:identifier>identifier</dc:identifier>
          <dc:source xml:lang="en-US">source</dc:source>
        </oai_dc:dc>
      </metadata>
    </record>
    <record>
     ...
    </record>
     ...
  </ListRecords>
</OAI-PMH>

最終的には、これを行うためにいくつかの Java コードを作成する必要がありますが、xpath と名前空間について詳しく知りたいので、コマンド ライン ツール xqilla を使用します。

いくつかの調査 (例: this ) と多くの試行の失敗の後、次の式を試しました。

//*[local-name()='title']

しかし、次のエラーが表示されます。

:1:22: error: No namespace for prefix 'xs' [err:XPST0081]

誰かが私を正しい方向に向けてもらえますか? xqillaのドキュメントは、これまでのところあまり役に立ちませんでした。

ありがとう。

編集: タイトルはここで尋ねられているものと正確に一致しないため、フォローアップ (およびより一般的な) 質問は、xqilla を使用して一般的に名前空間を定義する方法です。式を試してみると:

//dc:title

私が得るエラーは

/tmp/foo.xq:1:3: error: No namespace for prefix 'dc' [err:XPST0081]

次のように xqilla を実行しています。

xqilla -p -i oai_response.xml foo.xq
4

1 に答える 1

3

XQilla は XPath を実行できますが、デフォルトでは XQuery を使用します。

次のような xquery ファイルを作成できます。例: my.file.xquery

declare namespace dc="http://purl.org/dc/elements/1.1/";
doc("my.file.xml")//dc:title

そして、それを実行します

xqilla my.file.xquery

xpath のみを使用する場合、名前空間を指定する方法がわかりません。できることは、名前空間のワイルドカードを使用することです。これを my.file.xpath に入れてください

//*:title

そして、それを実行します

xqilla -p -i my.file.xpath my.file.xml
于 2014-09-19T08:25:56.067 に答える