2010-04-07 59 views
2
<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="abc" targetNamespace="http://schemas.businessNameHere.com/SoftwareNameHere" 
      elementFormDefault="qualified" 
      xmlns="http://schemas.businessNameHere.com/SoftwareNameHere" 
      xmlns:mstns="http://schemas.businessNameHere.com/SoftwareNameHere" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="..." type="..." /> 
<xs:complexType name="..."> 

我正在使用XSD生成.cs文件的項目。我的問題是關於字符串「http://schemas.businessNameHere.com/SoftwareNameHere」如果我改變它,它不起作用。但是http://不是有效的......後面的邏輯是什麼,我可以在哪裏獲得有關如何放置或如何改變它的信息?XSD文件,從哪裏獲取xmlns參數?

回答

11

XSD名稱空間不一定是有效的URI。擁有一個名爲URL的名稱空間字符串並不意味着從URL中取得任何內容,或者根本不需要任何與Web相關的任何東西 - 它只是一個與其他任何字符串一樣的字符串。所以雖然URL可能是無效的,因爲它實際上並不指向任何東西,它仍然是一個有效的字符串作爲名稱空間聲明。

你可以閱讀reasoning behind namespace identifiers being in this format here的一些。

將URL用作名稱空間標識符有幾個原因,但主要是爲了方便 - 它是一個唯一的標識符,通常對用戶有一些附加的含義,就像Java名稱空間通常以「com 「,」org「或」net「。

對於爲什麼命名空間位於URI(技術上,IRI)格式的基本原理,您可以閱讀W3C's standards for XML namespaces。指定XML名稱空間是以RFC3986定義的IRI(國際資源標識符)格式。

有關如何正確使用名稱空間的更多信息,有很多很棒的演練,like this one。更改命名空間時什麼不起作用?

+0

您可能有一個錯字 - 「命名空間不一定是有效的URI」。平均網址? – xcut 2010-04-07 19:41:24

+0

@xcut:命名空間是URI,其中包含URL。 – 2010-04-07 19:42:19

+3

我很清楚這一點。這就是爲什麼說名稱空間標識符不一定是有效的URI是錯誤的。他們這樣做,他們不必是可解析的URL。 – xcut 2010-04-08 10:13:01

2

除了必須是唯一的以外,命名空間沒有語義含義。人們通常使用URI表單,因爲這可能指向文檔,但這不是必需的。

在這種情況下,它是默認名稱空間,您正在使用的應用程序生成.cs文件可能會被硬編碼以使用它。

在一個寫得很好的應用程序中,如果您只是更改命名空間字符串,則不會有任何中斷。

2
xmlns="http://schemas.businessNameHere.com/SoftwareNameHere" 

這是其中一些文件必須存在一個有效的URL - 這是表示一個XML命名空間(如在你的C#應用​​程序命名空間稱爲System.Data或其他)的字符串。

您可以輕鬆更改該字符串 - 這裏有沒有任何被引用。 (但是這是一個常見的誤解)

人們經常使用URL語法,因爲註冊到您/您的公司的域名在全球範圍內保證是唯一的 - >因此,您從其派生的XML名稱空間在全球範圍內也是唯一的。