我们需要使用Java Client API或REST API在MarkLogic中存储和检索格式良好的HTML5文档。
每个文档都有一个' .html'扩展名和标准HTML5 doctype。插入文档时,默认情况下它们将存储为文本文档。
我们希望利用MarkLogic为文档的搜索和操作提供的所有优点,就像它们是XHTML一样,但我们需要保留HTML5 doctype和.html扩展名以与其他工具兼容。我相信我们并不是唯一遇到这种情况的人。
我们已尝试将HTML mimetype更改为XML,但是在插入文档时,doctype将替换为XML doctype。有没有办法插入和检索格式良好的HTML5文档而不会丢失doctype?
答案 0 :(得分:1)
没有本地方法可以将doctype保留在数据库中(XQuery不支持doctypes)。但是,使用某些逻辑,您可以在请求文档时添加文档类型。
例如:
declare function local:get-with-doctype(
$document as document-node()
) as xs:string
{
if (ends-with(xdmp:node-uri($document), '.html')
then document {
text{ '<!DOCTYPE html>' },
xdmp:quote($document)
}
else $document
};
或者,您可以在插入文档时将文档类型解析出来并将其存储在文档属性中。然后,当请求文档时,您始终可以从属性中添加该文档。但是,如果您需要处理许多文档类型,那可能是值得的。
答案 1 :(得分:1)
在WST的答案上稍微扩展一下,您可以将文档存储为XHTML并使用
在REST API转换中进行转换REST API的可能XQuery转换:
xquery version "1.0-ml";
module namespace html5ifier =
"http://marklogic.com/rest-api/transform/html5ifier";
declare default function namespace "http://www.w3.org/2005/xpath-functions";
declare option xdmp:mapping "false";
declare function html5ifier:transform(
$context as map:map,
$params as map:map,
$content as document-node()
) as document-node()
{
map:put($context,"output-type","text/html"),
document{text{
xdmp:quote($content,
<options xmlns="xdmp:quote">
<method>html</method>
<media-type>text/html</media-type>
<doctype-public>html</doctype-public>
</options>)
}}
};
如果您的REST服务器在端口8011上,您将使用PUT请求安装转换:
http://localhost:8011/v1/config/transforms/html5ifier
然后,您可以使用转换
将持久化的XHTML文档作为HTML5获取http://localhost:8011/v1/documents?uri=/path/to/the/doc.xhtml \ &transform=html5ifier
您可以在转换中对XHTML文档进行其他更改(引用前的XML或引用后的字符串)。
另见: