Xml 在XSLT2中加载实体?
我正在使用XSLT2.0程序来处理一些MathML文档。在这些数学模型中,有一些实体,如Xml 在XSLT2中加载实体?,xml,xslt-2.0,saxon,mathml,xml-entities,Xml,Xslt 2.0,Saxon,Mathml,Xml Entities,我正在使用XSLT2.0程序来处理一些MathML文档。在这些数学模型中,有一些实体,如&ApplyFunction和不可见时间,这会导致“实体未定义”错误。有没有一种方法可以在不加载MathML模式的情况下使用这些实体处理文档?(因为Saxon无法使用xsl:import schema…) 而且要清楚,我不需要使用XSLT中的实体;我需要处理包含它们的XML MathML有这样一个实体文件: <!ENTITY AElig "Æ" >&l
&ApplyFunction代码>和不可见时间代码>,这会导致“实体未定义”错误。有没有一种方法可以在不加载MathML模式的情况下使用这些实体处理文档?(因为Saxon无法使用xsl:import schema
…)
而且要清楚,我不需要使用XSLT中的实体;我需要处理包含它们的XML
MathML有这样一个实体文件:
<!ENTITY AElig "Æ" ><!--LATIN CAPITAL LETTER AE -->
<!ENTITY AMP "&#38;" ><!--AMPERSAND -->
<!ENTITY Aacute "Á" ><!--LATIN CAPITAL LETTER A WITH ACUTE —>
...
过去,我通过在XSL文件中声明实体获得了成功。例如:
<!DOCTYPE stylesheet [
<!ENTITY lsquo "<xsl:text disable-output-escaping='yes'>&#x2018;</xsl:text>">
<!ENTITY rsquo "<xsl:text disable-output-escaping='yes'>&#x2019;</xsl:text>">
<!ENTITY ldquo "<xsl:text disable-output-escaping='yes'>&#x201C;</xsl:text>">
<!ENTITY rdquo "<xsl:text disable-output-escaping='yes'>&#x201D;</xsl:text>">
]>
]>
。。。添加到文件的顶部,就在
声明之后和
元素之前。我怀疑类似的方法也会对您有所帮助。为了加强其他答案/注释,实体扩展是XML解析器的责任,与XSLT处理器无关。为了使XML格式良好,必须声明实体,这意味着您需要有一个引用它们的(内部或外部)DTD:也就是说,源文档必须有一个合适的DOCTYPE声明
Saxon将做出的唯一贡献是它使自己的EntityResolver可用于XML解析器。术语“EntityResolver”有点用词不当,因为它实际上并没有扩展像&InvisibleTimes代码>;它所做的只是定位外部DTD文件,以满足DOCTYPE声明中显示的系统ID和公共ID。如果在读取输入XML时出现这些错误,则听起来XML不完整,需要声明实体。否则,XML解析器不知道用什么内容替换实体引用@这是一个有趣的解决方案。但恐怕我不能用它。首先,为了让它工作,包含的XML文档不能有
头,我无法控制它。我正在处理的MathML文档是动态生成的,并且将具有标题。此外,包装文件需要按名称引用包含的文件。如果包含的XML文档是动态生成的,我还需要动态生成包装文件,我认为XSLT做不到……您试图处理的MathML文件是否引用MathML DTD/实体文件?如果我理解正确,那么Saxon已经配置为从本地缓存加载MathML实体,只要XML输入文件正确引用它们。因此,对于任何试图使用实体引用而不是
,
,&代码>,“
和&apos
,您的输入文件需要有一个DTD,该DTD直接声明实体或包含执行此操作的官方实体文件。这将允许您在样式表中使用这些实体引用。如果您想在源文档中使用它们,这将没有帮助。此外,如果您想在属性中使用它们,那么定义它们以扩展为xsl:text指令也没有用。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
"http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mrow>
<mi> sin </mi>
<mo> ⁡ </mo>
<mi> x </mi>
</mrow>
</math>
I/O error reported by XML parser processing file:/path/to/mathml.xml: unknown protocol: classpath
<!DOCTYPE stylesheet [
<!ENTITY lsquo "<xsl:text disable-output-escaping='yes'>&#x2018;</xsl:text>">
<!ENTITY rsquo "<xsl:text disable-output-escaping='yes'>&#x2019;</xsl:text>">
<!ENTITY ldquo "<xsl:text disable-output-escaping='yes'>&#x201C;</xsl:text>">
<!ENTITY rdquo "<xsl:text disable-output-escaping='yes'>&#x201D;</xsl:text>">
]>