使用Notepad ++ XML Tools创建XSD

问题描述 投票:0回答:2

我正在为各种XML文档创建XSD文件,我目前正在使用XML Tools Notepad ++插件,当我尝试验证我的XSD文件时,it asks for XML Schema to validate against:我不确定如何正确地将XML Tools指向正确的模式验证我的XSD文件,因为XSD文件的模式不是本地定义的,它是由W3普遍定义的。这是我当前的架构标签声明:

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

我试过在其他网站上查找解决方案,但我还没有找到解决方案。 This is my full XSD file as of now.我认为XML Tools要么无法解析非本地URI的位置,要么XML工具无法正确识别我的XSD文件为XML Schema,但我不完全确定。我也可能根本没有正确宣布某些事情。

为了清楚起见,我不是在验证我的XML文件,我只是想创建一个正确形成的XSD。

xml xsd notepad++
2个回答
0
投票

如果我是正确的,那么您正在尝试针对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%保证这是有效的,因为XML Schema规范将xsi:schemaLocation中的信息定义为模式验证引擎可能会或可能不会遵循以解析其架构的提示。验证引擎可以自由地提供解析模式文件位置的不同方法,然后应记录这些方法。话虽如此,如果引擎的缓存中没有架构,很可能会使用xsi:schemaLocation提供的提示,因为这是广泛使用的做法。

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

最后,XML Schema引擎通常会在使用时自动验证和检查模式,不仅针对Schema for Schemas,还考虑规范中的所有其他约束。如果是这种情况,则所有上述操作都会自动发生,而无需在架构内指定架构位置。但是,明确这样做是一项很好的智力练习。


0
投票

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

实际上这些有两种。

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

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

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

不同的模式处理器将提供验证模式的不同方法。例如,使用Saxon on .NET就可以了

Validate -xsd:my-schema.xsd -t

(提供架构而没有源文档)它会告诉您架构中是否有任何错误。

© www.soinside.com 2019 - 2024. All rights reserved.