javascript - 可以在 Schematron 规则中使用外部脚本吗?

标签 javascript xml xslt schematron

有没有办法在 Schematron 规则文件中调用 Javascript 函数?

我很确定引擎获取规则文件并从中生成 XSLT,但我想知道我是否可以以某种方式在该规则文件中包含最终将在 XSLT 中结束的脚本?

除其他外,它对于涉及大量字符串解析的验证规则非常有用,例如:

<rule context="nar:versionCreated">
  <assert test="string-length(translate(substring(.,1, 1), '12','')) = 0">versionCreated is an iso date/time (r20a1).</assert>
  <assert test="string-length(translate(substring(.,2, 3), '0123456789','')) = 0">versionCreated is an iso date/time (r20a2).</assert>
  <assert test="substring(.,5, 1) = '-'">versionCreated is an iso date/time (r20a3).</assert>
  <assert test="string-length(translate(substring(.,6, 1), '01','')) = 0">versionCreated is an iso date/time (r20a4).</assert>
  <assert test="string-length(translate(substring(.,7, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a5).</assert>
  <assert test="substring(.,8, 1) = '-'">versionCreated is an iso date/time (r20a6).</assert>
  <assert test="string-length(translate(substring(.,9, 1), '0123','')) = 0">versionCreated is an iso date/time (r20a7).</assert>
  <assert test="string-length(translate(substring(.,10, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a8).</assert>
  <assert test="substring(.,11, 1) = 'T'">versionCreated is an iso date/time (r20a9).</assert>
  <assert test="string-length(translate(substring(.,12, 1), '012','')) = 0">versionCreated is an iso date/time (r20a10).</assert>
  <assert test="string-length(translate(substring(.,13, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a11).</assert>
  <assert test="substring(.,14, 1) = ':'">versionCreated is an iso date/time (r20a12).</assert>
  <assert test="string-length(translate(substring(.,15, 1), '012345','')) = 0">versionCreated is an iso date/time (r20a13).</assert>
  <assert test="string-length(translate(substring(.,16, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a14).</assert>
  <assert test="substring(.,17, 1) = ':'">versionCreated is an iso date/time (r20a15).</assert>
  <assert test="string-length(translate(substring(.,18, 1), '012345','')) = 0">versionCreated is an iso date/time (r20a16).</assert>
  <assert test="string-length(translate(substring(.,19, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a17).</assert>
  <assert test="substring(.,20, 1) = 'Z' or substring(.,20, 1) = '+' or substring(.,20, 1) = '-'">versionCreated is an iso date/time (r20a18).</assert>
  <assert test="string-length(translate(substring(.,21, 1), '012345','')) = 0">versionCreated is an iso date/time (r20a19).</assert>
  <assert test="string-length(translate(substring(.,22, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a20).</assert>
  <assert test="substring(.,23, 1) = ':' or substring(.,23, 1) = ''">versionCreated is an iso date/time (r20a21).</assert>
  <assert test="string-length(translate(substring(.,24, 1), '012345','')) = 0">versionCreated is an iso date/time (r20a22).</assert>
  <assert test="string-length(translate(substring(.,25, 1), '0123456789','')) = 0">versionCreated is an iso date/time (r20a23).</assert>
</rule>

然后把它变成类似这样的东西:

<rule context="nar:versionCreated">
  <assert test="jscript:IsISOFormattedDateTime(.)">versionCreated is not a properly formatted date/time.</assert>
</rule>

感谢您的帮助。

最佳答案

我相信您正在寻找 abstract patterns .它不是脚本,但您可以重复使用模式。

我也发现了这个问题Formatting a Date (Sharepoint Designer) 因此,您可能会尝试从 Sharepoint 中提取架构并在 schematron 中重用它。

关于javascript - 可以在 Schematron 规则中使用外部脚本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573741/

相关文章:

Javascript XML 对象 - 未定义

java - 如何删除工具栏底部边距?

c# - LINQ to Dictionary - 使用 XML

javascript - 从 javascript 在浏览器 (Chrome) 中播放声音

javascript - 如何让文字和视频一起流动

xml - 使用 XSLT 转换特定 XML 文档

xml - 在 XML + XSLT 中保持实体完整

XSLT - 使用复制命名空间时,未引用的命名空间仍会传播 ="no"

javascript - 如何在不刷新页面的情况下在前端显示更新的数据?

javascript - 如何将 javascript 应用于使用 append() 创建的元素?