没有前缀的XSD无效



i具有导入type.xsd的附件main.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

如果命名空间前缀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"/>)将在模式的目标名称中,而当指元素或类型的名称(type="x"ref="x")将在命名空间D中。除非D与TargetNamespace相同,否则它会倾向于给出问题。

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

通过定义" 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

最新更新