有人可以用以下TR9401目录格式解释SYSTEM和PUBLIC条目之间的区别(我使用Java {strong> jax-ws 工具,如xjc
,wsimport
等。 )相同的概念(SYSTEM和PUBLIC)也出现在其他XML目录格式中。
换句话说,我将目录文件视为map:namespace(key)to location(value)。对于该映射中的键值对而言,“SYSTEM”与“PUBLIC”相反,这意味着什么?
SYSTEM "http://www.w3.org/2001/xml.xsd" "xml.xsd"
SYSTEM "http://www.ivoa.net/xml/STC/STCregion/v1.10" "STCregion-v1.10.xsd"
PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd"
PUBLIC "http://www.ivoa.net/xml/STC/STCcoords/v1.10" "STCcoords-v1.10-mod.xsd"
我进行了一些实验,发现我可以将某些条目从PUBLIC更改为SYSTEM,但它仍然有效,而其他行的相同更改会破坏构建。
答案 0 :(得分:0)
我认为它来自SGML / DTD,其中每个文档类型都可以具有PUBLIC-ID和SYSTEM-ID。前者只是一个字符序列(例如-//W3C//DTD HTML 4.01//EN
),后者是文件名或URL。
在XML中, xmlns 或多或少是public-id,而 schemaLocation 可以视为system-id。
我刚刚在计算机上找到一个示例:有一个/usr/share/xml/schema/xml-core/tr9401.dtd
文件,其中有一个公共ID -//GlobalTransCorp//DTD XML Catalogs V1.0-Based Extension V1.0//EN
和一个系统ID http://globaltranscorp.org/oasis/catalog/xml/tr9401.dtd
。
现在catalog.xml
文件包含以下几行:
<public publicId="-//GlobalTransCorp//DTD XML Catalogs V1.0-Based Extension V1.0//EN" uri="tr9401.dtd"/>
<system systemId="http://globaltranscorp.org/oasis/catalog/xml/tr9401.dtd" uri="tr9401.dtd"/>
第一个将public-id解析为实际的本地文件;第二个将system-id解析为实际的本地文件。