我第一次使用XML工作项目。我觉得我已经掌握了基础知识,但有一件事让我摸不着头脑。如果你是using an schema to designate a namespace,那么XML解析器如何知道在哪里找到模式文件,以便它可以验证输入到它的内容?我在一个层面得到它唯一重要的是具有全局非唯一名称的元素与它们唯一的命名空间相关联,但解析器不必知道元素标记是否实际上是命名空间会员?鉴于命名空间的命名约定通常是一个URL(可能)与所讨论的模式没有任何关系,而不是作为一个唯一的字符串,这究竟是如何发生的?换句话说,需要验证XML文件的解析器如何找到与该文件关联的模式?
答案 0 :(得分:1)
有许多可能的机制,它取决于您使用的架构处理器。模式处理有时与XML解析集成在一起,但从概念上讲,它是一个单独的操作,可以独立完成。
许多人使用的方法,但我不太喜欢,是xsi:schemaLocation属性,其中XML实例文档本身定义了从命名空间URI到模式位置的映射。我不喜欢它,因为如果您正在验证文档,那么您不应该信任它以告诉您用于验证的模式。
大多数架构处理器可能都有某种API或命令行界面,允许您提供架构位置。例如,如果您正在使用Saxon,那么它就是
...Validate -s:source.xml -xsd:schema.xsd
其中,schema.xsd是包含/导入所需的任何其他模式文档的顶级模式文档。这里没有明确的命名空间绑定:Saxon将读取提供的模式文档,并确定哪些定义适用于哪些名称空间。