0

我有一堆不是我自己编写的 XSD 文件。这些文件有时会相互导入:

<xs:import namespace="http://www.mysite.com/xmlns/xXX-YYYY/V"  schemaLocation="http://www.mysite.com/xmlns/xXX-YYYY/V/schema_A.xsd"/>

我想了解依赖项的概述,而不必通读所有依赖项。

schemaLocation 指定的 URI 不存在,而是使用 catalog.xml 文件来解析架构位置。

http://de.wikipedia.org/wiki/XML_Catalogs

任何人都可以推荐一个工具,它可以通过处理catalog.xml文件中给出的信息来可视化我的模式的依赖关系?

谢谢米莎

4

2 回答 2

0

要跟进我的评论...

我不知道有任何工具会考虑 OASIS 目录文件。看看这个响应,看看它是否支持你需要的(和你的平台)。

严格来说,依赖关系图有很多问题,这就是为什么这样的问题应该用你为什么想要它来限定。

有些人认为它确实显示了 XSD 文件之间的依赖关系;这不是真的:它可能显示了作者认为的依赖关系是什么,但这并不是处理器实际同意的。“schemaLocation”只是处理器可能会或可能不会使用的提示:如果另有指示,“可能不会”使用它(众所周知的 XSD 可以通过目录条目或任何其他专有“目录”在内部缓存),或者因为处理器可能会决定在无论如何都没有用的情况下不需要加载外部参考(在某些极端情况下可能会发生)。

按照显式模式位置描述构建的图表肯定更容易做到。它只显示了作者的意图;这并不意味着它是“真实的”(因为内容是间接提取的,这使得整个 XSD 集有效,而独立于该集打开的单个 XSD 将无效)。

尝试构建一个通过目录覆盖悬空或不存在的 schemaLocation 的图表要困难得多,因为有多种方式来构建内容和解析机制。它将具有与上述相同的缺点(除了现在作者是目录文件之一,而不是 XSD 的作者)。

“真正的”依赖可以通过遍历已经加载和编译的模式集来构建。即使这样,由于可替换组件(替换组或派生类型中的元素,通过使用 xsi:type 属性),您仍然需要定义有关依赖关系的标准。那更难了。

于 2013-11-04T17:13:07.487 回答
0

看看这个工具:DocFlex/XML XSDDoc。它是一个 XML 模式文档生成器。

它不可视化 xsd 依赖项,但它确实适用于 XML 目录。

每个 XSD 文件的概览列出了从它引用的所有其他 XSD 文件(即导入、包含或重新定义)。还有一个引用给定模式的那些模式的相反列表。

因此,您可以使用它来确定哪些 XSD 文件依赖于哪个。至少,这比读取原始 XSD 文件更容易。

例如,以下是使用该工具生成的文档: XML Schemas for DITA 1.1。它基本上是由两个文件生成的:

ditaarch.xsd是提取所有其他模式的模式驱动程序(总共 25 个);catalog.xml是 XML 目录,通过它解析所有文件引用。这些模式本身的属性中指定schemaLocation的只是不透明的 URI。

于 2013-11-05T07:40:42.133 回答