我有附加的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
答案 0 :(得分: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相同,否则将会产生问题。
(顺便说一句,它不被称为&#34;别名&#34;。如果你使用正确的术语,你会被理解得更好。)
答案 1 :(得分:0)
通过定义&#34; xmlns =&#34;,我说任何不合格的元素都属于这个默认命名空间。问题是,因为我没有&#34; targetNamespace =&#34;架构的属性,然后默认命名空间所针对的命名空间不存在。
我现在已经将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