、serialization method "basex"は現在、デフォルトの直列化の方法として使用されます。結果として、タイプxs:base64Binaryおよびxs:hexBinaryの項目は、BaseX GUIであってもネイティブバイナリ表現で出力されるようになりました。
出力メソッドを変更するのは、古い "生"直列化メソッドと、ネイティブ表現でバイナリデータ(ファイルコンテンツなど)を返さなかったRESTXQやその他のAPIに関するユーザーからのフィードバックを繰り返した結果です。チャールズ・ダフィーが既に示されているように、あなたはまた、バイナリの六角またはBase64の表現を見ることがxs:string()
かstring()
を使用することができます
declare option output:method 'text';
hash:md5('abc')
:あなたが進またはBASE64などのバイナリデータの出力を持っているしたい場合は、別の出力方法に切り替えることができますデータ。ドキュメンテーションのさまざまな例が更新されました(皆さん、気軽にWikiに登録してください!)。
パフォーマンス面では、バイナリデータを比較すると文字列表現を比較するよりもはるかに高速になります。 BaseXのHashing Moduleは、xs:base64Binary型の項目を生成します(バイナリデータを処理するXQueryの他のほとんどの標準関数または拡張関数と同様)。ただし、XQuery仕様では16進数とBase64を直接比較することはできません。したがって、16進数をBase64に変換する必要があります。 BaseX(および他のほとんどのXQuery実装)では、内部バイト表現が同一であるため、これは非常に安価です。例:BaseXの最新8.4.4 snapshotで
let $hash := '900150983CD24FB0D6963F7D28E17F72'
let $input := 'abc'
return xs:hexBinary(hash:md5($input)) = xs:hexBinary($hash)
、ハッシュ関数の入力としてノードを指定することが可能であるので、文字列に要素をキャストするもう必要がなくなる。
興味深い
let $hash := '900150983CD24FB0D6963F7D28E17F72'
let $toHashElem := <x>abc</x>
return xs:hexBinary(hash:md5($toHashElem)) = xs:hexBinary($hash)
- これは、8.3.xから8.4.4の間で、GUIの動作が悪化した場所です。以前は、すぐに使用できる 'xs:* Binary'データ型の' xs:string'レンダリングを使用していました。 (私はこれが "バグ"であるとは確信していません。それは、現行の行動が違反していることが証明されていることを認識していないからです。 –