全部,
我正在尝试使用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>
我还没有开始深入研究它,但也许有人已经知道可能导致这种情况的原因。
答案 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语法后,整个转换完成没有任何问题。