專利名稱::具有合并的檢驗信息的數據類型的制作方法
技術領域:
:本發(fā)明一般涉及計算機,更具體地來說,涉及計算機編程語言和類型系統(tǒng)。
背景技術:
:全世界范圍內的計算機軟件應用在近幾年已經顯著增加。尤其,個人用戶采用計算機軟件用于諸如文字處理和電子郵件之類的任務。公司使用軟件用于包括數據存儲、通信及電子商務在內的企業(yè)管理的所有方面。本質上,計算機軟件已經變得普遍存在。相應地,軟件開發(fā)者和出售者需要實際上以全世界的各種消費者為基礎來設計軟件。因而,設計者不能再作出關于他們的系統(tǒng)的使用的假設,例如,一位美國的說英文的用戶。相反地,他們必須使他們的軟件國際化。作為這種國際化的一部分,開發(fā)者應當關心他們的系統(tǒng)的用戶的性質,例如語言和位置。全世界的軟件消費者不是通曉單一的一種語言,而是通曉多種語言的。相應地,軟件消費者能說許許多多種不同的語言并進行交互。更進一步地,個人用戶可能是通曉多種語言的,并且更愿意使用一種語言而不是其它語言。從而,在眾多完全不同的語言中,軟件必須易于操作并實用。目前的一個軟件問題(至少是由多種語言的使用所產生的)涉及到檢驗。一般地,檢驗涉及到數據的比較和排序。事實上,檢驗是計算的一個基礎方面。例如,用戶可能會需要定位字符串、比較字符串及分類數據庫記錄。問題是,檢驗不是一致的。尤其來說,它隨語言、文化、用途及習慣而改變。例如,在瑞典z<,而在德國z>。由于相同的字母可用不同的方式表示,串的處理更為復雜。例如,字母é可用一個單個字符表示,也可用基礎字符“e”和重音符號的組合表示。類似地,單個字母可用不同字符表示,例如,在德國,字母“β”可以寫成“ss”。對國際化字符串的不適當的處理尤其可能導致諸如聲名狼藉的土耳其語的I問題之類的微妙的安全性錯誤,其中,試圖使用檢查式“if(url.ToUpper().Left(4)==”FILE”)”定位URL中的FILE∥前綴。在該檢查式中,在比較字符串之前,該字符串被轉換為大寫。然而,在土耳其語中,轉換“file”成大寫就產生了“FILE”,從而該檢查出人意料地失敗了。對于軟件的國際化的一個進一步的問題包括時間。當程序包含數據和時間時,人們需要知道將在哪個時區(qū)翻譯該數據。如果程序指示出已經安排了會議或電視節(jié)目將在下午3點開始,那么,沒有時區(qū)的詳細說明的話就沒有人確定地知道什么時間是下午3點。按照會議請求,一些人可能把時間解釋為他們所在位置的時區(qū),而其它人可能把時間看作會議請求者的時區(qū)。就電視而論,關于規(guī)定的時間是否涉及到觀看者的時區(qū)或東部標準時間,這將是混亂的,因為這是按慣例列出節(jié)目的方式。而且,沒有時間和相對時區(qū)的詳細說明,在軟件程序中編寫和理解時間檢驗將是幾乎不可能的。傳統(tǒng)技術以許多不同的、有問題的方式來處理檢驗問題。例如,一些數據庫系統(tǒng)支持逐列檢驗。換言之,可對某一列的輸入項附加檢驗數據。例如,一個人可能有英語和德語的姓名檢驗。然而,單列不能包含英語和德語字符串兩者。從而,如果數據庫用戶具有來自若干國家的消費者,那么必須把他們放在單獨的表內。而且,數據庫語言是弱類型語言,這對于制造安全、可信賴的軟件來說是有問題的。另一個提供檢驗的傳統(tǒng)的技術是逐線程檢驗。這里,在全局水平上規(guī)定檢驗信息。因此,為了解釋比較式String1>String2,要注意全局聲明。然而,該系統(tǒng)不僅僅是弱類型的,而是它僅允許每次使用單一的語言。通過傳統(tǒng)系統(tǒng)處理檢驗的另一種方式是借助實例。本質上,每個實例必須攜帶檢驗信息。例如SqlStrings1=newSqlString(″llegar″,Spanish);SqlStrings2=newSqlString(″lugar″,English);Intr=s1.CompareTo(s2);這里,s1是西班牙語串,s2是英語串。至少因為對于每個實例來說攜帶附加信息是代價高的,所以該技術是有缺陷的。而且,盡管由于類型相同(即串)該比較式在編譯時將通過,但是在運行時將失敗,因為西班牙語串不能與英語串相比較。從而,該方法也是弱類型的,并且不適合于安全的、可信賴的軟件的制造。因此,本領域中需要一種用于檢驗信息說明和使用的有效的、強類型的系統(tǒng)和方法。
發(fā)明內容下文給出了本發(fā)明的簡要概述,以提供對本發(fā)明的某些方面的基本理解。該概述不是本發(fā)明的廣泛的綜述。并不打算標識本發(fā)明重要/關鍵元素或描繪本發(fā)明的范圍。它唯一的目的是以簡化的形式給出本發(fā)明的一些概念,作為以后給出的更詳細描述的序言。簡單來說,本發(fā)明涉及一種數據約束構造系統(tǒng)和方法。該約束系統(tǒng)包括類型約束和檢驗約束。根據本發(fā)明的一個方面,可將該檢驗約束結合于數據類型約束中,從而允許強類型檢查。例如,可用具有檢驗信息以數據類型<檢驗信息>形式將數據類型參數化。根據本發(fā)明的一個方面,數據類型可以是本地串,檢驗信息可指明該串的語言,例如,串<eng>。更進一步地,檢驗信息可以是分級的,以支持子類型劃分。例如,檢驗約束可包括語言約束和文化約束,可使用文化約束來定義諸如English-US、English-BR或English-AU之類的檢驗約束的子類型。尤其來說,該數據類型也可以是日期時間,其中日期時間提供時間數據。在這種情況下,檢驗約束可以是時區(qū),因為沒有與每個時間相關的時區(qū)的知識就不能比較時間。根據本發(fā)明的另一個方面,包括檢驗約束的數據約束組件可與類屬類型(generictype)結合使用,以產生構造出的類型或進一步限制由其使用的數據類型。例如,List<T>可變成List<String<eng>>。更進一步地,根據本發(fā)明的另一個方面,可使用該數據約束構造系統(tǒng)和方法來將弱類型語言(例如,SQL)映射成強類型語言或系統(tǒng)(例如,C#、JAVA、CLR(具有運行時間類型系統(tǒng)的系統(tǒng)))。為實現上述的以及相關的目標,連同下文的描述和附圖,在這里描述本發(fā)明的某些說明性的方面。這些方面表現出實踐本發(fā)明的不同的方式,所有這些方式都被本發(fā)明所覆蓋。本發(fā)明的其它優(yōu)點和新穎特征可從隨后結合附圖對本發(fā)明的詳細描述中變得顯而易見。本發(fā)明前述的和其它方面將從隨后詳細的描述和簡要描述的附圖中變得顯而易見。圖1是根據本發(fā)明的一方面的數據約束構造系統(tǒng)的框圖。圖2是根據本發(fā)明的一方面的數據約束組件的框圖。圖3是根據本發(fā)明的一方面的檢驗約束組件的框圖。圖4是根據本發(fā)明的一方面的檢驗約束層次的框圖。圖5是根據本發(fā)明的一方面的類型檢查系統(tǒng)的框圖。圖6是根據本發(fā)明的一方面的檢驗抑制組件的框圖。圖7是根據本發(fā)明的一方面的數據約束方法的流程圖。圖8是根據本發(fā)明的一方面的類型檢查方法的流程圖。圖9是根據本發(fā)明的一方面的類型檢查方法的流程圖。圖10是根據本發(fā)明的一方面的、舉例說明合適的操作環(huán)境的圖解框圖。圖11是可與本發(fā)明相互作用的樣例計算環(huán)境的圖解框圖。具體實施例方式現在,根據附圖描述本發(fā)明,其中相同的參考標號標識相同或相應的元件。然而,應該理解到,附圖和詳細描述并不打算將本發(fā)明局限為所揭示的特定形式。相反地,其目的是覆蓋本發(fā)明精神和范圍下的所有修改、等價物及替代方案。如在本申請中使用的那樣,術語“組件”和“系統(tǒng)”是指與計算機有關的實體,可以是硬件、硬件與軟件的組合、軟件或執(zhí)行軟件。例如,組件可以是,但不限于是,在處理器上運行的進程、處理器、對象、可執(zhí)行、執(zhí)行線程、程序及/或計算機。舉例說明,在服務器上運行的應用程序和服務器都可以是組件。一個或多個組件可駐留于進程及/或執(zhí)行線程中,并且組件可定位在計算機上及/或分布在兩個或多個計算機之間。更進一步地,可以按照使用標準編程及/或工程技術以制造軟件、固件、硬件或它們的任何組合來控制計算機執(zhí)行所揭示的發(fā)明的方法、裝置、或制造物品來實施本發(fā)明。這里使用的術語“制造物品”(或者可選地為“計算機程序產品”)意圖包括可從任何計算機可讀設備、載體或媒體進行訪問的計算機程序。例如,計算機可讀媒體可包括,但不限于,磁存儲設備(例如,硬盤、軟盤、磁條)、光盤(例如,光盤(CD)、數字化視頻光盤(DVD)......)、智能卡及閃存設備(例如,卡、條)。另外,應理解到,可使用載體來攜帶諸如在傳輸和接收電子郵件中、或在訪問諸如因特網或局域網(LAN)之類的網絡中所使用的計算機可讀電子數據。當然,本領域的技術人員將認識到,在不背離本發(fā)明的范圍和要旨的情況下,可對該配置作出許多修改。最初轉向圖1,描述了根據本發(fā)明的一方面的數據約束構造系統(tǒng)100。構造系統(tǒng)100包括類型接收器組件110、檢驗信息接收器組件120、約束構造器組件130和數據約束組件140。根據本發(fā)明的一個方面,可將系統(tǒng)100作為用于從弱類型編程系統(tǒng)和語言映射到強類型系統(tǒng)和語言的機制來使用,例如從數據庫語言(例如,SQL、XML)到XQuery、C#或Java等等。更進一步地,可由程序設計員使用構造系統(tǒng)100從零開始或利用輔助工具(例如宏)來編寫代碼。類型接收器組件110接收或檢索包括諸如串之類的公共數據類型和諸如日期時間之類的專用類型的數據類型。檢驗接收器組件120接收或檢索諸如語言或時區(qū)之類的檢驗信息。通常,檢驗信息是所需用以正確比較數據的任何信息。如上所述,類型接收器組件110和檢驗接收器120可接收例如來自弱類型語言、設計者或程序的數據。約束構造器組件130接收來自類型接收器組件110和檢驗接收器組件120的類型和檢驗信息,產生數據約束組件140。圖2舉例說明根據本發(fā)明的一方面的數據約束組件140。如圖示,數據約束組件140可包括類型約束組件210和檢驗約束組件220。數據約束組件140充當約束與之相關聯(lián)的數據的機制。類型約束組件210提供對數據類型的限制。檢驗約束組件220提供對數據種類的進一步的約束。盡管分開說明,應理解到數據約束組件140可表示具有結合于其中的檢驗信息的數據類型。已這樣單獨地例示出數據約束組件140,用以強調本發(fā)明的數據約束可包括對與約束組件140相關的數據類型和種類的約束,并且不以任何方式限制本發(fā)明。根據本發(fā)明的特定方面,可用檢驗約束或信息將數據類型參數化。例如,數據約束組件可由下面的內容表示DataType<CollationConstraint>。因此,本發(fā)明可以產生編譯時間或靜態(tài)錯誤,而不是由傳統(tǒng)技術產生的運行時間或動態(tài)錯誤。作為例子,假設數據類型約束是串,而檢驗約束是語言。進一步假設我們關心以下兩個串String<English>s1;String<German>s2;這里,根據規(guī)定的約束,s1和s2(數據位置標志符(即,變量))必須分別是英語串和德語串?,F在,如果我們試圖將s1與s2相比較,將由編譯器產生靜態(tài)錯誤。將導致編譯時間錯誤,因為編譯器尤其是類型檢查器將認識到具有不同檢驗的串不能比較。從而,通過將檢驗信息結合在類型中而不是結合在實例中,類型間的比較變?yōu)殪o態(tài)錯誤,而不是運行時間錯誤。這在可靠的軟件的產生方面是重要的。差錯或錯誤在它們被發(fā)現的早期是容易修復的。但是,開發(fā)者寧愿產生他們可修復的編譯時間錯誤,而不愿發(fā)行為用戶造成運行時間錯誤的軟件。圖3舉例說明根據本發(fā)明的一方面的檢驗約束組件220。檢驗約束組件220包括語言約束組件310和文化約束組件320。如上論述的那樣,知道串的語言是重要的,從而可正確地將串與相同語言的串作比較。沒有這種知識,則可能發(fā)生想不到的錯誤和安全差錯。因此,語言約束組件310規(guī)定了與數據相關的語言或可變的數據位置標志符(例如,英語、俄語、德語、法語、中文......)。然而,語言單獨地來說通常不能提供用以正確比較串的足夠的信息。有時,語言規(guī)定將隨文化而改變。例如,美式英語可能與英式英語不同,英式英語可能不同于澳大利亞或南非英語。相應地,本發(fā)明提供額外等級的語言粒度(granularity),以允許語言文化的詳細說明,例如串<English-US>或串<English-GB>。然而,應理解到文化約束可以是可選的,語言的一般聲明對于比較來說可能是足夠的。從而,用虛線描繪文化約束組件320以指示它可能是額外的檢驗約束,但不是必需的。更進一步地,應理解到檢驗約束可以是分級的。簡單地轉向圖4,根據本發(fā)明的一方面,舉例說明了示例性的檢驗約束層次400。特別地,該示例性的檢驗約束層次400涉及語言約束。這里,父節(jié)點410僅為英語(English)。子節(jié)點包括美式英語(ENG-US)412、澳大利亞英語(ENG-AU)414和英式英語(ENG-BR)416。更進一步地,英式英語節(jié)點416有其自己的子節(jié)點,代表英式英語的方言(ENG-X)418。相應地,諸如串之類的數據類型可滿足子類型關系。從而,串<ENG-X>和串<ENG>是兼容的,因為ENG-X是ENG的子類型或子語言。換言之,ENG-X可與普通英語相比較。然而,在此例中,串<ENG-US>和串<ENG-AU>或串<ENG-BR>是不兼容或不可比的。為方便地對諸如局部化串之類的數據類型起作用,本發(fā)明提供檢驗以及普通類型上的一般參數化。傳統(tǒng)上,僅實現類屬以提供類型上的參數化。例如,考慮以下的類集classCollection<A>{voidAdd(Aa){...}AItem(inti){...}}可將此類型例示成任意類型的集合,諸如Collection<int>或Collection<Collection<bool{}>>。根據本發(fā)明的一方面,在檢驗上將數據類型參數化;然而,本發(fā)明也允許定義一般化的方法,如staticCollection<String<C>>Sort<C>(Collection<String<C>ss>){...}應注意到,Sort(分類)方法的類屬參數是檢驗,不是類型。類似地,本發(fā)明提供檢驗以及類型上的約束。因此,可將分類限制到特定的語言串,例如,通過簡單地聲明staticCollection<String<C>>Sort<C>whereCeng(Collection<String<C>){...}這里,類集被局限于英語串,并因此分類方法僅分類英語串。圖5舉例說明根據本發(fā)明的一方面的類型檢查系統(tǒng)500。系統(tǒng)500包括兩個數據說明組件510和520,以及一類型檢查組件530。每個數據說明組件包括數據約束組件140和數據512。數據約束組件140包括類型約束組件210和檢驗約束組件220。從而,約束組件140限制數據512的類型和種類。類型檢查器組件530分析數據說明組件510和520,以確保滿足它們的數據約束并確保組件是兼容的。如果其中一個或兩個檢查失敗,類型檢查器可產生編譯時間錯誤。例如,類型檢查器組件530能夠首先通過判定數據的類型和種類,將其分別與約束組件140的約束210和220相比較,來分析數據說明組件510。然后,類型檢查器對數據說明組件520執(zhí)行相同的檢查。隨后,可比較數據約束組件以判定兼容性。具體來說,可比較數據類型約束組件210以確保類型是相同的或兼容的。類似地,可比較檢驗約束組件以確定檢驗是否是相同的或可比的。如果任一個或所有檢查失敗,類型檢查器組件530可產生編譯時間錯誤。至此,主要討論了涉及串和語言信息的檢驗。然而,應理解到,本發(fā)明的檢驗約束并不限于此。例如,圖6舉例說明了根據本發(fā)明的一方面的檢驗約束組件220。檢驗約束組件220包括時區(qū)組件610??墒褂脮r區(qū)組件610來約束諸如日期時間之類的類型。日期時間可代表相對于日歷的日期及/或時間。因此,日期時間的比較僅在實例處于相同時區(qū)內時才有意義。因此,時區(qū)組件610可以Datetime<TimeZone>的形式將諸如日期時間之類的類型參數化。應理解到檢驗不是一個新的概念。然而,本發(fā)明提供一種關于檢驗信息的說明和使用的新穎的、非顯而易見的系統(tǒng)和方法(在下文中更詳細地描述)。例如,在傳統(tǒng)類屬關系中,僅用其它類型將類型參數化。然而,本發(fā)明引入了用檢驗數據參數化的類型。更進一步地,本發(fā)明識別并克服了關于檢驗信息的傳統(tǒng)誤解。特別地,當考慮到檢驗時,本領域的技術人員通常的誤解是檢驗僅僅是讀取或使用數據的用戶的特性。因此,傳統(tǒng)系統(tǒng)已被設計成將檢驗信息全局化地定義為用戶環(huán)境的一部分,每線程或每實例。相反地,本發(fā)明把檢驗看作數據本身的特性,完全與傳統(tǒng)的理解相反。鑒于上述示例性的系統(tǒng),參考圖7-9的流程圖,將更好地理解根據本發(fā)明實施的方法。雖然為了便于解釋,用一系列的塊顯示并描述該方法,但是應知道并理解到,根據本發(fā)明,本發(fā)明不限于塊的順序,一些塊可以不同順序出現及/或與其它塊同時出現。而且,并非所有例示出的塊對于執(zhí)行根據本發(fā)明的方法來說都是必需的。另外,應更進一步地理解到,可以將在下文以及貫穿整個說明書揭示的方法存儲在制造物品中,以便于向計算機傳輸和傳遞這些方法。如這里所使用的那樣,術語制造物品將包括可從任何計算機可讀設備、載體或媒體中訪問的計算機程序。轉向圖7,舉例說明了根據本發(fā)明的一方面的數據約束方法700。在710處,接收數據類型。數據類型可以是諸如串之類的公共類型或諸如日期時間之類的專用類型。在720處,接收檢驗信息。檢驗信息包括一般必需用于比較及/或指令數據的數據。例如,需要串文本語言來比較兩個串,時區(qū)對于比較兩個時間來說是必需的。通過構造器組件接收數據類型和檢驗信息,并在730處產生數據約束。數據約束限制了與之相關的數據的類型和種類。根據本發(fā)明的一個方面,數據約束可對應于結合了檢驗信息的數據類型。例如,數據約束可以是由諸如數據type<language>或更特別地為string<English>之類的檢驗信息參數化的數據類型。還應理解到可以使用本約束方法以便于將弱類型語言(例如,SQL)映射到強類型語言(例如,C#、Java......),其中,從弱類型語言中接收類型和約束。此外,應注意到可結合類屬類型一起使用產生的數據約束。如Array<T>之類的類屬類型是類型T根據實例來確定的數據類型。從而,Array<T>可以是串列表、整數列表、記錄列表等等。具有固定類型的類屬類型,例如Array<Int>,被稱為是構造出的類型。根據本發(fā)明的一方面,可同類屬類型一起使用檢驗信息與數據約束,以產生構造出的類型或進一步地約束可使用的類型或數據。例如SortableArray<T>WhereTString<C>Ceng{}這里,T是某一檢驗C的串,并且該檢驗必需是英語。在此例中,可分類英語串的陣列。圖8描繪了根據本發(fā)明的一方面的類型檢查方法800。在810處,接收數據說明組件。數據說明組件包括由類型約束和檢驗約束組成的數據約束組件以及數據或變量位置標志符。在820處,作出關于該數據是否是由類型約束規(guī)定的類型的判定。例如,該數據是否是規(guī)定的串類型?如果該數據和數據約束的類型不同,那么過程進行到840處,產生錯誤。如果類型是相同的,那么過程進行到830處,作出關于該數據是否滿足檢驗約束的判定。例如,該串是否是所要求的英語串?如果檢驗約束滿足,則過程終止。如果檢驗約束不滿足,過程進行到840處,產生錯誤。隨后,過程終止。圖9是根據本發(fā)明的一方面的另一個類型檢查方法900。一旦各數據說明組件被檢查了類型,則可檢查它們之間的比較。在910處,接收第一說明組件。在920處接收第二說明組件。在930處,檢驗每個說明組件的類型以判定它們是否是相同的或可比的。例如,一個串和一個串是可比的,而一個串和一個整數是不可比的。如果類型是不可比的,那么方法進行到950處,產生錯誤。如果類型是相同的或可比的,過程進行到940處,作出關于該檢驗約束是否可比的判定。例如,一個英語串和一個德語串是不可比的,而一個英語串和另一個英語串是可比的。更進一步地,在定義檢驗的語言的情況下,可能存在可比的子類型關系,例如,普通英語和英式英語(例如,eng和eng-br)。如果檢驗信息是可比的,該方法無錯誤的終止。然而,如果檢驗信息是不兼容或不可比的,在950出產生錯誤并且方法終止。為了提供用于本發(fā)明的各方面的上下文環(huán)境,圖10和11以及下面的描述提供了可實施本發(fā)明的各個方面的適當的計算環(huán)境的簡要的、一般的描述。雖然已經在運行于計算機和/或多個計算機上的計算機程序的計算機可執(zhí)行指令的一般上下文環(huán)境中描述了本發(fā)明,但是本領域的技術人員將認識到本發(fā)明還可與其它程序模塊組合來實現。一般來說,程序模塊包括例行程序、程序、組件、數據結構等,它們執(zhí)行特定的任務和/或實現特定的抽象數據類型。而且,本領域的技術人員將理解可用其它計算機系統(tǒng)配置來實施本發(fā)明的方法,包括單處理器或多處理器計算機系統(tǒng)、小型計算設備、大型計算機、以及個人計算機、手持計算設備、基于微處理器的或可編程的消費電子產品等等。還可在分布式計算環(huán)境中實施所例示的本發(fā)明的各個方面,分布式計算環(huán)境中,任務是由通過通信網絡鏈接的遠程處理設備執(zhí)行的。然而,本發(fā)明的某些(如果不是全部)方面可在單獨的計算機上實施。在分布式計算環(huán)境中,程序模塊可位于本地和遠程存儲器存儲設備中。參考圖10,用于實現本發(fā)明的示例性環(huán)境1010包括計算機1012。計算機1012包括處理單元1014、系統(tǒng)存儲器1016以及系統(tǒng)總線1018。系統(tǒng)總線1018將包括但不限于系統(tǒng)存儲器1016的各種系統(tǒng)組件連接到處理單元1014。處理單元1014可以是各種可用的處理器中的任何一種。雙微處理器和其它多處理器架構也可用作處理單元1014。系統(tǒng)總線1018可以是若干類型總線結構中的任一種,包括使用各種總線結構體系中的任一種的存儲器總線或存儲器控制器、外圍總線和/或局部總線。例如但不限于,這種總線結構體系包括工業(yè)標準結構(ISA)總線、微通道結構(MCA)總線、擴展ISA(EISA)總線、智能驅動器電子設備(IDE)、VESA局部總線(VLB)、外設部件互連(PCI)、通用串行總線(USB)、高級圖形端口(AGP)、個人計算機存儲卡國際協(xié)會(PCMCIA)總線以及小型計算機系統(tǒng)接口(SCSI)。系統(tǒng)存儲器1016包括易失性存儲器1020和非易失性存儲器1022。包含如在啟動期間幫助計算機1012內的各元件間傳輸信息的基本例行程序的基本輸入/輸出系統(tǒng)(BIOS)存儲在非易失性存儲器1022中。作為例示,但非限制,非易失性存儲器1022可包括只讀存儲器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)、電可擦除ROM(EEPROM)、或閃存。易失性存儲器1020包括隨機存取存儲器,它作為外部高速緩沖存儲器。作為例示但非限制,RAM有各種形式,例如同步RAM(SRAM)、動態(tài)RAM(DRAM)、同步DRAM(SDRAM)、雙數據率SDRAM(DDRSDRAM)、增強型SDRAM(ESDRAM)、同步鏈(synchlink)DRAM(SLDRAM)以及直接RambusRAM(DRRAM)。計算機1012還包括可移動/不可移動、易失性/非易失性的計算機存儲介質。例如,圖10例示了盤存儲器1024。盤存儲器1024包括但不限于磁盤驅動器、軟盤驅動器、磁帶驅動器、Jaz驅動器、Zip驅動器、LS-100驅動器、閃存卡、或記憶棒之類的設備。此外,盤存儲器1024可包括與包括但不限于光盤驅動器的其它存儲介質分離或組合的存儲介質,光盤驅動器例如緊致盤ROM(CD-ROM)、CD可錄制驅動器(CD-RDrive)、CD可復寫驅動器(CD-RWDrive)或數字通用盤ROM驅動器(DVD-ROM)。為了便于將盤存儲設備1024連接到系統(tǒng)總線1018,通常使用諸如接口1026之類的可移動的或不可移動的接口。要理解到,圖10描述了充當用戶和適用的操作環(huán)境1010中描述的基本計算機資源之間的中介的軟件。這種軟件包括操作系統(tǒng)1028。操作系統(tǒng)1028可存儲于盤存儲器1024上,用于控制和分配計算機系統(tǒng)1012的資源。系統(tǒng)應用程序1030通過存儲于系統(tǒng)存儲器1016或盤存儲器1024上的程序模塊1032和程序數據1034來利用操作系統(tǒng)1028對資源的管理。還要理解到可用各種操作系統(tǒng)或操作系統(tǒng)的組合來實施本發(fā)明。用戶通過輸入設備1036將信息或命令輸入到計算機1012。輸入設備1036包括但不限于諸如鼠標之類的指點設備、軌跡球、觸筆、觸板、鍵盤、話筒、操縱桿、游戲盤、圓盤式衛(wèi)星天線、掃描儀、TV調諧器卡、數字照相機、數字攝像機、web照相機等等。這些和其它輸入設備通過接口端口1038,經系統(tǒng)總線1018連接到處理單元1014。接口端口1038包括例如串口、并口、游戲端口、通用串行總線(USB)。輸出設備1040使用某些與輸入設備1036相同類型的端口。從而,例如,USB端口可用于向計算機1012提供輸入,以及從計算機1012將信息輸出到輸出設備1040。提供輸出適配器1042來例示出存在某些輸出設備1040,尤其例如顯示器(如平板顯示器和CRT顯示器)、揚聲器、打印機等,它們要求特殊的適配器。作為例示但非限制,輸出適配器1042包括視頻卡和聲卡,它們提供了一種輸出設備1040和系統(tǒng)總線1018之間的連接的手段。應注意到其它設備和/或設備的系統(tǒng)提供輸入和輸出能力,例如遠程計算機1044。計算機1012可工作于適用對諸如遠程計算機1044之類的一個或多個遠程計算機的邏輯連接的連網環(huán)境中。遠程計算機1044可以是個人計算機、服務器、路由器、網絡PC、工作站、基于微處理器的設備、對等設備或其它公共網絡節(jié)點等,一般包括關于計算機1012描述的許多或全部元件。處于簡要的目的,遠程計算機1044僅例示出存儲器存儲設備1046。遠程計算機1044通過網絡接口1048與計算機1012邏輯連接,然后通過通信連接1050而在物理上進行連接。網絡接口1048包括通信網絡,例如局域網(LAN)和廣域網(WAN)。LAN技術包括光纖分布式數據接口(FDDI)、銅芯分布式數據接口(CDDI)、以太網/IEEE1002.3、令牌環(huán)/IEEE1002.5等等。WAN技術包括但不限于點對點鏈接、類似于綜合業(yè)務數字網絡(ISDN)的電路交換網絡及其變型、分組交換網絡、數字訂戶線路(DSL)。通信連接1050指的是用于將網絡接口1048連接到總線1018的硬件/軟件。雖然出于例示的目的示出通信連接1050位于計算機1012內,但是它也可在計算機1012的外部。出于示例性的目的,對于到網絡接口1048的連接所必需的硬件/軟件包括但不限于內部和外部技術,例如包括常規(guī)電話級調制解調器、電纜調制解調器、DSL調制解調器、ISDN適配器、以太網卡之類的調制解調器。圖11是本發(fā)明可與之相互的示例計算環(huán)境1100的示意框圖。系統(tǒng)1100包括一個或多個客戶端1110。客戶端1110可以是硬件和/或軟件(例如線程、進程、計算設備)。系統(tǒng)1100還包括一個或多個服務器1130。服務器1130可以是硬件和/或軟件(例如線程、進程、計算設備)。例如,服務器1130能夠收容線程來通過采用本發(fā)明執(zhí)行轉換??蛻舳?110和服務器1130之間的一個可能的通信可以采用適用于在兩個或多個計算機進程之間傳輸的數據分組的形式。系統(tǒng)1100包括通信框架1150,通信框架可用于促進客戶端1110和服務器1130之間的通信??蛻舳?110操作上連接到一個或多個客戶端數據存儲器1160,客戶端數據存儲器可用于存儲客戶端1110的本地信息。類似地,服務器1130操作上連接到一個或多個服務器數據存儲器1140,服務器數據存儲器可用于存儲服務器1130的本地信息。上述已經描述的內容包括本發(fā)明的例子。當然,不可能為了描述本發(fā)明的目的而描述組件或方法的每一可構想的組合,但本領域的技術人員可以認識到,本發(fā)明的很多其它組合和置換都是可能的。因此,本發(fā)明旨在包含落在所附權利要求書的精神和范圍之內的所有這樣的變換、修改和變化。此外,在詳細描述或者權利要求之中使用了術語“包括”的意義上,這一術語以類似于術語“包含”的方式意味著包含性的,如術語“包含”在權利要求書中被用作過渡詞時所解釋的。權利要求1.一種數據約束系統(tǒng),其特征在于,包括接收與數據相關的類型的類型接收器組件;接收與數據相關的檢驗信息的檢驗信息接收器組件;使用所接收的類型和檢驗信息,產生包括類型約束與檢驗約束的數據約束組件的構造組件。2.如權利要求1所述的系統(tǒng),其特征在于,所述檢驗約束結合于所述數據類型中。3.如權利要求2所述的系統(tǒng),其特征在于,通過檢驗信息將所述類型參數化。4.如權利要求3所述的系統(tǒng),其特征在于,數據約束組件采用type<collationinformation>的形式。5.如權利要求2所述的系統(tǒng),其特征在于,連同類屬類型一起使用數據約束組件以創(chuàng)建構造出的類型。6.如權利要求1所述的系統(tǒng),其特征在于,所述檢驗約束是分級的,以支持檢驗子類型關系。7.如權利要求1所述的系統(tǒng),其特征在于,檢驗約束包括語言約束組件。8.如權利要求7所述的系統(tǒng),其特征在于,檢驗約束包括文化約束組件。9.如權利要求1所述的系統(tǒng),其特征在于,檢驗約束包括時區(qū)。10.如權利要求1所述的系統(tǒng),其特征在于,數據約束組件是參數化的類型。11.如權利要求1所述的系統(tǒng),其特征在于,類型是串,檢驗信息是語言。12.如權利要求1所述的系統(tǒng),其特征在于,數據類型涉及時間,檢驗信息是時區(qū)。13.如權利要求1所述的系統(tǒng),其特征在于,類型和檢驗信息是從弱類型程序中接收的。14.一種將數據映射到強類型語言的系統(tǒng),其特征在于,包括用于檢索數據類型的裝置;用于檢索檢驗約束的裝置;及用于將檢驗約束結合于數據類型中以允許靜態(tài)類型檢查的裝置。15.如權利要求14所述的系統(tǒng),其特征在于,數據類型是串,檢驗約束包括語言約束。16.如權利要求14所述的系統(tǒng),其特征在于,檢驗約束包括文化約束。17.如權利要求16所述的系統(tǒng),其特征在于,檢驗約束是數據類型參數。18.如權利要求14所述的系統(tǒng),其特征在于,數據類型涉及時間,檢驗約束是時區(qū)。19.一種數據約束方法,其特征在于,包括接收數據類型;接收檢驗數據;產生數據約束,其中,所述檢驗信息結合于所述數據類型中。20.如權利要求19所述的方法,其特征在于,用檢驗信息將數據類型參數化。21.如權利要求20所述的方法,其特征在于,以datatype<collationinformation>的形式規(guī)定所述約束。22.如權利要求20所述的方法,其特征在于,數據類型是串,檢驗信息是語言。23.如權利要求22所述的方法,其特征在于,檢驗信息包括規(guī)定語言子類型的文化數據。24.如權利要求20所述的方法,其特征在于,數據類型是日期時間,檢驗信息是時區(qū)。25.如權利要求19所述的方法,其特征在于,還包括使用所產生的數據約束作為類屬類型參數來產生構造出的類型。26.一種具有存儲于其上的如權利要求19所述的計算機可執(zhí)行組件的計算機可讀媒體。27.一種類型檢查方法,其特征在于,包括接收包括由數據類型和結合于其中的檢驗信息組成的約束組件,以及與約束組件相關的數據的數據說明組件;對數據檢查數據類型;對數據檢查檢驗信息;及如果任一或全部檢查失敗,產生編譯時間錯誤。28.如權利要求27所述的方法,其特征在于,還包括比較兩個數據說明組件以判定兼容性。29.如權利要求28所述的方法,其特征在于,比較兩個數據說明組件包括接收第一數據說明組件;接收第二數據說明組件;比較第一數據說明組件和第二說明組件的數據類型;及比較第一數據說明組件和第二說明組件的檢驗信息。30.如權利要求29所述的方法,其特征在于,如果滿足子類型關系,那么檢驗信息是兼容的。31.如權利要求27所述的方法,其特征在于,數據類型是串,檢驗信息包括語言和文化。32.如權利要求27所述的方法,其特征在于,檢驗信息包括時區(qū)。33.一種具有存儲于其上的如權利要求27所述的計算機可執(zhí)行組件的計算機可讀媒體。34.一種編程語言或系統(tǒng)之間的映射方法,其特征在于,包括從弱類型語言或系統(tǒng)中接收數據類型和檢驗信息;及產生數據約束組件,所述數據約束組件包括由檢驗信息參數化的數據類型。35.如權利要求34所述的方法,其特征在于,以datatype<collationinformation>的形式規(guī)定約束。36.如權利要求34所述的方法,其特征在于,從數據庫中接收數據類型和檢驗信息,使用數據約束組件將所述數據類型和檢驗信息映射到強類型編程語言。37.如權利要求36所述的方法,其特征在于,強類型編程語言包括C#、Java和Xquery中的一種。38.如權利要求34所述的方法,其特征在于,數據類型是串,檢驗信息包括語言。39.如權利要求37所述的方法,其特征在于,所述映射提供了在系統(tǒng)上同時支持一種以上語言的多語種系統(tǒng)。40.一種具有存儲于其上的如權利要求34所述的計算機可執(zhí)行組件的計算機可讀媒體。全文摘要本發(fā)明涉及將檢驗信息結合于數據類型的系統(tǒng)和方法。特別地,本發(fā)明提供用檢驗信息將數據類型參數化,從而兩個不同檢驗間的比較產生靜態(tài)類型錯誤,而不是運行時間錯誤。此外,本發(fā)明提供了便利地用局部化數據類型工作,以允許對檢驗和普通類型進行一般參數化。在串的上下文中,本發(fā)明允許多種語言中的串的并行使用,并便于正確的操作。文檔編號G06F17/30GK1740969SQ200510087509公開日2006年3月1日申請日期2005年7月20日優(yōu)先權日2004年8月25日發(fā)明者A·E·吉姆巴爾,A·A·迪塞,H·J·M·美吉爾,Y·V·萊斯因斯凱申請人:微軟公司