背景技术
全世界范围内的计算机软件应用在近几年已经显著增加。尤其,个人用户采用计算机软件用于诸如文字处理和电子邮件之类的任务。公司使用软件用于包括数据存储、通信及电子商务在内的企业管理的所有方面。本质上,计算机软件已经变得普遍存在。相应地,软件开发者和出售者需要实际上以全世界的各种消费者为基础来设计软件。因而,设计者不能再作出关于他们的系统的使用的假设,例如,一位美国的说英文的用户。相反地,他们必须使他们的软件国际化。作为这种国际化的一部分,开发者应当关心他们的系统的用户的性质,例如语言和位置。
全世界的软件消费者不是通晓单一的一种语言,而是通晓多种语言的。相应地,软件消费者能说许许多多种不同的语言并进行交互。更进一步地,个人用户可能是通晓多种语言的,并且更愿意使用一种语言而不是其它语言。从而,在众多完全不同的语言中,软件必须易于操作并实用。目前的一个软件问题(至少是由多种语言的使用所产生的)涉及到检验。
一般地,检验涉及到数据的比较和排序。事实上,检验是计算的一个基础方面。例如,用户可能会需要定位字符串、比较字符串及分类数据库记录。问题是,检验不是一致的。尤其来说,它随语言、文化、用途及习惯而改变。例如,在瑞典z<,而在德国z>。由于相同的字母可用不同的方式表示,串的处理更为复杂。例如,字母é可用一个单个字符表示,也可用基础字符“e”和重音符号的组合表示。类似地,单个字母可用不同字符表示,例如,在德国,字母“β”可以写成“ss”。对国际化字符串的不适当的处理尤其可能导致诸如声名狼藉的土耳其语的I问题之类的微妙的安全性错误,其中,试图使用检查式“if(url.ToUpper().Left(4)==”FILE”)”定位URL中的FILE:∥前缀。在该检查式中,在比较字符串之前,该字符串被转换为大写。然而,在土耳其语中,转换“file”成大写就产生了“FILE”,从而该检查出人意料地失败了。
对于软件的国际化的一个进一步的问题包括时间。当程序包含数据和时间时,人们需要知道将在哪个时区翻译该数据。如果程序指示出已经安排了会议或电视节目将在下午3点开始,那么,没有时区的详细说明的话就没有人确定地知道什么时间是下午3点。按照会议请求,一些人可能把时间解释为他们所在位置的时区,而其它人可能把时间看作会议请求者的时区。就电视而论,关于规定的时间是否涉及到观看者的时区或东部标准时间,这将是混乱的,因为这是按惯例列出节目的方式。而且,没有时间和相对时区的详细说明,在软件程序中编写和理解时间检验将是几乎不可能的。
传统技术以许多不同的、有问题的方式来处理检验问题。例如,一些数据库系统支持逐列检验。换言之,可对某一列的输入项附加检验数据。例如,一个人可能有英语和德语的姓名检验。然而,单列不能包含英语和德语字符串两者。从而,如果数据库用户具有来自若干国家的消费者,那么必须把他们放在单独的表内。而且,数据库语言是弱类型语言,这对于制造安全、可信赖的软件来说是有问题的。另一个提供检验的传统的技术是逐线程检验。这里,在全局水平上规定检验信息。因此,为了解释比较式String1>String2,要注意全局声明。然而,该系统不仅仅是弱类型的,而是它仅允许每次使用单一的语言。通过传统系统处理检验的另一种方式是借助实例。本质上,每个实例必须携带检验信息。例如:
SqlString s1=new SqlString(″llegar″,Spanish);
SqlString s2=new SqlString(″lugar″,English);
Int r=s1.CompareTo(s2);这里,s1是西班牙语串,s2是英语串。至少因为对于每个实例来说携带附加信息是代价高的,所以该技术是有缺陷的。而且,尽管由于类型相同(即串)该比较式在编译时将通过,但是在运行时将失败,因为西班牙语串不能与英语串相比较。从而,该方法也是弱类型的,并且不适合于安全的、可信赖的软件的制造。
因此,本领域中需要一种用于检验信息说明和使用的有效的、强类型的系统和方法。
具体实施方式
现在,根据附图描述本发明,其中相同的参考标号标识相同或相应的元件。然而,应该理解到,附图和详细描述并不打算将本发明局限为所揭示的特定形式。相反地,其目的是覆盖本发明精神和范围下的所有修改、等价物及替代方案。
如在本申请中使用的那样,术语“组件”和“系统”是指与计算机有关的实体,可以是硬件、硬件与软件的组合、软件或执行软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行、执行线程、程序及/或计算机。举例说明,在服务器上运行的应用程序和服务器都可以是组件。一个或多个组件可驻留于进程及/或执行线程中,并且组件可定位在计算机上及/或分布在两个或多个计算机之间。
更进一步地,可以按照使用标准编程及/或工程技术以制造软件、固件、硬件或它们的任何组合来控制计算机执行所揭示的发明的方法、装置、或制造物品来实施本发明。这里使用的术语“制造物品”(或者可选地为“计算机程序产品”)意图包括可从任何计算机可读设备、载体或媒体进行访问的计算机程序。例如,计算机可读媒体可包括,但不限于,磁存储设备(例如,硬盘、软盘、磁条)、光盘(例如,光盘(CD)、数字化视频光盘(DVD)......)、智能卡及闪存设备(例如,卡、条)。另外,应理解到,可使用载体来携带诸如在传输和接收电子邮件中、或在访问诸如因特网或局域网(LAN)之类的网络中所使用的计算机可读电子数据。当然,本领域的技术人员将认识到,在不背离本发明的范围和要旨的情况下,可对该配置作出许多修改。
最初转向图1,描述了根据本发明的一方面的数据约束构造系统100。构造系统100包括类型接收器组件110、检验信息接收器组件120、约束构造器组件130和数据约束组件140。根据本发明的一个方面,可将系统100作为用于从弱类型编程系统和语言映射到强类型系统和语言的机制来使用,例如从数据库语言(例如,SQL、XML)到XQuery、C#或Java等等。更进一步地,可由程序设计员使用构造系统100从零开始或利用辅助工具(例如宏)来编写代码。类型接收器组件110接收或检索包括诸如串之类的公共数据类型和诸如日期时间之类的专用类型的数据类型。检验接收器组件120接收或检索诸如语言或时区之类的检验信息。通常,检验信息是所需用以正确比较数据的任何信息。如上所述,类型接收器组件110和检验接收器120可接收例如来自弱类型语言、设计者或程序的数据。约束构造器组件130接收来自类型接收器组件110和检验接收器组件120的类型和检验信息,产生数据约束组件140。
图2举例说明根据本发明的一方面的数据约束组件140。如图示,数据约束组件140可包括类型约束组件210和检验约束组件220。数据约束组件140充当约束与之相关联的数据的机制。类型约束组件210提供对数据类型的限制。检验约束组件220提供对数据种类的进一步的约束。尽管分开说明,应理解到数据约束组件140可表示具有结合于其中的检验信息的数据类型。已这样单独地例示出数据约束组件140,用以强调本发明的数据约束可包括对与约束组件140相关的数据类型和种类的约束,并且不以任何方式限制本发明。根据本发明的特定方面,可用检验约束或信息将数据类型参数化。例如,数据约束组件可由下面的内容表示:DataType<Collation Constraint>。因此,本发明可以产生编译时间或静态错误,而不是由传统技术产生的运行时间或动态错误。作为例子,假设数据类型约束是串,而检验约束是语言。进一步假设我们关心以下两个串:String<English>s1;String<German>s2;这里,根据规定的约束,s1和s2(数据位置标志符(即,变量))必须分别是英语串和德语串。现在,如果我们试图将s1与s2相比较,将由编译器产生静态错误。将导致编译时间错误,因为编译器尤其是类型检查器将认识到具有不同检验的串不能比较。从而,通过将检验信息结合在类型中而不是结合在实例中,类型间的比较变为静态错误,而不是运行时间错误。这在可靠的软件的产生方面是重要的。差错或错误在它们被发现的早期是容易修复的。但是,开发者宁愿产生他们可修复的编译时间错误,而不愿发行为用户造成运行时间错误的软件。
图3举例说明根据本发明的一方面的检验约束组件220。检验约束组件220包括语言约束组件310和文化约束组件320。如上论述的那样,知道串的语言是重要的,从而可正确地将串与相同语言的串作比较。没有这种知识,则可能发生想不到的错误和安全差错。因此,语言约束组件310规定了与数据相关的语言或可变的数据位置标志符(例如,英语、俄语、德语、法语、中文......)。然而,语言单独地来说通常不能提供用以正确比较串的足够的信息。有时,语言规定将随文化而改变。例如,美式英语可能与英式英语不同,英式英语可能不同于澳大利亚或南非英语。相应地,本发明提供额外等级的语言粒度(granularity),以允许语言文化的详细说明,例如串<English-US>或串<English-GB>。然而,应理解到文化约束可以是可选的,语言的一般声明对于比较来说可能是足够的。从而,用虚线描绘文化约束组件320以指示它可能是额外的检验约束,但不是必需的。更进一步地,应理解到检验约束可以是分级的。
简单地转向图4,根据本发明的一方面,举例说明了示例性的检验约束层次400。特别地,该示例性的检验约束层次400涉及语言约束。这里,父节点410仅为英语(English)。子节点包括美式英语(ENG-US)412、澳大利亚英语(ENG-AU)414和英式英语(ENG-BR)416。更进一步地,英式英语节点416有其自己的子节点,代表英式英语的方言(ENG-X)418。相应地,诸如串之类的数据类型可满足子类型关系。从而,串<ENG-X>和串<ENG>是兼容的,因为ENG-X是ENG的子类型或子语言。换言之,ENG-X可与普通英语相比较。然而,在此例中,串<ENG-US>和串<ENG-AU>或串<ENG-BR>是不兼容或不可比的。
为方便地对诸如局部化串之类的数据类型起作用,本发明提供检验以及普通类型上的一般参数化。传统上,仅实现类属以提供类型上的参数化。例如,考虑以下的类集:
class Collection<A>{void Add(A a){...}A Item(int i){...}}可将此类型例示成任意类型的集合,诸如Collection<int>或Collection<Collection<bool{}>>。根据本发明的一方面,在检验上将数据类型参数化;然而,本发明也允许定义一般化的方法,如:
static Collection<String<C>>Sort<C>(Collection<String<C>ss>){...}应注意到,Sort(分类)方法的类属参数是检验,不是类型。类似地,本发明提供检验以及类型上的约束。因此,可将分类限制到特定的语言串,例如,通过简单地声明:
static Collection<String<C>>Sort<C>where C:eng
(Collection<String<C>){...}这里,类集被局限于英语串,并因此分类方法仅分类英语串。
图5举例说明根据本发明的一方面的类型检查系统500。系统500包括两个数据说明组件510和520,以及一类型检查组件530。每个数据说明组件包括数据约束组件140和数据512。数据约束组件140包括类型约束组件210和检验约束组件220。从而,约束组件140限制数据512的类型和种类。类型检查器组件530分析数据说明组件510和520,以确保满足它们的数据约束并确保组件是兼容的。如果其中一个或两个检查失败,类型检查器可产生编译时间错误。例如,类型检查器组件530能够首先通过判定数据的类型和种类,将其分别与约束组件140的约束210和220相比较,来分析数据说明组件510。然后,类型检查器对数据说明组件520执行相同的检查。随后,可比较数据约束组件以判定兼容性。具体来说,可比较数据类型约束组件210以确保类型是相同的或兼容的。类似地,可比较检验约束组件以确定检验是否是相同的或可比的。如果任一个或所有检查失败,类型检查器组件530可产生编译时间错误。
至此,主要讨论了涉及串和语言信息的检验。然而,应理解到,本发明的检验约束并不限于此。例如,图6举例说明了根据本发明的一方面的检验约束组件220。检验约束组件220包括时区组件610。可使用时区组件610来约束诸如日期时间之类的类型。日期时间可代表相对于日历的日期及/或时间。因此,日期时间的比较仅在实例处于相同时区内时才有意义。因此,时区组件610可以Datetime<TimeZone>的形式将诸如日期时间之类的类型参数化。
应理解到检验不是一个新的概念。然而,本发明提供一种关于检验信息的说明和使用的新颖的、非显而易见的系统和方法(在下文中更详细地描述)。例如,在传统类属关系中,仅用其它类型将类型参数化。然而,本发明引入了用检验数据参数化的类型。更进一步地,本发明识别并克服了关于检验信息的传统误解。特别地,当考虑到检验时,本领域的技术人员通常的误解是检验仅仅是读取或使用数据的用户的特性。因此,传统系统已被设计成将检验信息全局化地定义为用户环境的一部分,每线程或每实例。相反地,本发明把检验看作数据本身的特性,完全与传统的理解相反。
鉴于上述示例性的系统,参考图7-9的流程图,将更好地理解根据本发明实施的方法。虽然为了便于解释,用一系列的块显示并描述该方法,但是应知道并理解到,根据本发明,本发明不限于块的顺序,一些块可以不同顺序出现及/或与其它块同时出现。而且,并非所有例示出的块对于执行根据本发明的方法来说都是必需的。
另外,应更进一步地理解到,可以将在下文以及贯穿整个说明书揭示的方法存储在制造物品中,以便于向计算机传输和传递这些方法。如这里所使用的那样,术语制造物品将包括可从任何计算机可读设备、载体或媒体中访问的计算机程序。
转向图7,举例说明了根据本发明的一方面的数据约束方法700。在710处,接收数据类型。数据类型可以是诸如串之类的公共类型或诸如日期时间之类的专用类型。在720处,接收检验信息。检验信息包括一般必需用于比较及/或指令数据的数据。例如,需要串文本语言来比较两个串,时区对于比较两个时间来说是必需的。通过构造器组件接收数据类型和检验信息,并在730处产生数据约束。数据约束限制了与之相关的数据的类型和种类。根据本发明的一个方面,数据约束可对应于结合了检验信息的数据类型。例如,数据约束可以是由诸如数据type<language>或更特别地为string<English>之类的检验信息参数化的数据类型。还应理解到可以使用本约束方法以便于将弱类型语言(例如,SQL)映射到强类型语言(例如,C#、Java......),其中,从弱类型语言中接收类型和约束。
此外,应注意到可结合类属类型一起使用产生的数据约束。如Array<T>之类的类属类型是类型T根据实例来确定的数据类型。从而,Array<T>可以是串列表、整数列表、记录列表等等。具有固定类型的类属类型,例如Array<Int>,被称为是构造出的类型。根据本发明的一方面,可同类属类型一起使用检验信息与数据约束,以产生构造出的类型或进一步地约束可使用的类型或数据。例如:
Sortable Array<T>
Where T:String<C>
C:eng{
}这里,T是某一检验C的串,并且该检验必需是英语。在此例中,可分类英语串的阵列。
图8描绘了根据本发明的一方面的类型检查方法800。在810处,接收数据说明组件。数据说明组件包括由类型约束和检验约束组成的数据约束组件以及数据或变量位置标志符。在820处,作出关于该数据是否是由类型约束规定的类型的判定。例如,该数据是否是规定的串类型?如果该数据和数据约束的类型不同,那么过程进行到840处,产生错误。如果类型是相同的,那么过程进行到830处,作出关于该数据是否满足检验约束的判定。例如,该串是否是所要求的英语串?如果检验约束满足,则过程终止。如果检验约束不满足,过程进行到840处,产生错误。随后,过程终止。
图9是根据本发明的一方面的另一个类型检查方法900。一旦各数据说明组件被检查了类型,则可检查它们之间的比较。在910处,接收第一说明组件。在920处接收第二说明组件。在930处,检验每个说明组件的类型以判定它们是否是相同的或可比的。例如,一个串和一个串是可比的,而一个串和一个整数是不可比的。如果类型是不可比的,那么方法进行到950处,产生错误。如果类型是相同的或可比的,过程进行到940处,作出关于该检验约束是否可比的判定。例如,一个英语串和一个德语串是不可比的,而一个英语串和另一个英语串是可比的。更进一步地,在定义检验的语言的情况下,可能存在可比的子类型关系,例如,普通英语和英式英语(例如,eng和eng-br)。如果检验信息是可比的,该方法无错误的终止。然而,如果检验信息是不兼容或不可比的,在950出产生错误并且方法终止。
为了提供用于本发明的各方面的上下文环境,图10和11以及下面的描述提供了可实施本发明的各个方面的适当的计算环境的简要的、一般的描述。虽然已经在运行于计算机和/或多个计算机上的计算机程序的计算机可执行指令的一般上下文环境中描述了本发明,但是本领域的技术人员将认识到本发明还可与其它程序模块组合来实现。一般来说,程序模块包括例行程序、程序、组件、数据结构等,它们执行特定的任务和/或实现特定的抽象数据类型。而且,本领域的技术人员将理解可用其它计算机系统配置来实施本发明的方法,包括:单处理器或多处理器计算机系统、小型计算设备、大型计算机、以及个人计算机、手持计算设备、基于微处理器的或可编程的消费电子产品等等。还可在分布式计算环境中实施所例示的本发明的各个方面,分布式计算环境中,任务是由通过通信网络链接的远程处理设备执行的。然而,本发明的某些(如果不是全部)方面可在单独的计算机上实施。在分布式计算环境中,程序模块可位于本地和远程存储器存储设备中。
参考图10,用于实现本发明的示例性环境1010包括计算机1012。计算机1012包括:处理单元1014、系统存储器1016以及系统总线1018。系统总线1018将包括但不限于系统存储器1016的各种系统组件连接到处理单元1014。处理单元1014可以是各种可用的处理器中的任何一种。双微处理器和其它多处理器架构也可用作处理单元1014。
系统总线1018可以是若干类型总线结构中的任一种,包括使用各种总线结构体系中的任一种的存储器总线或存储器控制器、外围总线和/或局部总线。例如但不限于,这种总线结构体系包括工业标准结构(ISA)总线、微通道结构(MCA)总线、扩展ISA(EISA)总线、智能驱动器电子设备(IDE)、VESA局部总线(VLB)、外设部件互连(PCI)、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际协会(PCMCIA)总线以及小型计算机系统接口(SCSI)。
系统存储器1016包括易失性存储器1020和非易失性存储器1022。包含如在启动期间帮助计算机1012内的各元件间传输信息的基本例行程序的基本输入/输出系统(BIOS)存储在非易失性存储器1022中。作为例示,但非限制,非易失性存储器1022可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除ROM(EEPROM)、或闪存。易失性存储器1020包括随机存取存储器,它作为外部高速缓冲存储器。作为例示但非限制,RAM有各种形式,例如同步RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链(synchlink)DRAM(SLDRAM)以及直接Rambus RAM(DRRAM)。
计算机1012还包括可移动/不可移动、易失性/非易失性的计算机存储介质。例如,图10例示了盘存储器1024。盘存储器1024包括但不限于磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡、或记忆棒之类的设备。此外,盘存储器1024可包括与包括但不限于光盘驱动器的其它存储介质分离或组合的存储介质,光盘驱动器例如紧致盘ROM(CD-ROM)、CD可录制驱动器(CD-R Drive)、CD可复写驱动器(CD-RW Drive)或数字通用盘ROM驱动器(DVD-ROM)。为了便于将盘存储设备1024连接到系统总线1018,通常使用诸如接口1026之类的可移动的或不可移动的接口。
要理解到,图10描述了充当用户和适用的操作环境1010中描述的基本计算机资源之间的中介的软件。这种软件包括操作系统1028。操作系统1028可存储于盘存储器1024上,用于控制和分配计算机系统1012的资源。系统应用程序1030通过存储于系统存储器1016或盘存储器1024上的程序模块1032和程序数据1034来利用操作系统1028对资源的管理。还要理解到可用各种操作系统或操作系统的组合来实施本发明。
用户通过输入设备1036将信息或命令输入到计算机1012。输入设备1036包括但不限于诸如鼠标之类的指点设备、轨迹球、触笔、触板、键盘、话筒、操纵杆、游戏盘、圆盘式卫星天线、扫描仪、TV调谐器卡、数字照相机、数字摄像机、web照相机等等。这些和其它输入设备通过接口端口1038,经系统总线1018连接到处理单元1014。接口端口1038包括例如串口、并口、游戏端口、通用串行总线(USB)。输出设备1040使用某些与输入设备1036相同类型的端口。从而,例如,USB端口可用于向计算机1012提供输入,以及从计算机1012将信息输出到输出设备1040。提供输出适配器1042来例示出存在某些输出设备1040,尤其例如显示器(如平板显示器和CRT显示器)、扬声器、打印机等,它们要求特殊的适配器。作为例示但非限制,输出适配器1042包括视频卡和声卡,它们提供了一种输出设备1040和系统总线1018之间的连接的手段。应注意到其它设备和/或设备的系统提供输入和输出能力,例如远程计算机1044。
计算机1012可工作于适用对诸如远程计算机1044之类的一个或多个远程计算机的逻辑连接的连网环境中。远程计算机1044可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的设备、对等设备或其它公共网络节点等,一般包括关于计算机1012描述的许多或全部元件。处于简要的目的,远程计算机1044仅例示出存储器存储设备1046。远程计算机1044通过网络接口1048与计算机1012逻辑连接,然后通过通信连接1050而在物理上进行连接。网络接口1048包括通信网络,例如局域网(LAN)和广域网(WAN)。LAN技术包括光纤分布式数据接口(FDDI)、铜芯分布式数据接口(CDDI)、以太网/IEEE 1002.3、令牌环/IEEE 1002.5等等。WAN技术包括但不限于点对点链接、类似于综合业务数字网络(ISDN)的电路交换网络及其变型、分组交换网络、数字订户线路(DSL)。
通信连接1050指的是用于将网络接口1048连接到总线1018的硬件/软件。虽然出于例示的目的示出通信连接1050位于计算机1012内,但是它也可在计算机1012的外部。出于示例性的目的,对于到网络接口1048的连接所必需的硬件/软件包括但不限于内部和外部技术,例如包括常规电话级调制解调器、电缆调制解调器、DSL调制解调器、ISDN适配器、以太网卡之类的调制解调器。
图11是本发明可与之相互的示例计算环境1100的示意框图。系统1100包括一个或多个客户端1110。客户端1110可以是硬件和/或软件(例如线程、进程、计算设备)。系统1100还包括一个或多个服务器1130。服务器1130可以是硬件和/或软件(例如线程、进程、计算设备)。例如,服务器1130能够收容线程来通过采用本发明执行转换。客户端1110和服务器1130之间的一个可能的通信可以采用适用于在两个或多个计算机进程之间传输的数据分组的形式。系统1100包括通信框架1150,通信框架可用于促进客户端1110和服务器1130之间的通信。客户端1110操作上连接到一个或多个客户端数据存储器1160,客户端数据存储器可用于存储客户端1110的本地信息。类似地,服务器1130操作上连接到一个或多个服务器数据存储器1140,服务器数据存储器可用于存储服务器1130的本地信息。
上述已经描述的内容包括本发明的例子。当然,不可能为了描述本发明的目的而描述组件或方法的每一可构想的组合,但本领域的技术人员可以认识到,本发明的很多其它组合和置换都是可能的。因此,本发明旨在包含落在所附权利要求书的精神和范围之内的所有这样的变换、修改和变化。此外,在详细描述或者权利要求之中使用了术语“包括”的意义上,这一术语以类似于术语“包含”的方式意味着包含性的,如术语“包含”在权利要求书中被用作过渡词时所解释的。