1

有人可以解释以下 TR9401 目录格式中的 SYSTEM 和 PUBLIC 条目之间的区别(我将其与 Java jax-wsxjc等工具一起使用wsimport)。相同的概念(SYSTEM 和 PUBLIC)也出现在其他 XML 目录格式中。

换句话说,我将目录文件视为一个映射:命名空间(键)到位置(值)。该映射中的键值对是 "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 并且它仍然有效,而其他行上的相同更改会破坏构建。

4

1 回答 1

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文件有一个 public-id-//GlobalTransCorp//DTD XML Catalogs V1.0-Based Extension V1.0//EN和一个 system-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 解析为实际的本地文件;第二个将系统 ID 解析为实际的本地文件。

于 2020-02-17T10:42:55.793 回答