8

我在工作中经常使用 xsd 模式文件,我想知道:是否可以为 xsd 模式语言编写 xsd 模式文件?这似乎是一种记录模式语言的明显方式,我认为这将是其开发人员首先尝试的事情之一。但是,我一直无法找到这样一个带有明显搜索词的文件。如果不可能,为什么不呢?如果可能的话,有没有人做过,有没有地方可以下载这样的文件?

笔记:

  1. 维基百科建议 xsd 模式语言“不是 100% 自我描述的”,因为“内容和属性声明不能依赖于属性或元素上下文”。如果是这样,您能否提供一个 xsd 功能的示例,该功能需要此类上下文,因此无法表示?

  2. 这个问题不是纯粹的学术问题。我可能需要在不久的将来编写一个处理 xsd 模式文件的程序,从 xsd 生成源代码(使用 generateDS 等工具)将是一个简单的起点。

4

2 回答 2

7

事实上,XSD 语言有一个 XML 模式,它从一开始就存在(正如它的 URL 所暗示的那样):

http://www.w3.org/2001/XMLSchema.xsd

这是其最新版本的 XSD 文件——W3C XML Schema Definition Language (XSD) 1.1:

http://www.w3.org/2012/04/XMLSchema.xsd

事实上,这些 XSD 文件(至少是第一个)现在被各种使用 XML 模式的软件大量使用。否则,我认为,拥有一种以 XML 形式表达的 XML 模式语言而没有对它的 XSD 描述,这将是完全荒谬的!


就此而言,甚至还有一种称为XSLT的基于 XML 的编程语言 (在 XML 技术中非常重要),而且,您猜想,它也有一个 XML 模式:

http://www.w3.org/2007/schema-for-xslt20.xsd

于 2013-07-18T23:44:45.687 回答
5

XSD“不是 100% 自我描述”的 Wikipedia 声明是正确的,因为并非每个符合 schema-for-schema-documents (S4SD) 的文档都能够生成有效的模式。原因之一是存在无法用 XSD 表达的约束(例如,xpath 属性的内容应该是语法上有效的 XPath 表达式);另一个是 XSD 只能表达对单个文档的约束,而要使模式有效,则存在跨文档应用的一致性约束。

如果 S4SD 充分利用 XSD 1.1 的功能,那么就有可能接近 100% 覆盖所有“XML 表示”规则;我希望尝试这个,但它从未完成。仍然会有一些差距。

您应该仔细考虑编写处理模式文档的软件的计划。从原始模式文档中提取信息并不容易,因为模式作者可以用多种不同的方式来表达同一件事。另一种方法是使用 API 来访问模式处理器从原始输入文档创建的“模式组件”(例如元素声明和类型定义)。几个模式处理器提供这样的 API。Saxon-EE 以称为 SCM 的 XML 表示形式提供模式组件,它比原始 XSD 文档更容易处理。

于 2013-07-19T08:21:38.957 回答