2

在火狐中:

<?xml version="1.0" encoding="utf-8"?>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

导致“未定义实体”错误。

我知道那里缺少一些东西。我只是不知道我应该写什么来纠正这个问题。我想避免将每个 unicode 字符重写到文档中。

编辑我尝试了以下,仍然无法正常工作,同样的错误:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE math [
  <!ENTITY % HTMLlat1 PUBLIC
    "-//W3C//ENTITIES Latin 1 for XHTML//EN"
    "xhtml-lat1.ent">
  %HTMLlat1;
  <!ENTITY % HTMLsymbol PUBLIC
    "-//W3C//ENTITIES Symbols for XHTML//EN"
    "xhtml-symbol.ent">
  %HTMLsymbol;
  <!ENTITY % HTMLspecial PUBLIC
    "-//W3C//ENTITIES Special for XHTML//EN"
    "xhtml-special.ent">
  %HTMLspecial;
]>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

编辑在 chrome 中,这会导致以下消息:

error on line 6 at column 13: PEReference: %HTMLlat1; not found
warning on line 10 at column 15: PEReference: %HTMLsymbol; not found
warning on line 14 at column 16: PEReference: %HTMLspecial; not found

编辑尝试下载 .ent 文件并将引用更改为本地 http:// 路径或 file:/// 路径,但没有成功。关于主题的类似帖子:PHP 中的 XML 目录

编辑浏览器的快速解决方法:

<!DOCTYPE html>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>

您需要抑制 XML 标头,因此将其理解为 HTML。

然而,这并没有回答问题,因为问题是导入实体,而文档被声明为 XML。

回答

<?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 display="block" xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>&rho;</mi>
</math>
4

3 回答 3

1

如果您可以修改 XML 以包含内联 DTD,您可以在那里定义实体:

> <!DOCTYPE yourRootElement [
>     <!ENTITY bull "&#8226;">
>     .... ]>
于 2012-12-04T16:50:26.147 回答
1

在 XML 声明之后添加 MathML 2.0 文档类型:

<?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"
>

原因是在 Web 浏览器中实体引用的处理非常笨拙。他们实际上并不阅读 DTD。相反,它们具有预定义实体的内置表,可以通过使用特定doctype字符串来打开。这是字符串魔术,例如使用 MathML 3.0 doctype 将不起作用。参照。使用 XSLT到XML 到 XHTML:使用 &Sum 等实体;(这是一个 MATHML 实体)(尤其是 Martin Honnen 对答案的评论)。

或者,使用字符本身,或者,如果您的创作系统无法方便地生成它们,则使用字符引用,如&#x3c1;.

于 2012-12-04T18:24:47.470 回答
1

请注意,XHTML1 和 MathML2 中的定义现在已过时,并且与当前浏览器中内置于 HTML 解析器的定义不一致。MathML3 和 HTML5 中使用的当前定义在此处定义

http://www.w3.org/2003/entities/2007doc/Overview.html

这是编辑(我的:-)草稿,顶部有一个指向 REC 版本的链接。

实体的单个 DTD 声明文件集是

http://www.w3.org/2003/entities/2007/htmlmathml-f.ent

一般来说,最好在 XML 上下文中使用数字引用而不是命名实体,因为浏览器不会获取外部引用的 DTD。

如果您通过公共标识符引用 xhtml 或 mathml2 dtd(即它们不使用您指定的实体定义),遵循 HTML(5) 规范的浏览器将使用从上述规范派生的内置定义集。

查看针对 HTML 规范的相关错误

https://www.w3.org/Bugs/Public/show_bug.cgi?id=13409

于 2012-12-04T22:08:56.297 回答