2012-09-07 20 views
1

下面是這種情況引用定製XSD導致智能感知只以上的工作模式

  1. C語言創建XSD架構稱爲foo.xsd:\用戶\ Win7Guru \文檔\的Visual Studio 2012 \項目\ foo.xsd
  2. 創建新的XML文件
  3. 在XML文檔
  4. 頂部添加<?xml version="1.0" encoding="utf-8"?添加架構標籤<xs:schema xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd"和關閉標籤</xs:schema>
  5. 類型<,等待智能感知出現,但所有的顯示是默認選擇

  1. -->

  2. <![CDATA[]]>

  3. ?

使用Visual Studio 2012 RTM

當我嘗試架構上述步驟5,如

1. <?xml version="1.0" encoding="utf-8"?>

2. <------

3. <xs:schema xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd">

4. </xs:schema>


我得到的定製選擇,以3種比默認選擇等。爲什麼會這樣?

回答

1

我會假設,在第一個場景你輸入的<xs:schema></xs:schema>標籤之間的<,由於如只會在文檔元素內容中有效。

由於xs前綴未綁定到任何命名空間,或者通常是一個VS沒有XSD的命名空間,所以Intellisense處理器並不真正知道要在任何XML中預期的內容。因此,你看到的3件事。

當你<xs:schema>上述類型<,編輯不是由語境的制約(如以前<xs:schema>給出),所以VS經過該文檔全部加載的XSD(foo.xsd是其中之一),並給你,除XML默認值外,在foo.xsd中找到的所有全局元素;因此你看到的東西越多。

我認爲VS編輯器提供的便利似乎增加了混淆,因爲它將XML名稱空間URI與實際的XSD位置相關聯。這很酷,但不是標準。在設計XML名稱空間時,XML名稱空間URI的值與定位相同XML名稱空間的XML Schema位置之間沒有關係。換句話說,已經宣佈的形式的(默認)XML名稱空間:

xmlns="C:\Users\Win7Guru\Documents\Visual Studio 2012\Projects\foo.xsd"

沒有這將指示處理器始終如一地查找一個架構該命名空間標準規範,使用命名空間值本身。

儘管許多人認爲將命名空間URI作爲解析互聯網上實際資源的URL是很好的做法,但許多人更喜歡使用URN作爲更好的方法來避免在某種程度上造成的混淆。

+0

那我到底該做什麼? – Jon

+0

@Jon,你問'爲什麼會這樣',我已經解釋過了;至於你想做什麼,目前還不清楚,也沒有求助。你是否按照foo.xsd編輯XML文件?你爲什麼要輸入'xs:schema'?請澄清,我會幫你。 –

+0

我正嘗試從區域進行智能感應工作。如果這是不可能的,我想知道它爲什麼說不能有多個根元素。 – Jon

0

獨立於intellisense問題,您需要將名稱空間前綴xs綁定到適當的名稱空間名稱。因此請嘗試將

xmlns:xs="http://www.w3.org/2001/XMLSchema" 

添加到文檔的根元素(xs:schema)。正如Petru Gardea所指出的那樣,只有當編輯者具有對命名空間的一些內置知識時,纔會產生啓用智能感知的效果。但是,即使它沒有打開智能感知,如果您想擁有符合的XSD架構文檔,則聲明命名空間也是必需的。

+0

謝謝,我會盡力的。 – Jon

+0

嚴格地說,你必須綁定命名空間前綴才能擁有一個「格式良好的XML文檔」。 –