【问题标题】:Java jax-ws catalog files: difference between PUBLIC and SYSTEM entriesJava jax-ws 目录文件:PUBLIC 和 SYSTEM 条目之间的区别
【发布时间】:2013-09-25 20:03:32
【问题描述】:

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

【问题讨论】:

  • 你知道DTD和XSD的区别吗?
  • @TRA,是的。我篡改了关于 SYSTEM/PUBLIC 的 XSD 架构,没有触及 XMLSchema.dtd。

标签: java jax-ws xjc wsimport


【解决方案1】:

我认为它来自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 解析为实际的本地文件;第二个将系统 ID 解析为实际的本地文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2013-05-08
    • 2016-02-04
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多