Eric van der Vlist的RelaxNG简化限制

时间:2011-02-24 08:48:53

标签: relaxng

全部,

我正在尝试使用Eric van der Vlist's 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>

我还没有开始深入研究它,但也许有人已经知道可能导致这种情况的原因。

2 个答案:

答案 0 :(得分:3)

有没有理由不使用jing -s?

答案 1 :(得分:1)

显然,我不是第一个遇到这些问题的人。 This web site也指运行simplification.xsl的一些问题,并包含一些修复。我只是在这里复制它,以备将来参考。

  
      
  • 在步骤10中:行<xsl:with-param name="node-name" select="'rng:group'"/>中缺少前缀“rng:”,导致标记<group>在输出中具有默认命名空间(不是RelaxNG)。
  •   
  • 在步骤14中:在行<xsl:param name="node-name" select="concat('rng:',parent::*/rng:start/@combine)"/>中“combine”属性的值之前添加前缀“rng:”的串联。
  •   
  • 在第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)]">
  •   
  • 在第15步中:在删除模板中遗漏"rng:parentRef/@name"<xsl:template match="rng:define|rng:define/@name|rng:ref/@name|rng:parentRef/@name"/>,以便在<parentRef>的“name”属性中保留生成的ID。
  •   

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