计算XML Schema定义的传递导入闭包的最佳方法是什么?

时间:2014-03-25 11:02:15

标签: validation xsd

我有一组XML架构定义资源(文件)。这些文件包含相互导入和包含指令。出于特定目的,用户将在特定XSD中实例化元素定义。我想为他们提供一个摘录,其中仅包含任务所需的XSD资源。这意味着我需要跟踪所有导入并递归地包含到其他资源,直到我设置为止。 (Kleene Star或传递封闭)。

我认为当我从入口点验证schemata时,这是隐式完成的。所以可能会有一个回调列出了我可以利用的过程中解决的所有依赖关系。

我看到的另一个解决方案是使用DOM并手动解析导入和包含元素的每个模式。然而,这似乎很笨拙。

1 个答案:

答案 0 :(得分:1)

我认为最方便的方法是使用XSLT样式表,您可以在其中提供起始点列表(URI,或者如果您需要注意变色龙包含,名称空间名称/ URI对),以及然后获取文档并计算传递闭包,发出URI列表(或者,命名空间/ URI对)或一系列XSD架构文档。

也可以使用XQuery。

正如您所建议的那样,DOM也可以使用您选择的主机编程语言。 (我自己在XSLT或XQuery中这样做,但那是因为我用这些语言编写了大部分编程。)一些验证器可能提供API来获取所咨询的模式文档的列表,或者您可以从验证者的PSVI表示中提取该信息; XSD验证的API未标准化。

请注意,在一般情况下,您需要注意并处理xsd:redefine和xsd:override,而不仅仅是xsd:include和xsd:import。

当然,如果这是一次性任务,并且模块的数量可能少于50,那么手动操作可能比编写程序自动执行更快。