<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    FORTUNE

    THE WAY TO THE MASTER...
    posts - 49, comments - 18, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    標題:Xml文檔驗證—基礎(chǔ)篇

    Posted on 2006-03-23 22:01 fortune 閱讀(521) 評論(0)  編輯  收藏 所屬分類: java技術(shù)
    一、Xml可擴展性的優(yōu)勢與隱患?

      從Xml(Extensible Markup Language可擴展標記語言)這個名字就可以知道,Xml是易于擴展的。的確,作為一種描述"元數(shù)據(jù)"的標記語言,Xml規(guī)范雖然為構(gòu)建Xml文檔提供了一些基本語法,但是并沒有定義確切的標記,任何人都能夠根據(jù)需要使用自定義的元素和屬性為Xml文檔提供結(jié)構(gòu)信息以擴充標記集。?

      Xml的可擴展是不難理解的,作為一種新標記語言,Xml語言提供了一個可擴展的、強有力的標準來描述數(shù)據(jù),使得數(shù)據(jù)可以在應(yīng)用程序中使用或在不同平臺、不同應(yīng)用中交換。Xml只關(guān)心如何描述數(shù)據(jù),并不指定如何為一個最終用戶或者系統(tǒng)顯示數(shù)據(jù)。(當然,你可以通過Xml相關(guān)的其他技術(shù)如XPath、XSlt或者程序語言來操縱和顯示這些數(shù)據(jù))。?

      在這一點上,Xml與同樣繼承自SGML(Standard Generalized Markup Language 標準通用標記語言)并且也是SGML子集的Html有很大的不同。Html的目的是通過一個(例如一個瀏覽器)來顯示數(shù)據(jù),你只能使用那些預先定義的特定標記。例如,要建立一個鏈接,你必須使用<a>標記,并且,你只能在這個標記內(nèi)使用"href"屬性指定鏈接目標所在的位置;同樣,要在Html中導入一幅圖象,你也只能使用<img>標記,并且只能在這個標記中使用"src"屬性指定圖象文件的路徑。其他Html的元素和屬性也一樣,它們都被預定義了特定的名稱。?

      Xml這種允許自由地創(chuàng)建標記和屬性的特點為應(yīng)用帶來了極大的方便。根據(jù)應(yīng)用需要,你可以為那些標記指定更有意義的、自描述的名稱而不用一味遵循那些有可能并不合適的某種限制。比如,你大可用<Link>取代<a>標記,用"path"取代"href"屬性使鏈接一目了然。放心,這在Xml規(guī)范中是允許的。?

      實際上也正是由于Xml可擴展的優(yōu)點,Xml文檔在各個領(lǐng)域(如科技詞典、法律詞匯表、醫(yī)學詞匯表、計算機詞匯表、公用電話交換網(wǎng)絡(luò)詞匯等)的標準化建設(shè)中得到了廣泛的應(yīng)用。?

      這種定制Xml文檔標記的"自由"無疑具有明顯的優(yōu)勢,并且在特定的環(huán)境下的確是這樣。然而, Xml文檔很多時候被用于數(shù)據(jù)交換,Xml為標記那些可以在應(yīng)用程序之間以平臺無關(guān)的方式進行交換的數(shù)據(jù)提供了一種非常有用而且可以擴展的框架。它被廣泛地用于在應(yīng)用程序?qū)ο笾g、不同平臺應(yīng)用中,甚至是Internet上交換數(shù)據(jù)。這個時候,創(chuàng)建你自己的Xml文檔元素和屬性名字的能力確實需要付出一定的代價,當你想要與其他的不熟悉你的文當結(jié)構(gòu)的客戶或者應(yīng)用程序交換Xml文檔時,這種代價尤為突出。所有這些參與者(平臺、應(yīng)用程序及人)都能正確使用這些Xml文檔嗎?它們中的自定義標記能夠被識別嗎??

      乍看起來,這樣似乎已經(jīng)導致了混亂。畢竟,如果每個人都可以使用不遵循任何命名規(guī)范的標記來創(chuàng)建Xml文檔,其他人怎么能夠使用這些文檔呢??


      二、Xml驗證-自由的相對性?
      看來,完全遵循xml規(guī)范的格式正確的文檔并不總能滿足需要。許多情況下還需要保證文檔的有效性。這時,一種"元數(shù)據(jù)"文檔被創(chuàng)建來定義這個Xml文檔中包含什么樣的元素、屬性和其他項目。有三種這樣的"元數(shù)據(jù)"文檔,它們是DTD、XML-DR Schema以及W3C Schema,它們定義了一個Xml文檔必須遵循什么樣的結(jié)構(gòu)才是有效的。通過定義Xml文檔的結(jié)構(gòu),應(yīng)用能夠在執(zhí)行任何計算和轉(zhuǎn)換之前對文檔進行驗證。?

      現(xiàn)在很清楚了,你盡可以在xml文檔中自定義所需要的標記以描述數(shù)據(jù),任何想使用這個文檔的人也可以使用它,只要你為他們提供一個文檔是如何組織以及使用什么樣的標記描述數(shù)據(jù)的定義即可!由于XSD Schema是萬維網(wǎng)聯(lián)盟W3C的推薦標準,下面的驗證均只針對它展開。?



      三、從Xml文檔內(nèi)部引用Xml Schema驗證?
      在創(chuàng)建了一個Xml Schema文檔之后,就可以用它來驗證xml文檔的有效性了。做起來很簡單,只需要在xml文檔根元素內(nèi)引用該schema文件就可以了。不過,根據(jù)xml schema文檔是否包含targetNamespace屬性,xml文檔內(nèi)的引用有以下兩種方式:?

      1、使用noNamespceSchemaLocation屬性引用schema文件?

      當xml schema文檔不包括targetNamespace屬性時,應(yīng)當通過xml文檔根元素的noNamespaceSchemaLocation屬性及W3C的schmea實例命名空間(xmlns:xsi="http://www.w3.org/2001/XMLScheam-instance")來引用名xml schema文件。下面的例子引用不包含"targetNamespace"屬性的名為"noTargetNS.xsd"的架構(gòu)文件:?
    <?xml version="1.0" encoding="utf-8" ?>
    <Employees Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    "xsi:noNamespaceSchemaLocation="noTargetNS.xsd">
    <Name>LinY</Name>
    <Age>42</Age>
    </Employees>



      2、使用schemaLocation屬性引用schema文件?

      然而,如果xml schmea文件包含了一個targetNamespace 屬性,在xml文檔中就將通過schemaLocation屬性而不是noNamespaceSchemaLocation屬性來引用schema文檔。而且,這個屬性所指定的值必須是完整的。它需要包含以空格分開的兩部分,前一部分是Uri,這個Uri與schema文檔的targetNamespace屬性內(nèi)部引用的Uri是一致的;后一部分是schema文件完整路徑及名稱。另外,Xml文檔的根元素也必須聲明schema實例名字空間(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"),下面的例子引用包含"targetNamespace"屬性的名為yesTargetNS.xsd架構(gòu)文件:?

    <?Xml version="1.0" encoding="utf-8" ?>
    <Employees Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.tuha.net yesTargetNS.xsd"
    Xmlns="http://www.tuha.net">
    <Name>XiaoM</Name>
    <Age>25</Age>
    </Employees>


      在xml文檔內(nèi)部正確地引用schema文件之后,在解析xml文檔時將執(zhí)行驗證。?

      四、在Visual Studio.Net IDE中使用Xml Schmea驗證?

      Visual Studio.Net IDE為使用xml架構(gòu)提供了豐富的支持。其集成的xml架構(gòu)設(shè)計器,能夠以組件拖放的方式創(chuàng)建xml架構(gòu)文檔;集成的xml文檔設(shè)計器,能夠基于現(xiàn)有xml文檔創(chuàng)建xml架構(gòu)。這之后,你可以關(guān)聯(lián)xml文檔和xml架構(gòu)文件并執(zhí)行xml文檔的正確性及有效性驗證操作。這樣做時,你只需要作簡單的代碼修改甚至不用手寫一行代碼就能完整文檔驗證的所有工作。?

      1、創(chuàng)建xml架構(gòu)?
      可以通過任何文本編輯器創(chuàng)建xml架構(gòu)文件,顯然,這樣做比較麻煩的,你必須熟知架構(gòu)文檔的規(guī)范。作為補充,Visual Studio.Net IDE中提供了好幾種創(chuàng)建Xml架構(gòu)文檔的簡單方式。使用Xml 架構(gòu)設(shè)計器,從工具箱中拖入你需要的節(jié)點元素組件,就可以完成xml架構(gòu)文檔創(chuàng)建的絕大部分工作(如果你不需要修改節(jié)點數(shù)據(jù)類型的話,這也是創(chuàng)建xml架構(gòu)文件的全部工作)。特別地,如果你已經(jīng)創(chuàng)建了xml文檔,你可以基于現(xiàn)有 XML 文件創(chuàng)建架構(gòu),通過簡單的操作,就可以生成此xml文檔應(yīng)遵循的xml架構(gòu)文件:?
      ◇將Xml源文檔(.xml 文件)加載到"Xml設(shè)計器"中。?
      ◇從IDE菜單欄中選擇"XML"菜單項并單擊"創(chuàng)建架構(gòu)"。?
      就這么簡單,查看項目"所有文件",你會發(fā)現(xiàn),與xml文檔同名的 XML 架構(gòu)(.xsd 文件)生成了。?

      不過,以這種方法產(chǎn)生xml架構(gòu)時,所有數(shù)據(jù)類型都被默認設(shè)置為 xsd:string類型,因此,可能需要修改它們以符合 Xml文檔的需要。?

      2、關(guān)聯(lián)xml文檔和xml架構(gòu)文件?

      如果已經(jīng)創(chuàng)建了xml源文件和Xml架構(gòu)文件,要使該xml架構(gòu)文件對xml文檔發(fā)生作用,必須將xml源文件和xml架構(gòu)文件關(guān)聯(lián)起來。在Visual Studio.Net IDE(集成開發(fā)環(huán)境)中,實現(xiàn)這一關(guān)聯(lián)非常簡單,通過定義Xml文件的targetSchema屬性就可以完成:?
      ◇將Xml 文件加載到"Xml 設(shè)計器"中。?
      ◇切換到"Xml"視圖模式。?
      ◇在屬性窗口中,從"targetSchema"屬性的下拉列表中選擇與名字空間相關(guān)聯(lián)的的架構(gòu)文件。?

      這時你應(yīng)該會注意到,targetSchema屬性的下拉框?qū)⒘谐鲈擁椖堪ǖ乃衳ml架構(gòu)及一些建議的規(guī)范,包括相應(yīng)的名字空間。這同時也告訴我們,如果所需要的xml架構(gòu)并不包含在該項目中,你將需要在這里鍵入將用于驗證 XML 文檔的架構(gòu)的統(tǒng)一資源標識符 (URI)。?

      完成這幾步后,返回查看你的xml源文件,會發(fā)現(xiàn),在根元素內(nèi),xml架構(gòu)以默認名字空間被引用。?

      附帶說明一下,清除targetSchema屬性的內(nèi)容就可以移除xml文檔與xml架構(gòu)間的關(guān)聯(lián)。?

      3、執(zhí)行驗證操作?
      將xml架構(gòu)文件與 Xml源文件關(guān)聯(lián)后,"Xml 設(shè)計器"的驗證功能可以檢查Xml文件是否有效:?
      ◇將要檢查的 XML 文件加載到"XML 設(shè)計器"中。?
      ◇從"XML"菜單選擇"驗證 Xml 數(shù)據(jù)"。?

      這時,執(zhí)行驗證操作。這一過程也同時檢查xml文檔的正確性,如果發(fā)現(xiàn)錯誤,狀態(tài)欄將予以指示。如果發(fā)生有效性錯誤,系統(tǒng)將提示"發(fā)現(xiàn)驗證錯誤"并在"任務(wù)列表"中提供詳細說明,否則,系統(tǒng)提示"未找到驗證錯誤"而通過驗證。?

    主站蜘蛛池模板: selaoban在线视频免费精品| 伊人久久五月丁香综合中文亚洲| 在线播放免费人成视频网站| 永久免费bbbbbb视频| 久久亚洲精品专区蓝色区| 国产精彩免费视频| 亚洲另类古典武侠| 久久精品无码一区二区三区免费| 精品久久久久久亚洲精品| 国产三级在线观看免费| 亚洲精品无码久久久久YW| 永久免费观看的毛片的网站| 国产亚洲精彩视频| 国产亚洲欧洲Aⅴ综合一区 | 亚洲人成电影网站色| 成人男女网18免费视频| 极品美女一级毛片免费| 自拍偷自拍亚洲精品情侣| 久久99毛片免费观看不卡| 久久亚洲AV成人无码| 成年大片免费视频| 深夜A级毛片视频免费| 亚洲熟妇丰满多毛XXXX| 免费不卡在线观看AV| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 免费A级毛片无码A∨免费| 亚洲va成无码人在线观看| 日韩在线免费播放| 国产一级黄片儿免费看| 亚洲免费在线视频观看| 国产精品冒白浆免费视频| 两个人看的www高清免费观看| 亚洲精品国产成人| 亚洲成AⅤ人影院在线观看| 国产一级片免费看| 亚洲天然素人无码专区| 亚洲性猛交XXXX| 日韩免费a级毛片无码a∨| 亚洲免费无码在线| 国产精品高清视亚洲精品| 久久综合亚洲色HEZYO国产|