[英]transformations using XSLT/XQUERY in MarkLogic?
樣本XML:
let $xml := document {
<doc>
<p>sample</p>
<categories>
<category>comdey</category>
<category>drama</category>
</categories>
</doc>
}
碼:
let $xsl :=
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="ISO-8859-1" indent="no"/>
<xsl:template match="category">
<entertainment>
<xsl:apply-templates select="@*|node()"/>
</entertainment>
</xsl:template>
<xsl:template match="categories">
<entertainments>
<xsl:apply-templates select="@*|node()"/>
</entertainments>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
return xdmp:xslt-eval($xsl, $xml)
上面的代碼可以從MarkLogic查詢控制台執行,它將用“娛樂”代替“類別”,用“娛樂”代替“類別”。
但是,我們如何將其編寫為MarkLogic xslt轉換,可以使用REST API或Java API安裝和應用到保存在MarkLogic中的xml文件。
閱讀本文:通過JAVA API創建和安裝轉換的操作已經實現,並且正在MarkLogic網站中提供的示例內容轉換文件中運行。
問題是我們不清楚如何將xslt代碼轉換為MarkLogic指定的轉換方言。 我們確實嘗試了轉換,但是得到了錯誤(在底部提到)
Trail.xslt代碼:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:example="http://marklogic.com/rest-api/transform/trial"
xmlns:map="http://marklogic.com/xdmp/map">
<xsl:param name="context" as="map:map"/>
<xsl:param name="params" as="map:map"/>
<xsl:template match="genre">
<entertainment>
<xsl:apply-templates select="@*|node()"/>
</entertainment>
</xsl:template>
<xsl:template match="genres">
<entertainments>
<xsl:apply-templates select="@*|node()"/>
</entertainments>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我們將上面的代碼保存為Trail.xslt並嘗試安裝轉換,但是遇到一些錯誤,錯誤如下
錯誤:
HTTP Status 500 - Request processing failed; nested exception is com.marklogic.client.FailedRequestException: Local message: config/transforms write failed: Bad Request. Server Message: RESTAPI-INVALIDCONTENT: (err:FOER0000)
Invalid content: invalid trial extension: could not parse XQuery extension trial; please see the server error log for detail XDMP-IMPORTMOD: Cannot import Main Module /marklogic.rest.transform/trial/assets/transform.xqy; trial either is not a valid module or does not provide extension functions (transform) in the http://marklogic.com/rest-api/transform/trial namespace
簡而言之,您需要使用XSLT作為請求主體,對REST-api服務器對/ v1 / config / transforms / yourtransformname進行PUT調用。 詳細信息在這里描述:
重要的一點是,當您推送XSLT時,請確保證明以下標頭,否則可以假設它是XQuery,就像您的錯誤消息所假設的那樣:
Content-type: application/xslt+xml
到達那里后,您可以通過添加值為yourtransformname的轉換請求參數,將轉換應用於/ v1 / documents(GET,POST和PUT)以及/ v1 / search GET響應。 詳細信息在這里:
api參考文檔包含許多深入到用戶指南的鏈接。 這些通常也值得一讀。
HTH!
從錯誤消息中,看起來安裝程序正在使用* .xqy消息編寫轉換,這意味着安裝程序正在嘗試將轉換解析為XQuery。
是否有可能使用writeXQueryTransform()方法編寫轉換?
如果是這樣,請嘗試使用writeXSLTransform()方法:
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.