Java jax-ws目录文件:PUBLIC和SYSTEM条目之间的区别

时间:2013-09-25 20:03:33

标签: java jax-ws xjc wsimport

有人可以用以下TR9401目录格式解释SYSTEM和PUBLIC条目之间的区别(我使用Java {strong> jax-ws 工具,如xjcwsimport等。 )相同的概念(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,但它仍然有效,而其他行的相同更改会破坏构建。

1 个答案:

答案 0 :(得分:0)

我认为它来自SGML / DTD,其中每个文档类型都可以具有PUBLIC-IDSYSTEM-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解析为实际的本地文件。