0

xdmp:document-filter(doc(uri))ドキュメントからメタデータを取得するために使用しています。ドキュメントの 1 つでこのコマンドを実行すると、次の結果が得られます。

xdmp:document-filter(doc("/Vision.doc"))//*:meta[@name eq "Creation_Date"]/@content

<?xml version="1.0" encoding="UTF-8"?>
<results warning="attribute node">
  <warning warning="attributes cannot be root nodes" content="17-05-2012 00:48:00"/>
</results>

そして、このコマンドを別のドキュメントで実行すると、次のようになります:-

<?xml version="1.0" encoding="UTF-8"?>
<results warning="attribute node">
  <warning warning="attributes cannot be root nodes" content="2012-06-03T13:45:00Z"/>
</results>

両方の出力で日付形式が異なることがわかります。Marklogic サーバーにアップロードされたドキュメントの日付形式が異なる場合があります。しかし、ドキュメントの作成日を固定形式 (2012 年 5 月 16 日など) で表示したいと考えています。さまざまな日付形式を固定の日付形式に変換するにはどうすればよいですか? また、これらの日付をユーザーが入力した日付と比較したいと考えています。検索条件に一致するドキュメントは、検索クエリによって返される必要があります。だから私はここに2つの質問があります:-

  1. 特定のドキュメントの作成日を固定形式に変換し、UI に表示する方法。
  2. この作成日をユーザーが入力した日付 (「mm/dd/yyyy」形式) と比較して、正しい結果を得る方法。
4

2 に答える 2

2

dateTime 値を解析する必要があります。例えば:

let $dt := "17-05-2012 00:48:00"
return
  if ($dt castable as xs:dateTime)
  then xs:dateTime($dt)
  else xdmp:parse-dateTime("[Y01]-[M01]-[D01] [h01]:[m01]:[s01]", $dt)

xs:dateTimeこれは、UI で比較および表示できるアトミック値を返します。追加の形式をサポートする場合は、追加の解析「画像」文字列を作成して、xs:dateTime. 詳細については、ドキュメントを参照してxdmp:parse-dateTime()ください。

于 2012-07-25T21:05:45.433 に答える
1

大規模なオープン ソース プロジェクトの一環として、6 つの異なる言語で少なくとも 20 の異なる形式を処理する日付解析ライブラリを作成しました。まだ定義されていない場合は、独自の形式を指定することもできます。xs:dateTime定義された形式のいずれかの文字列として日付を入力し、正常に解析できた場合はを返すことで機能します。ライブラリは次の場所にあります。

https://github.com/marklogic/Corona/blob/master/corona/lib/date-parser.xqy

使用するには:

import module namespace dateparser="http://marklogic.com/dateparser" at "date-parser.xqy";

dateparser:parse($filteredDocument//*:meta[@name eq "Creation_Date"]/@content)

これにより、バイナリ ドキュメントが持つことができるさまざまな日付形式を正規化できます。異なるバイナリ形式 (Word、PDF、JPEG など) では、作成日に異なる名前が使用されることに注意してください。そのため、「Creation_Date」メタデータを探すだけでは、MarkLogic に保存している形式によっては穴が残る可能性があります。

また、時刻部分を除いて日付情報だけが必要な場合は、 を にキャストできることにも注意してxs:dateTimeくださいxs:date。そうすることで、おそらく良いことであるタイムゾーン情報が保持されます。

2 番目の質問については…</p>

これを行うにはさまざまな方法があり、MarkLogic のドキュメントの一部を読むことから始めることをお勧めします。以下をご覧になることをお勧めします。

http://docs.marklogic.com/guide/search-dev/rangequery

うまくいけば、クエリがどのように見える必要があるかが少し明らかになります。最も単純な形式では、おそらく最初にユーザーが提供した日付を解析する必要があります。これは、日付解析ライブラリでも実行できるため、ユーザーはさまざまな日付形式を入力できます (例: 2012 年 11 月 13 日、スペイン語の 2012 年 11 月 13 日など)。次に、その解析された日付を使用して、MarkLogic で日付範囲クエリを作成します。

それでも問題が解決しない場合は、ハングアップしている場所の詳細を記載した別の質問をここに投稿します。

于 2012-11-13T19:36:54.953 に答える