2012-03-01 39 views
4

我有一個XSD文件,我用它來驗證一些XML數據,並在我自己的PC上完美運行。但是,當在沒有網絡的計算機上時,它會因此錯誤而失敗本地schemaLocation

服務器無法處理請求。 --->類型'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的本地副本./bin/sqlTypes.xsd

但是現在,我得到這個錯誤...

服務器無法處理請求。 --->無法加載從位置「http://schemas.microsoft.com/sqlserver/2004/sqltypes ./bin/sqltypes.xsd」的模式 - 一個W3C XML模式的根元素應該是和它的命名空間應該是「http://www.w3.org/2001/XMLSchema」 ..

我m XML Schema新手,仍然試圖讓我的頭腦在這方面。

回答

0

模式位置屬性包含值爲「名稱空間」和「模式位置」的值對。

在您的本地機器上,您的應用程序似乎能夠從名稱空間「http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd」奇蹟般地解析模式並加載模式(或者它不會驗證)。我需要知道如何加載XML文件以確定如何執行此名稱空間以架構位置映射。

注意雖然命名空間「http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd」看起來像一個網址,這只是一個象徵,而不會直接告訴解析器在哪裏架構是。

添加「./bin/sqlTypes.xsd」告訴解析器它可以從加載的XML文件的相對路徑加載文件。爲了這個工作,XSD文件(及其所有的輸入/包含)需要在這個位置,我猜測那裏沒有?

+0

該文件位於正確的位置,除非我的行schemaLocation =「http://schemas.microsoft.com/sqlserver/2004/sqltypes ./bin/sqlTypes.xsd」沒有格式化是否正確? - 到目前爲止解決它的唯一方法是改變客戶防火牆以允許服務器連接出站。 – Elarys 2012-05-09 15:58:08

1

好的,它看起來像schemaLocation不同的語法在這種情況下(瘋了,對吧?)。正如你所說的,它通常需要「$ namespace $ address」(即兩個參數,用空格分隔 - 實際上是這樣一對列表)。

但是,在<import>元素中,名稱空間有一個特殊屬性(稱爲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模式「引」還區分在這些用途之間:http://www.w3.org/TR/xmlschema-0/#schemaLocation

相關問題