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