使用记事本++XML工具创建XSD



我正在为各种XML文档创建XSD文件,我目前正在使用XML Tools Notepad++插件,当我尝试验证我的XSD文件时,它要求XML Schema进行验证:我不知道如何正确地将XML Tools指向正确的模式来验证我的XSD文件,因为XSD文件的模式不是本地定义的,而是由W3通用定义的。这是我当前的模式标记声明:

<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://www.w3.org/2009/XMLSchema/XMLSchema.xsd">

我试过在其他网站上查找解决方案,但还没有找到确切的解决方案。这是我目前的完整XSD文件。我认为XML工具无法解析非本地URI的位置,或者XML工具无法正确地将我的XSD文件识别为XML模式,但我不完全确定。也有可能我只是没有正确地声明某件事。

需要明确的是,我并不是在验证我的XML文件,我只是试图创建一个格式正确的XSD。

验证架构是否正确的最佳方法是将其提交给架构处理器。这将进行更彻底的检查,而不仅仅是根据模式文档的模式来评估它(S4SD)。在S4SD中无法表达对模式的许多约束。

实际上有两种。

(1)模式表示约束是模式文档级别的约束,例如(在XSD 1.1第1部分§3.9.1中):

除了对<any><anyAttribute>施加的条件之外模式文档的模式的元素信息项,namespace和notNamespace属性不能同时存在。

(2)模式组件约束是根据源模式文档生成的模式组件模型的约束来表示的。一个例子是"元素声明一致"约束(§3.8.6.3),该约束规定,如果内容模型中的两个元素粒子具有相同的名称,那么它们也必须具有相同的类型。

不同的模式处理器将提供不同的验证模式的方法。例如,使用.NET上的Saxon,您可以只执行

Validate -xsd:my-schema.xsd -t

(提供了一个模式而没有源文档),它会告诉您模式中是否有任何错误。

如果我是正确的,那么您正试图根据Schema for Schemas验证您的XML Schema。

目标命名空间必须是XML Schema的命名空间,即与绑定到前缀xs:的命名空间相同,并且可以使用属性xsi:schemaLocation指定包含Schema for Schemas的文件的位置。

<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
targetNamespace="https://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="https://www.w3.org/2001/XMLSchema
https://www.w3.org/2009/XMLSchema/XMLSchema.xsd">

更一般地说,xsi:schemaLocation属性包含偶数个空格分隔的URI。奇数位置的每个URI都是一个名称空间,下一个偶数位置的URI是其位置提示。

请注意,这很有可能,但不能100%保证有效,因为XMLSchema规范将xsi:schemaLocation中的信息定义为模式验证引擎解析其模式时可能遵循或不遵循的提示。验证引擎可以自由地提供一种不同的方法来解析模式文件的位置,然后应该对其进行记录。话虽如此,如果引擎的缓存中没有模式,那么它很可能会使用xsi:schemaLocation提供的提示,因为这是一种广泛的做法。

通常,鼓励验证引擎缓存模式(内置模式或一次性下载模式),因为全球用户群指向中央服务器的模式位置可能会给服务器带来巨大负载,尤其是W3C。在本地拥有模式也可以减少延迟。如果引擎不缓存,并且验证经常运行,则可以下载SchemasforSchemas并在本地使用它。

最后,XMLSchema引擎在使用时通常会自动验证和检查模式,不仅要根据SchemasforSchemas,还要考虑规范中的所有其他约束。如果是这样的话,以上所有操作都会自动发生,而无需指定模式中的模式位置。不过,明确地这样做是一种很好的智力锻炼。

最新更新