Eric van der Vlist 的 RelaxNG 简化的局限性

发布于 2024-10-19 12:41:09 字数 1382 浏览 0 评论 0原文

所有,

我正在尝试使用 Eric van der Vlist 的 simplification.xsl< 来简化 RelaxNG 模式/a>,但我收到错误:

runtime error: file ./simplification.xsl line 741 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 751 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.

它似乎与动态构造的某些名称有关:

<xsl:template match="rng:start[not(preceding-sibling::rng:start) and following-sibling::rng:start]" mode="step7.18">
        <xsl:copy>
                <xsl:apply-templates select="@*" mode="step7.18"/>
                <xsl:element name="{parent::*/rng:start/@combine}">
                        <xsl:call-template name="start7.18"/>
                </xsl:element>
        </xsl:copy>
</xsl:template>

我还没有开始更深入地研究它,但也许有人已经知道可能导致此问题的原因。

All,

I am trying to simplify a RelaxNG schema using Eric van der Vlist's simplification.xsl, but I'm getting errors:

runtime error: file ./simplification.xsl line 741 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 751 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.
runtime error: file ./simplification.xsl line 759 element element
xsl:element: The effective name '' is not a valid QName.

It seems it has something to do with some names getting constructed dynamically:

<xsl:template match="rng:start[not(preceding-sibling::rng:start) and following-sibling::rng:start]" mode="step7.18">
        <xsl:copy>
                <xsl:apply-templates select="@*" mode="step7.18"/>
                <xsl:element name="{parent::*/rng:start/@combine}">
                        <xsl:call-template name="start7.18"/>
                </xsl:element>
        </xsl:copy>
</xsl:template>

I haven't started getting into it any deeper, but perhaps someone already has a clue on what might be causing this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤君无依 2024-10-26 12:41:09

有什么理由不使用 jing -s 来代替吗?

Is there some reason not to use jing -s instead?

清风挽心 2024-10-26 12:41:09

显然,我不是第一个遇到这些问题的人。 此网站还提到了运行 simplification.xsl 时出现的一些问题,并包含一些修复。我只是把它复制在这里,以供将来参考。

  • 在第 10 步中: 行中缺少前缀“rng:”输出中带有带有默认命名空间(不是 RelaxNG)的标记
  • 在步骤 14 中:在行中的“combine”属性值之前添加前缀“rng:”的串联 .
  • 在步骤 14 中:在模板中 我删除了元素添加 因为它会产生额外的 包围 内的另一个
  • 在第 15 步中:似乎模板 的优先级高于模板 ,所以我必须添加精度:。< /里>
  • 在步骤 15 中:擦除模板中缺少 "rng:parentRef/@name" 以保留 的“name”属性中生成的 id。


在给定网站中复制我原来的 RelaxNG 语法后,整个转换完成,没有任何问题。

Apparently, I wasn't the first one to run into these issues. This web site also refers to some problems running simplification.xsl, and includes some fixes. I'm just copying it in here, for future reference.

  • In step 10 : prefix "rng:" was missing in lines <xsl:with-param name="node-name" select="'rng:group'"/> resulting with markups <group> with default namespace (which is not RelaxNG) in output.
  • In step 14 : add concatenation of prefix "rng:" before value of "combine" attributes in lines <xsl:param name="node-name" select="concat('rng:',parent::*/rng:start/@combine)"/>.
  • In step 14 : In template <xsl:template match="rng:start[not(preceding-sibling::rng:start) and following-sibling::rng:start]"> I removed the element addition <xsl:element name="{parent::*/rng:start/@combine}"> because it results to an extra <rng:choice> surrounding the other <rng:choice> inside the <rng:start>.
  • In step 15 : seems that template <xsl:template match="/*"> has a higher priority than template <xsl:template match="/rng:grammar">, so I had to add a precision : <xsl:template match="/*[not(self::rng:grammar)]">.
  • In step 15 : missing "rng:parentRef/@name" in erasing template : <xsl:template match="rng:define|rng:define/@name|rng:ref/@name|rng:parentRef/@name"/> in order to keep the id generated in "name" attribute of <parentRef>.

After copying in my original RelaxNG grammar in the given web site, the whole transformation completes without any problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文