1

全部,

我正在尝试使用Eric van der Vlist 的 simplification.xsl来简化 RelaxNG 模式,但出现错误:

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>

我还没有开始更深入地研究它,但也许有人已经对可能导致这种情况的原因有所了解。

4

2 回答 2

3

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

于 2011-03-01T19:18:31.467 回答
1

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

  • 在第 10 步中:行中缺少前缀“rng:”,<xsl:with-param name="node-name" select="'rng:group'"/>导致<group>输出中带有默认命名空间(不是 RelaxNG)的标记。
  • 在步骤 14 中:在 lines 中的“combine”属性值之前添加前缀“rng:”的连接<xsl:param name="node-name" select="concat('rng:',parent::*/rng:start/@combine)"/>
  • 在第 14 步:在模板<xsl:template match="rng:start[not(preceding-sibling::rng:start) and following-sibling::rng:start]">中,我删除了元素添加,因为它<xsl:element name="{parent::*/rng:start/@combine}">导致在.<rng:choice><rng:choice><rng:start>
  • 在第 15 步:似乎模板<xsl:template match="/*">的优先级高于模板<xsl:template match="/rng:grammar">,所以我不得不添加一个精度:<xsl:template match="/*[not(self::rng:grammar)]">
  • "rng:parentRef/@name"第15步:擦除模板中的缺失:<xsl:template match="rng:define|rng:define/@name|rng:ref/@name|rng:parentRef/@name"/>为了保留在“name”属性中生成的id <parentRef>

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

于 2011-02-24T21:57:20.150 回答