最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】XML Catalog,PUBLIC和SYSTEM的ENTITY

XML crifan 2804浏览 0评论

首先,wiki的内容:

XML Catalog

是最值得参考的。

将其和下面这个:

ENTITY Declaration

搭配着,一起看,尤其是其中的语法解释:

<!ENTITY name SYSTEM "URI">
<!ENTITY name PUBLIC "public_ID" "URI">

很清晰易懂。

这样,才使得我之前对于xml中所用到的public的entity的定义:

<!DOCTYPE chapter
[
<!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent;
]>

有了更加清楚的了解。

即,上述entity定义中:

name是crl_ent;

crl.ent是个publicID;

而null其实是个URI,而此处经过测试,写成别的值,比如 https://www.crifan.com 也是可以的。

因为之前设置了catalog了,所以可以去把此处的publicID的crl.ent解析为本地的那个entity文件。

对应的catalog为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE catalog
   PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN"
   "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"
[
...
]
>

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <public publicId="crl.ent"
        uri="&config_dir;/entity/crl.ent"/>
...
</catalog>

而对于前面提到的:

XML Catalog

看懂了里面的例子后,对应的去把public改为system,就是先把catalog配置改为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE catalog
[
...
]
>

<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <system systemId="crl.ent"
        uri="&config_dir;/entity/crl.ent"/>
...
</catalog>

然后xml中再去把:

<!ENTITY % crl_ent PUBLIC "crl.ent" 'null'>%crl_ent;

改为:

<!ENTITY % crl_ent SYSTEM "crl.ent">%crl_ent;

就可以了。

此处,即为:

crl_ent是个SYSTEM中的name;

而crl.ent是个systemID;

所以,相应的catalog会把对应的crl.ent这个systemID解析为本地的那个&config_dir;/entity/crl.ent文件,就实现了和上面的public的定义同样的效果了。

当前,如果不用catalog,那么就使用相对路径(或绝对路径),即为:

<!DOCTYPE chapter
[
<!ENTITY % crl_ent SYSTEM "../../../config//entity/crl.ent">%crl_ent;
]>

也同样可以,但是就没有使用catalog时所具有的方便移植的特点了。

 

另外,其他也还有很多不错的参考资料:

XML Entities and their Applications

XML Entity and URI Resolvers

 

【总结】

至此,算是对于xml的(system和public的)entity定义和catalog,有了个更深的认识了。

也终于解决了之前对于那个

<!ENTITY % crl_ent PUBLIC "crl.ent" ‘null’>%crl_ent;

的困惑了。

转载请注明:在路上 » 【整理】XML Catalog,PUBLIC和SYSTEM的ENTITY

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.180 seconds, using 22.16MB memory