Xquery 如何在BaseX中记录任务开始时间和任务结束时间

Xquery 如何在BaseX中记录任务开始时间和任务结束时间,xquery,basex,Xquery,Basex,嗨,我正在进行摄入和验证,但我想记录摄入和验证的开始时间和结束时间。下面是我的代码我做错了什么请建议 let $pipelineXml := <pipeline id='a111' name='ACH-export' xmlns='http://cms.bloomsbury.com/pipeline'> <transform href='/transforms/docbook2xml.xsl'/> <validate href='/validation/t

嗨,我正在进行摄入和验证,但我想记录摄入和验证的开始时间和结束时间。下面是我的代码我做错了什么请建议

let $pipelineXml := 
<pipeline id='a111' name='ACH-export' xmlns='http://cms.bloomsbury.com/pipeline'>
  <transform href='/transforms/docbook2xml.xsl'/>
  <validate href='/validation/taxonomy.sch' failOnError='true'/>
</pipeline>
let $reportChunk := <report>
                            <info>
                                <id>{$pipelineXml//@id}</id>
                                <name>{$pipelineXml//@name}</name>
                                <submitted-on>{fn:current-dateTime()}</submitted-on>
                                <user>{user:current()}</user>
                            </info>
                            <ingestion-report>
                                <steps/>
                            </ingestion-report>
                        </report>
let $startTime  := fn:current-dateTime()
let $validate   := validate:rng-report($pipelineXml, bin:decode-string(db:retrieve($config:Database, fn:concat($config:ValidationDir,$config:PipelineRelaxNG)),'UTF-8'), fn:true())
return
if($validate/status='valid')
        then
    (

      admin:write-log("[" || "][Pipeline is valid as per Relax NG : " || $pipelineXml//@id || "]")
            ,
            let $appendReport :=    let $updateReport := <step>
                                                            <type>RELAX NG Validation</type>
                                                            <started-on>{$startTime,prof:sleep(20000)}</started-on>
                                                            <completed-on>{fn:current-dateTime()}</completed-on>
                                                            <status>Pass</status>
                                                            <error></error>
                                                        </step>
                                    return
                                    copy $target := $reportChunk
                                    modify insert node $updateReport as last into $target/ingestion-report/steps
                                    return $target


                  return $appendReport
    )
    else "error"
let$pipelineXml:=
let$reportChunk:=
{$pipelineXml/@id}
{$pipelineXml/@name}
{fn:current-dateTime()}
{user:current()}
让$startTime:=fn:current-dateTime()
让$validate:=validate:rng报告($pipelineXml,bin:decode字符串(db:retrieve($config:Database,fn:concat($config:ValidationDir,$config:PipelineRelaxNG)),'UTF-8'),fn:true()
返回
如果($validate/status='valid')
然后
(
管理员:写入日志(“[”| |“][管道根据Relax NG有效:“| |$pipelineXml/@id | |“]))
,
let$appendReport:=let$updateReport:=
RELAX NG验证
{$startTime,教授:睡眠(20000)}
{fn:current-dateTime()}
通过
返回
复制$target:=$reportChunk
将插入节点$updateReport作为最后一个修改到$target/摄取报告/步骤中
返回$target
返回$appendReport
)
“错误”

你好,达曼德拉·库马尔·辛格

current-Time()
函数是一个所谓的确定性函数,可转换为:

[定义]保证产生相同结果的函数· 单个·执行范围内重复调用的结果·如果 显式参数和隐式参数相同,称为 确定性。

也就是说,您的
startTime
endTime
是相同的

不过,根据您的实际需要,您有几种可能性:

  • 您可以使用
    prof:current ns
    (这是一个非确定性函数)获取时间戳,并使用该值计算时间:
  • 或者您可以使用内置的计时功能
    prof:time
    ,它记录执行所需的时间:

    你可以这样写:

    let $rng := <element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
      <zeroOrMore>
        <element name="card">
          <element name="name">
            <text/>
          </element>
          <element name="email">
            <text/>
          </element>
        </element>
      </zeroOrMore>
    </element>
    
    let $doc := <addressBook>{
     for $i in 1 to 1000
      return <cards>
        <name>John Smith</name>
        <email>js@example.com</email>
      </cards>
    }
    </addressBook>
    
    
    let $report      := prof:time(validate:rng-report($doc, $rng), true(), 'RNG Validation ')
    let $report-size := prof:time(count($report//*) , true(), 'Counting ')
    return $report
    
    let$rng:=
    让$doc:=


    旁注:
    bin:decode字符串(db:retrieve…
    部分用于什么?
    您可能希望将其替换为
    db:open(“…文件路径…”)
    并将RELAXNG模式存储为XML文件而不是二进制文件

    感谢您的回复Michael,但我的要求是以2017-09-04T17:17:14.989+05:30格式存储时间2017-09-04T17:17:14.989+05:30,仅此而已,如果您在这方面提供了帮助,我如何在当前代码中实现这一点?我得到了解决方案感谢指南Michael:我已将fn:current date替换为time将DATETIME调整为TimeZORE(转换:整型到DATEIME(PROF:Curruts-())):-如果您有帮助的话,您可以考虑接受我的答案。
    let $rng := <element name="addressBook" xmlns="http://relaxng.org/ns/structure/1.0">
      <zeroOrMore>
        <element name="card">
          <element name="name">
            <text/>
          </element>
          <element name="email">
            <text/>
          </element>
        </element>
      </zeroOrMore>
    </element>
    
    let $doc := <addressBook>{
     for $i in 1 to 1000
      return <cards>
        <name>John Smith</name>
        <email>js@example.com</email>
      </cards>
    }
    </addressBook>
    
    
    let $report      := prof:time(validate:rng-report($doc, $rng), true(), 'RNG Validation ')
    let $report-size := prof:time(count($report//*) , true(), 'Counting ')
    return $report