При правильном объявлении <sch:ns/>
для cts
и dohickey
я могу вызывать функции API MarkLogic, такие как cts:*
, из скомпилированного Schematron следующим образом (что, кстати, круто):
<sch:rule context="dohickey:thingummy">
<sch:let name="this-id" value="dohickey:meta/dohickey:id/string()"/>
<sch:let name="known-ids" value="cts:element-values(xs:QName('dohickey:id'))"/>
<sch:report test="$this-id = $known-ids">Warning: This id is known, and that's a business error</sch:report>
</sch:rule>
(Пожалуйста, не обращайте внимания на то, что переменная $known-ids
будет оптимизирована для блокировки одного значения в реальной жизни, вместо того, чтобы возвращать их все --- ради примера)
Теперь я хотел бы включить пользовательские модули XQuery в свой Schematron так же, как я могу вызвать cts:*
в приведенном выше примере, и таким же образом я могу вызывать функции библиотеки XQuery при работе с необработанным XSLT и интеграцией MarkLogic XSLT / XQuery путем определение, например, значения xsl:stylesheet/@extension-element-prefixes
, за которым следует соответствующий <xdmp:import-module/>
.
Пример: я бы хотел сделать следующее:
<sch:rule context="dohickey:thingummy">
<sch:let name="this-id" value="dohickey:meta/dohickey:id/string()"/>
<sch:let name="is-flagged-for-revision" value="mycustommodule:is-flagged-for-revision($this-id)"/>
<sch:report test="$is-flagged-for-revision">Warning: This id has been flagged for revision</sch:report>
</sch:rule>
Вопрос: есть ли в настоящее время способ добиться того, чтобы поведение компиляции MarkLogic schematron:put
включало импорт настраиваемых модулей XQuery, аналогично поддержке <xdmp:import-module/>
XSLT от MarkLogic? Или я должен просто реализовать оболочку, которая преобразует скомпилированный результат schematron:put
, чтобы включить то, что мне нужно, в скомпилированный XSLT?
xdmp:node-insert-child
.. - person grtjn   schedule 25.11.2019