没有前缀的XSD无效

时间:2017-03-13 11:47:38

标签: xml biztalk xmlspy

我有附加的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

2 个答案:

答案 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