在firefox中:
<?xml version="1.0" encoding="utf-8"?>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mi>ρ</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>ρ</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:///路径,但没有成功。 关于该主题的类似帖子:XML catalog in PHP
编辑浏览器的快速解决方法:
<!DOCTYPE html>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML">
<mi>ρ</mi>
</math>
您需要禁止XML标头,因此它被理解为HTML。
然而,这并没有回答这个问题,因为问题是导入实体,而文档被声明为XML。
ANSWER
<?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>ρ</mi>
</math>
答案 0 :(得分:1)
如果您可以修改XML以包含内联DTD,则可以在那里定义实体:
> <!DOCTYPE yourRootElement [
> <!ENTITY bull "•">
> .... ]>
答案 1 :(得分:1)
在XML声明之后添加MathML 2.0 doctype:
<?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将无法正常工作。参看到XML to XHTML using XSLT: using entities such as ∑ (which is a MATHML entity)(特别是Martin Honnen对答案的评论)。
或者,使用字符本身,或者,如果您的创作系统无法方便地生成字符,请使用ρ
等字符引用。
答案 2 :(得分: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规范的相关错误