1

我有附加的 main.xsd 导入 types.xsd。在 XmlSpy(或类似的)中打开它,main.xsd 将验证得很好。但是,如果命名空间前缀 ns0 从声明中删除,则它不会验证 - 即使前缀没有在任何地方使用。

好的:<xs:schema xmlns:ns0="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

坏的:<xs:schema xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

验证错误消息: "Cannot resolve declaration or definition 'ArrayOfString' in namespace 'http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data'"

谁能解释一下为什么需要前缀?

好文件:GoodMain.xsd 坏文件:BadMain.xsd 导入的类型 xsd:Types.xsd

4

2 回答 2

3

如果命名空间前缀ns0没有在任何地方使用,那么您可以安全地删除命名空间声明xmlns:ns0="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data"

你不能做的是用不同的命名空间声明替换它,xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data". 这会更改默认命名空间,从而更改模式文档中所有无前缀名称的含义。

更新以响应评论:更具体地说,如果在模式中声明了默认命名空间 D,则全局声明的元素、类型等 ( <element name="x"/>) 将在模式的 targetNamespace 中,而引用元素或类型的名称 ( type="x", ref="x") 将位于命名空间 D 中。除非 D 与 targetNamespace 相同,否则会出现问题。

(顺便说一句,它不称为“别名”。如果您使用正确的术语,您会更好地理解。)

于 2017-03-13T12:51:09.930 回答
0

通过定义“xmlns=”,我是说任何不合格的元素都将属于这个默认命名空间。问题是,因为我没有架构的“targetNamespace=”属性,所以默认命名空间所针对的命名空间不存在。

我现在已经将 XSD 定义如下:

<xs:schema targetNamespace="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data" xmlns="http://schemas.asidua.com/CCP/IntegrationServices/2011-11-18/Data" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:q2="http://microsoft.com/wsdl/types/" elementFormDefault="unqualified" attributeFormDefault="unqualified">

完整文件在这里:best.xsd

于 2017-03-13T13:57:06.717 回答