跳转到内容

XQuery/XMP 数据

来自维基教科书,开放世界中的开放书籍

Adobe 推出了一个用于图像元数据的 XML 格式,称为 XMP。 您想显示一张照片和一些元数据。

Matt Turner 有一个使用 MarkLogic 从 JPEG 图像中提取 XMP 数据的示例 [1]

eXist/ XQuery 实现

[编辑 | 编辑源代码]

以下是使用 eXist XQuery 扩展的代码。 Matt 的 " 照片 已存储在 XML 数据库中作为二进制文件。

显示完整的 XMP XML

[编辑 | 编辑源代码]

二进制图像从数据库中作为 BASE64 编码字符串检索,转换为 UTF-8 字符串,提取元数据文本并使用 util:parse() 转换回 XML

declare function local:extract-xmp ($jpeg as xs:string)  as item() {
let $binary := util:binary-doc($jpeg)
let $text := util:binary-to-string($binary)
let $xmp := substring-after($text,"<x:xmpmeta")
let $xmp := substring-before($xmp,"</x:xmpmeta>")     
let $xmp := concat("<x:xmpmeta",$xmp,"</x:xmpmeta>")
return util:parse($xmp) 
};

let $photo := request:get-parameter("photo",())
let $xmp := local:extract-xmp(concat("/db/Wiki/eXist/",$photo))
return
    $xmp

XMP XML

一些基本的 Dublin Core 元素

[编辑 | 编辑源代码]

这里我们提取一些 Dublin Core 元素并创建一个包含图像和元数据的 HTML 片段。

declare namespace dc="http://purl.org/dc/elements/1.1/";

declare function local:extract-xmp ($jpeg as xs:string)  as item() {
 .....
};

declare option exist:serialize "method=xhtml media-type=text/html";

let $photo := request:get-parameter("photo",())
let $xmp := local:extract-xmp(concat("/db/Wiki/eXist/",$photo))
return
 <div>
    <img src="../{$photo}"/>
    <ul>
         <li> Format : {string($xmp//dc:format)}</li>
         <li>Title: {string($xmp//dc:title)}</li>
         <li>Creator: {string($xmp//dc:creator)}</li>
    </ul>
</div>

基本的 Dublin Core 元素

华夏公益教科书