我有一个xsd文件,用来验证一些xml数据,在我自己的pc上,这个文件工作得很好。但是,如果在没有网络的计算机上,它将失败,并出现此错误
服务器无法处理请求。--->类型“http://schemas.microsoft.com/sqlserver/2004/sqltypes:nvarchar”未声明,或不是简单类型。
然而,这在其他地方是完美的。
我的xsd文件的开头如下
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:schema="DataLoad" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />
经过一些研究,我尝试将
schemaLocation
属性更改为schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes ./bin/sqlTypes.xsd"
显然,这应该从
./bin/sqlTypes.xsd
加载,然后(我将ms-one的本地副本保存到./bin/sqlTypes.xsd
但现在,我发现这个错误…
服务器无法处理请求。--->无法从位置“http://schemas.microsoft.com/sqlserver/2004/sqltypes/bin/sqltypes.xsd”加载架构-W3C XML架构的根元素应为,其命名空间应为“http://www.w3.org/2001/XMLSchema”。
我对xml模式还不太熟悉,但仍在努力解决这个问题。
最佳答案
好吧,看起来schemaLocation
在这个上下文中有不同的语法(疯狂,对吧?)。通常,它采用“$namespace$address”(即两个参数,用空格分隔-实际上是一个此类对的列表),如您所说。
但是在<import>
元素中,namespace有一个特殊属性(称为namespace
),而schemaLocation
现在只包含地址。这有什么意义吗?不,我想这对你来说意味着:
<xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"
schemaLocation="./bin/sqlTypes.xsd" />
下面是定义
<import>
的规范,schemaLocation
显然只是一个uri:http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#composition-schemaImport
为了进行比较,这里是
<xsi:schemaLocation>
的定义(请注意“xsi”-它在不同的名称空间中,因此它们可以有不同的定义,只是使用相同的名称不必要地造成混淆):http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#xsi.schemaLocation
XML模式“primer”还区分了这些用途:http://www.w3.org/TR/xmlschema-0/#schemaLocation