TEI header - 无法解析 (SAXON)
TEI header - cannot parse (SAXON)
我有一个 TEI P5 有效 xml 文件,我已经成功地使用 Saxon-PE 9 解析了该文件。
但是,我无法获得 'biblStruct/monogr/imprint/date' 值。
据我所知 - 解析器无法识别 'sourceDesc' 节点,但它可以识别处于同一层级的 'titleStmt'。
有谁知道我的问题的解决方案是什么?
具体来说:
<xsl:template match="tei:titleStmt">
确实有效,但是
<xsl:template match="tei:biblStruct">
或
<xsl:template match="tei:biblStruct/tei:monogr/tei:imprint/tei:date">
不会。也就是说,输出为空,<xsl:message>Parser successfully got here.</xsl:message>
根本没有触发。
这将是 XML 文件的 header:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Zaveza</title>
<title>Revija</title>
<title>Elektronska </title>
</titleStmt>
<editionStmt>
<edition>0.1</edition>
</editionStmt>
<extent> KB XML </extent>
<publicationStmt>
<publisher>
<address>
</address>
</publisher>
</publicationStmt>
<sourceDesc>
<biblStruct>
<monogr>
<title>Zaveza</title>
<imprint>
<biblScope type="issue">10</biblScope>
<biblScope type="vol">XXVI</biblScope>
<biblScope>številka 4, december 2016</biblScope>
<date when="2016-12">2016</date>
</imprint>
</monogr>
</biblStruct>
</sourceDesc>
</fileDesc>
</teiHeader>
--
</TEI>
这是 XLS 的一部分:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:rng="http://relaxng.org/ns/structure/1.0"
xmlns:tei="http://www.tei-c.org/ns/1.0"
xmlns:teix="http://www.tei-c.org/ns/Examples"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
exclude-result-prefixes="a fo rng tei teix">
<doc xmlns="http://www.oxygenxml.com/ns/doc/xsl">
<desc>Process element teiHeader</desc>
</doc>
<xsl:template match="tei:date">
<xsl:message>Parser successfully got here.</xsl:message>
</xsl:template>
</xsl:stylesheet>
鉴于您提供的输入和 XSLT 样式表,我无法重现您的问题。当显示的输入 运行 时,您提供的样式表确实会产生输出(一旦输入中的格式错误得到修复并且提供了 xsl:stylesheet
元素的结束标记),以及用于的模板tei:date
实际上会处理输入中的日期元素。这在输出中很容易看出,因为元素的内容没有出现在输出中:这就是显示的模板的目的。
因此:您显示的样式表和输入确实是您正在使用的,在这种情况下,您应该会看到错误消息抱怨非 XML 输入(以及无效的样式表,由于错误在您显示的 XSLT 中发表评论), 或 您已经以消除问题的方式缩写了样式表。在后一种情况下,您现在知道问题出在您删除的 material 中;就是这样。
根据您修改后的问题,我的猜测是模板规则从未激活,因为您从未在相关节点上调用 xsl:apply-templates
。要使模板规则生效,必须满足两个条件:必须 select 相关节点进行处理(在 xsl:apply-templates
select
表达式中),并且模板规则必须匹配那些节点(并且是这些节点的最高 priority/precedence 模板规则)。
我有一个 TEI P5 有效 xml 文件,我已经成功地使用 Saxon-PE 9 解析了该文件。
但是,我无法获得 'biblStruct/monogr/imprint/date' 值。
据我所知 - 解析器无法识别 'sourceDesc' 节点,但它可以识别处于同一层级的 'titleStmt'。 有谁知道我的问题的解决方案是什么?
具体来说:
<xsl:template match="tei:titleStmt">
确实有效,但是
<xsl:template match="tei:biblStruct">
或
<xsl:template match="tei:biblStruct/tei:monogr/tei:imprint/tei:date">
不会。也就是说,输出为空,<xsl:message>Parser successfully got here.</xsl:message>
根本没有触发。
这将是 XML 文件的 header:
<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
<teiHeader>
<fileDesc>
<titleStmt>
<title>Zaveza</title>
<title>Revija</title>
<title>Elektronska </title>
</titleStmt>
<editionStmt>
<edition>0.1</edition>
</editionStmt>
<extent> KB XML </extent>
<publicationStmt>
<publisher>
<address>
</address>
</publisher>
</publicationStmt>
<sourceDesc>
<biblStruct>
<monogr>
<title>Zaveza</title>
<imprint>
<biblScope type="issue">10</biblScope>
<biblScope type="vol">XXVI</biblScope>
<biblScope>številka 4, december 2016</biblScope>
<date when="2016-12">2016</date>
</imprint>
</monogr>
</biblStruct>
</sourceDesc>
</fileDesc>
</teiHeader>
--
</TEI>
这是 XLS 的一部分:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:rng="http://relaxng.org/ns/structure/1.0"
xmlns:tei="http://www.tei-c.org/ns/1.0"
xmlns:teix="http://www.tei-c.org/ns/Examples"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0"
exclude-result-prefixes="a fo rng tei teix">
<doc xmlns="http://www.oxygenxml.com/ns/doc/xsl">
<desc>Process element teiHeader</desc>
</doc>
<xsl:template match="tei:date">
<xsl:message>Parser successfully got here.</xsl:message>
</xsl:template>
</xsl:stylesheet>
鉴于您提供的输入和 XSLT 样式表,我无法重现您的问题。当显示的输入 运行 时,您提供的样式表确实会产生输出(一旦输入中的格式错误得到修复并且提供了 xsl:stylesheet
元素的结束标记),以及用于的模板tei:date
实际上会处理输入中的日期元素。这在输出中很容易看出,因为元素的内容没有出现在输出中:这就是显示的模板的目的。
因此:您显示的样式表和输入确实是您正在使用的,在这种情况下,您应该会看到错误消息抱怨非 XML 输入(以及无效的样式表,由于错误在您显示的 XSLT 中发表评论), 或 您已经以消除问题的方式缩写了样式表。在后一种情况下,您现在知道问题出在您删除的 material 中;就是这样。
根据您修改后的问题,我的猜测是模板规则从未激活,因为您从未在相关节点上调用 xsl:apply-templates
。要使模板规则生效,必须满足两个条件:必须 select 相关节点进行处理(在 xsl:apply-templates
select
表达式中),并且模板规则必须匹配那些节点(并且是这些节点的最高 priority/precedence 模板规则)。