專(zhuān)利名稱:關(guān)系建模的制作方法
相關(guān)申請(qǐng)的交叉引用本申請(qǐng)要求于2005年2月18日提交的、名為“OBJECT ORIENTEDRELATIONSHIP MODELING(面向?qū)ο箨P(guān)系建模)”的美國(guó)專(zhuān)利臨時(shí)申請(qǐng)第60/654,237號(hào)的優(yōu)先權(quán)。該臨時(shí)申請(qǐng)的整體通過(guò)引用包含在此。
背景技術(shù):
程序設(shè)計(jì)語(yǔ)言是專(zhuān)門(mén)用來(lái)為執(zhí)行任務(wù)而將指令傳遞至計(jì)算機(jī)或微處理器的形式語(yǔ)言。近年來(lái),面向?qū)ο蟪绦蛟O(shè)計(jì)成為設(shè)計(jì)員和程序員用來(lái)實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)內(nèi)的功能的多個(gè)慣用且流行的模型之一。面向?qū)ο蟮某绦蛟O(shè)計(jì)是獨(dú)特的,至少因?yàn)槠淝疤崾前凑諏?duì)象或事物而不是像其它模型那樣按照動(dòng)作來(lái)查看。
對(duì)象技術(shù)的好處源于三個(gè)基本原理封裝、多態(tài)以及繼承。對(duì)象隱藏或封裝其數(shù)據(jù)和相關(guān)聯(lián)方法的內(nèi)部結(jié)構(gòu)。并非展示實(shí)現(xiàn)細(xì)節(jié),而是對(duì)象呈現(xiàn)清晰地表示它們的抽象而無(wú)需無(wú)關(guān)信息的接口。多態(tài)比封裝更進(jìn)一步。多態(tài)允許為不同的數(shù)據(jù)類(lèi)型使用相同的代碼,即多種形狀一個(gè)接口的想法。從而,軟件組件可以請(qǐng)求另一組件而不必確切地了解該組件。接收請(qǐng)求的組件解釋該請(qǐng)求,并根據(jù)其變量和數(shù)據(jù)來(lái)判斷如何執(zhí)行該請(qǐng)求。第三個(gè)原理是繼承性,它使得開(kāi)發(fā)員能夠再次使用之前存在的設(shè)計(jì)和代碼。該能力允許開(kāi)發(fā)員避免從零開(kāi)始創(chuàng)建所有軟件。相反,通過(guò)繼承,開(kāi)發(fā)員可以導(dǎo)出繼承和修改其它類(lèi)的狀態(tài)和行為的子類(lèi)。
面向?qū)ο蟮某绦蛟O(shè)計(jì)模型通常由基于類(lèi)的方法來(lái)定義。在該系統(tǒng)中,對(duì)象是包括狀態(tài)和行為兩者的實(shí)體。對(duì)象的狀態(tài)和行為均由類(lèi)定義,類(lèi)標(biāo)識(shí)了特定類(lèi)型的對(duì)象?;陬?lèi)定義創(chuàng)建的對(duì)象被認(rèn)為是在動(dòng)態(tài)類(lèi)型中反映的該類(lèi)的實(shí)例。因此,類(lèi)指定對(duì)象可以包含的數(shù)據(jù)(即,狀態(tài))以及該對(duì)象可以執(zhí)行的方法、功能或行為。方法用于通過(guò)變更其中包含的數(shù)據(jù)來(lái)修改相關(guān)聯(lián)對(duì)象的內(nèi)部狀態(tài)。對(duì)象中這樣的數(shù)據(jù)和方法的組合通常被稱為面向?qū)ο蟪绦蛟O(shè)計(jì)中的封裝。封裝規(guī)定對(duì)象的狀態(tài)僅由與該對(duì)象相關(guān)聯(lián)的良好定義的方法改變。當(dāng)對(duì)象的行為限于這樣的良好定義的位置和接口時(shí),對(duì)象中的改變(例如,代碼修改)將對(duì)系統(tǒng)中的其它對(duì)象和元素產(chǎn)生最小的影響。
發(fā)明內(nèi)容
以下提供了本發(fā)明的簡(jiǎn)化概述,以提供對(duì)所要求保護(hù)的本發(fā)明的主題的某些方面的基本理解。該概述不是本發(fā)明的廣泛概觀。它既不旨在標(biāo)識(shí)本發(fā)明的關(guān)鍵或重要的元素,也不描繪本發(fā)明的范圍。該概述的唯一目的是以簡(jiǎn)化的形式呈現(xiàn)本發(fā)明的某些概念,作為之后呈現(xiàn)的更詳細(xì)描述的序言。
簡(jiǎn)言之,本發(fā)明涉及項(xiàng)和/或其元素之間的關(guān)系的表達(dá)式。更具體地,關(guān)系被作為一級(jí)概念。根據(jù)本發(fā)明的一方面,關(guān)系可以由項(xiàng)外部的構(gòu)造,諸如類(lèi)來(lái)表示,該構(gòu)造提供計(jì)算和/或?qū)Ш疥P(guān)系的機(jī)制或方法。根據(jù)本發(fā)明的另一方面,可以利用數(shù)據(jù)類(lèi)型屬性記號(hào)來(lái)調(diào)用關(guān)系方法。
本發(fā)明的各方面至少因?yàn)樗鼈兲峁┝擞糜谂c項(xiàng)之間的關(guān)系交互的可擴(kuò)展且易于使用的系統(tǒng)和方法而是有益的。通過(guò)使得關(guān)系成為一級(jí)編程對(duì)象,可以在現(xiàn)有項(xiàng)之間創(chuàng)建新的關(guān)系,而不必修改項(xiàng)。這是有價(jià)值的,至少因?yàn)樗试S定義可能不受程序員控制的某些或全部項(xiàng)或元素之間的關(guān)系,或者在不可能修改這樣的元素來(lái)反映新關(guān)系的情況下允許定義這樣的關(guān)系。而且,可以通過(guò)屬性表示容易地實(shí)現(xiàn)類(lèi)方法的調(diào)用,并將其映射至實(shí)際方法記號(hào)。
為了達(dá)到前述和相關(guān)的目的,此處結(jié)合以下描述和附圖來(lái)描述所要求保護(hù)的本發(fā)明的某些說(shuō)明性方面。這些方面指示了可實(shí)現(xiàn)本發(fā)明的各種方法,所有這些方法旨在落入所要求保護(hù)的本發(fā)明的范圍之內(nèi)。當(dāng)結(jié)合附圖考慮閱讀以下詳細(xì)描述時(shí),其它優(yōu)點(diǎn)和新穎的特征將變得明顯。
圖1是關(guān)系系統(tǒng)的框圖。
圖2是示例性關(guān)系系統(tǒng)的框圖。
圖3是包含影響組件的關(guān)系系統(tǒng)的框圖。
圖4是編譯系統(tǒng)的框圖。
圖5是便于與數(shù)據(jù)交互的接口系統(tǒng)的框圖。
圖6是集成開(kāi)發(fā)系統(tǒng)或環(huán)境的框圖。
圖7是定義關(guān)系的方法的流程圖。
圖8是編譯方法的流程圖。
圖9是數(shù)據(jù)交互方法的流程圖。
圖10是協(xié)助程序開(kāi)發(fā)的方法的流程圖。
圖11是示例性編譯環(huán)境的示意性框圖。
圖12是示出合適的操作環(huán)境的示意性框圖。
圖13是示例計(jì)算環(huán)境的示意性框圖。
具體實(shí)施例方式
現(xiàn)在參考附圖描述本發(fā)明的各方面,在所有附圖中,同樣的標(biāo)號(hào)指的是相同或?qū)?yīng)的元素。然而,應(yīng)該理解,附圖和關(guān)于附圖的詳細(xì)描述不旨在將所要求保護(hù)的本發(fā)明限于所揭示的具體形式。而是相反,本發(fā)明旨在覆蓋落入所要求保護(hù)的本發(fā)明的精神和范圍內(nèi)的所有修改、等效方案和替換方案。
如在本申請(qǐng)中所用的,術(shù)語(yǔ)“組件”和“系統(tǒng)”等指的是計(jì)算機(jī)相關(guān)的實(shí)體,它們或者是硬件、硬件和軟件的組合、軟件或者是執(zhí)行中的軟件。例如,組件可以是,但不限于,運(yùn)行在處理器上的進(jìn)程、處理器、對(duì)象、可執(zhí)行代碼、執(zhí)行的線程、程序和/或計(jì)算機(jī)。作為說(shuō)明,運(yùn)行在服務(wù)器上的應(yīng)用程序和服務(wù)器本身都可以是組件。一個(gè)或多個(gè)組件可以駐留在執(zhí)行中的進(jìn)程和/或線程內(nèi),且組件可以位于一臺(tái)計(jì)算機(jī)上和/或分布在兩臺(tái)或多臺(tái)計(jì)算機(jī)之間。
術(shù)語(yǔ)“示例性”在此處用來(lái)指的是作為示例、實(shí)例或說(shuō)明。此處被描述為“示例性”的任何方面或設(shè)計(jì)不必被解釋為與其它方面或設(shè)計(jì)相比是較佳的或更有利的。而且,此處提供了各種示例性代碼片段。應(yīng)該理解,這些示例是為說(shuō)明清楚的目的而提供的,并且應(yīng)理解,這些示例不意味著將所揭示的本發(fā)明的范圍限于在所要求保護(hù)的本發(fā)明的各方面描述中所使用的語(yǔ)言、體系結(jié)構(gòu)和/或特征。
可以將基于人工智能的系統(tǒng)(例如,顯式和/或隱式訓(xùn)練的分類(lèi)器、基于知識(shí)的系統(tǒng)...)用于執(zhí)行根據(jù)如下所述的本發(fā)明的一個(gè)或多個(gè)方面的推斷和/或概率判斷和/或基于統(tǒng)計(jì)的判斷。如此處所用的,術(shù)語(yǔ)“推斷”一般指的是從通過(guò)事件和/或數(shù)據(jù)捕捉到的一組觀察值中推出或推斷系統(tǒng)、環(huán)境和/或用戶的狀態(tài)的過(guò)程。推斷例如可以被用來(lái)標(biāo)識(shí)特定的上下文或動(dòng)作,或者可以生成狀態(tài)的概率分布。推斷可以是概率性的,即,基于對(duì)數(shù)據(jù)和事件的考慮對(duì)所關(guān)注的狀態(tài)的概率分布的計(jì)算。推斷也可以指的是用于從一組事件和/或數(shù)據(jù)中組成更高級(jí)事件的技術(shù)。這樣的推斷導(dǎo)致從一組觀察到的事件和/或存儲(chǔ)的事件數(shù)據(jù)中構(gòu)造出新的事件或動(dòng)作,而不論原先的事件是否在時(shí)間上緊密相關(guān),也不論原先的事件和數(shù)據(jù)是來(lái)自一個(gè)還是若干個(gè)事件和數(shù)據(jù)源??梢詫⒏鞣N分類(lèi)方案和/或系統(tǒng)(例如,支持矢量機(jī)、神經(jīng)網(wǎng)絡(luò)、專(zhuān)家系統(tǒng)、貝葉斯信任網(wǎng)絡(luò)、模糊邏輯、數(shù)據(jù)融合引擎...)用于執(zhí)行關(guān)于本發(fā)明的自動(dòng)和/或推斷出的動(dòng)作。
另外,所揭示的本發(fā)明可以被實(shí)現(xiàn)為系統(tǒng)、方法、裝置或制品,它們使用生產(chǎn)軟件、固件、硬件或其任何組合的標(biāo)準(zhǔn)程序設(shè)計(jì)和/或工程技術(shù)來(lái)控制基于計(jì)算機(jī)或處理器的設(shè)備,以實(shí)現(xiàn)此處所詳細(xì)描述的各方面。如此所用的術(shù)語(yǔ)“制品”(或者“計(jì)算機(jī)程序產(chǎn)品”)旨在包括可從任何計(jì)算機(jī)可讀設(shè)備、載波或介質(zhì)來(lái)訪問(wèn)的計(jì)算機(jī)程序。例如,計(jì)算機(jī)可讀介質(zhì)可以包括,但不限于,磁性存儲(chǔ)設(shè)備(例如,硬盤(pán)、軟盤(pán)、磁條...)、光盤(pán)(例如,高密度盤(pán)(CD)、數(shù)字多功能盤(pán)(DVD)...)、智能卡、以及閃存設(shè)備(例如,卡、棒、跳轉(zhuǎn)驅(qū)動(dòng)器(jump drive)...)。另外,可以理解,載波可以用來(lái)承載諸如在發(fā)送和接收電子郵件或訪問(wèn)諸如因特網(wǎng)或局域網(wǎng)(LAN)等網(wǎng)絡(luò)時(shí)使用的計(jì)算機(jī)可讀電子數(shù)據(jù)。當(dāng)然,本領(lǐng)域的技術(shù)人員可以認(rèn)識(shí)到,可以對(duì)該配置進(jìn)行各種修改,而不背離所要求保護(hù)的本發(fā)明的范圍和精神。
最初轉(zhuǎn)向圖1,根據(jù)本發(fā)明的一方面示出關(guān)系系統(tǒng)100。關(guān)系系統(tǒng)100可以包括項(xiàng)接收器組件110和關(guān)系生成系統(tǒng)120。項(xiàng)接收器組件110接收、檢索或獲取項(xiàng)和/或其元素。這些項(xiàng)可以包括,但不限于,數(shù)據(jù)類(lèi)型、對(duì)象、網(wǎng)頁(yè)以及XML文檔。關(guān)系生成組件120從項(xiàng)接收器組件110中接收、檢索或以獲取多個(gè)項(xiàng)。關(guān)系生成組件120分析項(xiàng)并指定和/或定義項(xiàng)之間的關(guān)系。例如,關(guān)系可以在諸如類(lèi)或更具體地靜態(tài)類(lèi)等程序構(gòu)造中定義。類(lèi)可以包括封裝用于根據(jù)特定關(guān)系檢索各種項(xiàng)或其元素的集合的功能的類(lèi)外部的方法或?qū)Ψ椒ǖ囊谩?br>
應(yīng)該注意,關(guān)系生成系統(tǒng)100以一種以上方式有益。例如,系統(tǒng)100支持諸如項(xiàng)和它們之間的關(guān)系或鏈接等概念的分離,以及開(kāi)發(fā)中的模塊性。而且,項(xiàng)和關(guān)系的分離提供靈活性及可擴(kuò)展性,因?yàn)轫?xiàng)不可能總是可供修改或者修改它們可能是不可行的。例如,考慮這樣的情形,其中存在以幾十年前的某種傳統(tǒng)格式定義的人和關(guān)于每個(gè)人的數(shù)據(jù)或?qū)傩缘募?。在此之后,修改該集合?lái)為每個(gè)人添加電話號(hào)碼可能是不可能或不可行的?,F(xiàn)在,可以生成分離的關(guān)系構(gòu)造以將人集合與分離的手機(jī)集合相關(guān)聯(lián)。
圖2示出了示例性關(guān)系交互系統(tǒng)200。提供系統(tǒng)200以便于描述和討論本發(fā)明的各方面。系統(tǒng)200包括一個(gè)或多個(gè)關(guān)系方法210和兩個(gè)項(xiàng)A 220和B 230。如圖所示,項(xiàng)A 220與項(xiàng)B 230之間的關(guān)系不被定義在項(xiàng)屬性內(nèi),也不被定義為項(xiàng)屬性。相反,該關(guān)系被定義在項(xiàng)外部作為一級(jí)概念。關(guān)系方法210封裝該計(jì)算來(lái)與項(xiàng)和項(xiàng)元素交互。
作為示例而非限制,考慮對(duì)象至關(guān)系的映射情形。具體地,在該情形中期望針對(duì)數(shù)據(jù)庫(kù)與對(duì)象的關(guān)系來(lái)進(jìn)行編程。概念上包含類(lèi)型T的對(duì)象的數(shù)據(jù)庫(kù)表可以在程序設(shè)計(jì)語(yǔ)言中使用諸如C#中的IENumerable<T>(枚舉)等集合類(lèi)型來(lái)表示,其中T是帶有映射至表字段的屬性的類(lèi)。數(shù)據(jù)庫(kù)關(guān)系然后可以在該程序設(shè)計(jì)語(yǔ)言中使用靜態(tài)類(lèi)表示。該類(lèi)提供通過(guò)封裝連接條件來(lái)導(dǎo)航這些關(guān)系的靜態(tài)方法。例如,項(xiàng)A 220可以是對(duì)應(yīng)于顧客(Customer)表的對(duì)象、類(lèi)型或類(lèi),而項(xiàng)B 230可以是對(duì)應(yīng)于定單(Order)表的對(duì)象、類(lèi)型或類(lèi)。例如public class Customer{...}public class Order{...}可以如下以諸如靜態(tài)類(lèi)等編程構(gòu)造與項(xiàng)A 220和B 230分離地定義關(guān)系210public static class OrderRelationship{public static Customer GetCustomerGivenOrder(Order order);public static IEnumerable<Order>GetOrdersGivenCustomer(Customer,customer);public static IEnumerable<Customer>GetCustomersGivenOrders(IEnumerable<Order>orders);public static IEnumerable<Order>GetOrdersGivenCustomers(IEnumerable<Customer>customers);}此處,類(lèi)方法提供一種根據(jù)可能存在于顧客與定單之間的多個(gè)關(guān)系來(lái)導(dǎo)航數(shù)據(jù)存儲(chǔ)的機(jī)制。此處,由類(lèi)和類(lèi)方法封裝二元關(guān)系。二元關(guān)系可以包括一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多關(guān)系。第一方法“GetCustomerGivenOrder(給定定單獲取顧客)”捕捉給定一特定定單來(lái)檢索一顧客的一對(duì)一關(guān)系。第二方法“GetOrdersGivenCustomer(給定一顧客獲取多個(gè)定單)”是多對(duì)一關(guān)系。此處,檢索與特定顧客相關(guān)聯(lián)的多個(gè)定單。第三方法和第四方法“GetCustomersGivenOrders(給定多個(gè)定單獲取多個(gè)顧客)”及“GetOrdersGivenCustomers(給定多個(gè)顧客獲取多個(gè)定單)”是多對(duì)多關(guān)系。具體地,第一方法檢索與指定定單相關(guān)聯(lián)的顧客集合。給定一組定單,第四方法可以檢索相關(guān)的顧客。
前述和后繼的示例不旨在限制所附權(quán)利要求書(shū)的范圍。本發(fā)明的各方面可適用于其中項(xiàng)之間存在關(guān)系或?qū)Ш降娜魏吻樾?。例如,考慮鏈接文檔的情形。項(xiàng)A 220和項(xiàng)B 230可以是各種格式中的任何一種的電子文檔,這些格式包括但不限于超文本和XML。并非包括諸如從項(xiàng)A 220至項(xiàng)B 230的超鏈接等鏈接。文檔之間的關(guān)系210可以被定義為在其外部。這使得可以定義關(guān)系,而不必修改文檔之一。
也構(gòu)想了除二元關(guān)系和鏈接之外的其它關(guān)系,且它們也屬于權(quán)利要求書(shū)的范圍內(nèi),這些其它關(guān)系包括但不限于組成和關(guān)聯(lián)。如果一個(gè)項(xiàng)被嵌套在另一項(xiàng)內(nèi),則該項(xiàng)與另一項(xiàng)具有組成關(guān)系。這樣,項(xiàng)或?qū)嶓w可以組成任何其它項(xiàng)或?qū)嶓w。下表示出消息-參與者組成關(guān)系
表1根據(jù)關(guān)聯(lián),存在若干不同的類(lèi)型,包括引用、公值、條件和實(shí)體。引用關(guān)聯(lián)可以對(duì)應(yīng)于主鍵-外鍵關(guān)系。以下示例示出了顧客-定單引用關(guān)聯(lián)關(guān)系,其中表2對(duì)應(yīng)于顧客而表3對(duì)應(yīng)于定單
表2
表3公值關(guān)聯(lián)是其中跨兩個(gè)或更多項(xiàng)共享公值的關(guān)系。例如,下表示出在人(表4)和器材(表5)之間所示的音樂(lè)家公值關(guān)聯(lián)
表4
表5條件關(guān)聯(lián)是由查詢準(zhǔn)則表達(dá)的關(guān)系。下表提供了聯(lián)系人-文檔條件關(guān)聯(lián)
表6
表7實(shí)體關(guān)聯(lián)圍繞一個(gè)項(xiàng)或?qū)嶓w具有n個(gè)端點(diǎn),它擔(dān)當(dāng)通過(guò)其它類(lèi)型關(guān)系至其它實(shí)體的中心。鏈接關(guān)系僅是含有一個(gè)中心以及兩個(gè)基于引用的端點(diǎn)的實(shí)體關(guān)聯(lián)的特殊情況。以下的示例性表示出了雇傭關(guān)系實(shí)體關(guān)聯(lián),其中表8對(duì)應(yīng)于雇傭關(guān)系,表9對(duì)應(yīng)于人,表10對(duì)應(yīng)于雇主
表8
表9
表10圖3示出了根據(jù)本發(fā)明一方面的關(guān)系系統(tǒng)300。類(lèi)似于圖1的系統(tǒng)100,系統(tǒng)300包括項(xiàng)接收器組件110和關(guān)系生成組件120。如上所述,接收器組件110可以接收和/或檢索多個(gè)元素,僅舉幾例,諸如數(shù)據(jù)對(duì)象、網(wǎng)頁(yè)或XML文檔。關(guān)系生成組件120可以從接收器組件110接收和/或檢索元素。關(guān)系生成組件120可以定義或指定項(xiàng)之間的關(guān)系或鏈接。而且,關(guān)系生成組件120可以提供用于響應(yīng)于指定的關(guān)系來(lái)檢索特定項(xiàng)或其元素的方法或其引用。同樣類(lèi)似于系統(tǒng)100,系統(tǒng)300可以定義類(lèi)中的關(guān)系,而類(lèi)可以包括用于計(jì)算關(guān)系的方法。然而,系統(tǒng)300也可以包括影響組件310。影響組件310是用于影響關(guān)系命名的機(jī)制。根據(jù)本發(fā)明的一方面,影響組件310可以包括,或者可以被通信地耦合至,試探或人工智能組件、方法或機(jī)制,以基于相關(guān)元素的名稱來(lái)推斷或推理出關(guān)系的名稱。例如,如上例所述,兩個(gè)項(xiàng)“Customer”和“Order”可以含有名為“GetCutomerGivenOrder”的關(guān)系方法。除此之外或者作為替代,影響組件310可以例如通過(guò)接收和/或提供由外部元數(shù)據(jù)信息驅(qū)動(dòng)的命名方案來(lái)協(xié)助關(guān)系生成組件120。
如上所述,關(guān)系可以是二元關(guān)系或普通的n元關(guān)系(例如,中心-輻軸關(guān)系)等等。二元關(guān)系可以是如在實(shí)體關(guān)系討論中所用的一對(duì)一、一對(duì)多、多對(duì)一或多對(duì)多關(guān)系。類(lèi)型S和T之間的關(guān)系可以使用靜態(tài)類(lèi)來(lái)建模??紤]捕捉若干二元關(guān)系的類(lèi)的以下示例public static class RelationshipName_Relationship{public static IEnumerable<T>GetTsGivenS(S,s);public static S GetSGivenT(T t);public static IEnumerable<S>GetSsGivenTs(IEnumerable<T>ts);public static IEnumerable<T>GetTsGivenSs(IEnumerable<S>ss);}在一對(duì)一關(guān)系的情況下,GetTsGivenS(給定S獲取T)方法返回T的單個(gè)實(shí)例,而在多對(duì)多關(guān)系的情況下,GetSGivenT(給定T獲取S)方法返回諸如IEnumerable(枚舉)等集合類(lèi)型。
關(guān)系類(lèi)的名稱、靜態(tài)方法和形參名稱可以通過(guò)多種方式導(dǎo)出,包括但不限于,使用基于類(lèi)型名稱的試探和使用由外部元數(shù)據(jù)信息驅(qū)動(dòng)的命名方案。同樣如之前所提供的,以下對(duì)“Customer”和“Order”之間的關(guān)系建模public class Customer{...}public class Order{...}public static class OrderRelationship{public static Customer GetCustomerGivenOrder(Order order);public static IEnumerable<Order>GetOrdersGivenCustomer(Customer,customer);public static IEnumerable<Customer>GetCustomerGivenOrders(IEnumerable<Order>orders);public static IEnumerable<Order>GetOrdersGivenCustomers(IEnumerable<Customer>customers);}給定表示顧客表中一組顧客的變量,如IEnumerable<Customer>customers=...;可以如下使用以下靜態(tài)方法來(lái)檢索與該組顧客有關(guān)的一組定單IEnumerable<Order>orders=OrerRelationship.GetOrderGivenCustomer(customers);該靜態(tài)方法調(diào)用封裝了連接(join)條件SELECT(字段)FROM Customer JOIN Order ON(條件)n元關(guān)系(此處也被稱為實(shí)體關(guān)聯(lián))是例如一組特定類(lèi)型的二元關(guān)系與其它類(lèi)型的二元關(guān)系。一個(gè)示例是中心和輻軸關(guān)系。這樣的關(guān)系的設(shè)計(jì)模式如下public static class RelationshipName_Relationship{public static S1 GetSpoke1GivenHub(hub);public static IEnumerable<Hub>GetHubsGivenSpoke1(spoke1);public static S2 GetSpoke2GivenHub(hub);public static IEnumerable<Hub>GetHubsGivenSpoke2(spoke2);public static IEnumerable<S1>GetSpoke 1GivenHub(IEnumerable<Hub>hubs);public static IEnumerable<Hub>GetHubsGivenSpokel(IEnumerable<S1>spokels);public static IEnumerable<S2>GetSpoke2GivenHub(IEnumerable<Hub>hubs);public static IEnumerable<Hub>GetHubsGivenSpoke2(IEnumerable<S2>spoke2s);}技術(shù)上,可以區(qū)分關(guān)系各方上的基數(shù),但是為簡(jiǎn)明起見(jiàn),假定中心和輻軸之間的所有個(gè)別二元關(guān)系都是一對(duì)多關(guān)系。
與簡(jiǎn)單的二元關(guān)系情況一樣,關(guān)系類(lèi)和靜態(tài)方法的名稱可以通過(guò)多種方式導(dǎo)出,范圍從基于類(lèi)型名稱的試探到由外部元數(shù)據(jù)信息驅(qū)動(dòng)的命名方案。以下示例對(duì)“Employment(雇傭關(guān)系)”、“Person(個(gè)人)”和“Organization(組織)”之間的關(guān)系建模。在“Employment”和“Person”以及“Employment”和“Organization”之間存在兩個(gè)一對(duì)多二元關(guān)系,“Employment”用作中心。public class Person{..}public class Organization{..}public class Employment{..}public static class EmploymentRelationship{public static IEnumerable<Employment>GetEmploymentsGivenEmployee(Personemployee);public static Person GetEmployeeGivenEmployment(Employment employment);public static IEnumerable<Employment>GetEmploymentsGivenEmployer(Organizationemployer);public static Organization GetEmployerGivenEmployment(Employment employment);public static IEnumerable<Employment>GetEmploymentGivenEmployee(IEnumerable<Person>employees);public static IEnumerable<Person>GetEmployeeGivenEmployment(IEnumerable<Employment>employments);public static IEnumerable<Employment>GetEmploymentGivenEmployer(IEnumerable<Organization>employers);public static IEnumerable<Organization>GetEmployerGivenEmployment(IEnumerable<Employment>employments);}給定表示個(gè)人表中的一組人的變量,如IEnumerable<Person>people=...;以下靜態(tài)方法用于獲取關(guān)于該組人的一組雇傭關(guān)系IEnumerable<Employment>employments=EmploymentRelationship.GetEmploymentGivenEmployee(people);以下靜態(tài)方法用于獲取關(guān)于該組雇傭關(guān)系的一組組織IEnumerable<Organization>employers=EmploymentRelationship.GetEmployerGivenEmployment(employments);后一種靜態(tài)方法調(diào)用封裝連接條件SELECT(字段)FROM Person JOIN Employment ON(條件)JOIN Organization ON(條件)類(lèi)型或類(lèi)關(guān)系可以被建模為與類(lèi)型屬性的關(guān)系。例如,考慮包含類(lèi)型個(gè)人(Person)和類(lèi)型組織(Organization)的情形,其中組織雇傭個(gè)人,而個(gè)人被組織雇傭。這在諸如C#等面向?qū)ο笳Z(yǔ)言中如下表示public class Person{public IEnumerable<Employment>Employments{get;}}public class Organization{public IEnumerable<Employment>Employments{get;}然而,使用分離的類(lèi)建模優(yōu)于使用屬性對(duì)關(guān)系建模。例如,可以在現(xiàn)有類(lèi)型之間創(chuàng)建新的關(guān)系,而無(wú)需修改這些類(lèi)型。在上述使用屬性的情形中,“Person”和“Organization”類(lèi)型依賴于“Employment”類(lèi)型。而且,使用屬性對(duì)關(guān)系建模僅允許從實(shí)例導(dǎo)航,而從靜態(tài)類(lèi)對(duì)關(guān)系建模允許從實(shí)例的集合導(dǎo)航。
盡管使用靜態(tài)方法將關(guān)系表示為一級(jí)概念的設(shè)計(jì)模式給予程序員強(qiáng)大的表達(dá)能力,但它在句法上是冗長(zhǎng)的。而且,這些關(guān)系看上去不相同,從而與按照屬性建模的關(guān)系相比較難發(fā)現(xiàn)。
圖4示出了根據(jù)本發(fā)明的一方面,在句法上統(tǒng)一訪問(wèn)關(guān)系的方式的編譯系統(tǒng)400。系統(tǒng)400包括表達(dá)式接收器組件410、代碼生成組件420和元數(shù)據(jù)組件430。接收器組件410接收含有項(xiàng)之間的關(guān)系,包括但不限于數(shù)據(jù)類(lèi)型的程序表達(dá)式。該程序表達(dá)式可以是如同關(guān)系是屬性一般指定的簡(jiǎn)化表達(dá)式。例如,給定表示顧客表中的一組顧客的變量“IEnumerable<Customer>customers=...;”,以下的句法可以用于獲取與該組顧客相關(guān)的一組定單“IEnumerable<Order>orders=customer.Orders.”。代碼生成組件接收該表達(dá)式,并從該表達(dá)式生成更詳細(xì)的代碼或?qū)Ψ椒ǖ恼{(diào)用,諸如“OrderRelationship.GetOrderGivenCustomers(customers)”。代碼生成組件420通過(guò)元數(shù)據(jù)組件430啟用該功能。元數(shù)據(jù)組件430可以檢索或接收關(guān)于類(lèi)的元數(shù)據(jù),并將其提供給代碼生成組件420,以允許從簡(jiǎn)化的表達(dá)式到實(shí)際的或更詳細(xì)的表達(dá)式的映射。元數(shù)據(jù)可以指定“OrderRelationship.GetOrderGivenCustomers(customers)”映射至“customer.Order”。根據(jù)本發(fā)明的一方面,這樣的元數(shù)據(jù)可以在定義元素之間關(guān)系的類(lèi)中提供?;蛘?,元數(shù)據(jù)可以由編譯系統(tǒng)和/或代碼生成組件420利用的某些外部文件或方案來(lái)提供。
轉(zhuǎn)向圖5,示出接口系統(tǒng)500以便于數(shù)據(jù)交互。接口系統(tǒng)500包括通信上耦合的導(dǎo)航接口組件510和數(shù)據(jù)接口組件520。作為示例,數(shù)據(jù)接口組件520可以實(shí)現(xiàn)可由導(dǎo)航接口組件510調(diào)用或執(zhí)行的方法,反之亦然。導(dǎo)航接口組件510可以接收關(guān)系表達(dá)式。接口組件510可以接收經(jīng)縮寫(xiě)的或全長(zhǎng)的表達(dá)式,分別諸如“customer.Order”或“OrderRelationship.GetOrderGivenCustomers(customers)”。當(dāng)提供縮寫(xiě)時(shí),導(dǎo)航接口組件510可以將該表達(dá)式轉(zhuǎn)換為全長(zhǎng)的表達(dá)式。然后可以將該表達(dá)式從導(dǎo)航接口組件510發(fā)送至數(shù)據(jù)接口組件520。數(shù)據(jù)接口組件520可以提供該表達(dá)式,用于在一個(gè)或多個(gè)項(xiàng)上執(zhí)行。如果檢索到數(shù)據(jù),那么數(shù)據(jù)接口組件520可以將結(jié)果傳回導(dǎo)航接口組件510。從而,導(dǎo)航接口組件510和數(shù)據(jù)接口組件520可以對(duì)應(yīng)于應(yīng)用程序編程接口(API)。
圖6示出了根據(jù)本發(fā)明的一方面的集成開(kāi)發(fā)環(huán)境或系統(tǒng)600。系統(tǒng)600可以包括編輯器組件610和程序協(xié)助組件620。編輯器組件610是專(zhuān)門(mén)用于編輯和/或開(kāi)發(fā)計(jì)算機(jī)源代碼的文本編輯器。具體地,編輯器組件610可以接收關(guān)系的指定。文本編輯器在通信上耦合至程序協(xié)助組件620。協(xié)助組件620可以提供編碼協(xié)助,包括提示、格式化、著色、工具欄以及出錯(cuò)指示或警告等等。例如,響應(yīng)于接收到諸如點(diǎn)等項(xiàng)或觸發(fā)器,程序協(xié)助組件620可以提供和/或使得文本編輯器組件610顯示用于完成語(yǔ)句的提示??梢跃痛颂幪峁┑年P(guān)系進(jìn)行提示。例如,當(dāng)接收到“customer”,則可以建議“Orders”以提供完整語(yǔ)句“customer.Orders”,表示檢索“customer”的所有order。從而,可以做出表現(xiàn)為項(xiàng)屬性,而對(duì)應(yīng)于分離的關(guān)系方法的提示或建議。
對(duì)于若干組件之間的交互描述了前述系統(tǒng)。應(yīng)該理解,這樣的系統(tǒng)和組件可以包括那些組件或其中指定的子組件、指定的組件或子組件中的某一些和/或另外的組件。子組件也可以被實(shí)現(xiàn)為通信上耦合至其它組件而非包含在父組件中的組件。而且,一個(gè)或多個(gè)組件和/或子組件可以被組合成提供聚合功能的單個(gè)組件。組件也可以與為簡(jiǎn)潔起見(jiàn)此處沒(méi)有具體描述但本領(lǐng)域技術(shù)人員已知的一個(gè)或多個(gè)其它組件交互。
而且,可以理解,以上揭示的系統(tǒng)和以下方法的各個(gè)部分可以包括或包含人工智能或基于知識(shí)或規(guī)則的組件、子組件、進(jìn)程、裝置、方法或機(jī)制(例如,支持矢量機(jī)、神經(jīng)網(wǎng)絡(luò)、專(zhuān)家系統(tǒng)、貝葉斯信任網(wǎng)絡(luò)、模糊邏輯、數(shù)據(jù)融合引擎、分類(lèi)器...)。這樣的組件及其它組件可以自動(dòng)化由此執(zhí)行的某些機(jī)制或進(jìn)程,從而使得該系統(tǒng)和方法的各部分更具有適應(yīng)性并更高效和智能。作為示例而非限制,影響組件310可以使用這樣的方法或機(jī)制來(lái)推斷和影響生成的關(guān)系名。
考慮上述示例性系統(tǒng),參考圖7-10的流程圖能更好地理解可以根據(jù)所揭示的本發(fā)明實(shí)現(xiàn)的方法。盡管為說(shuō)明的簡(jiǎn)單起見(jiàn),方法被示出和描述為一連串框,但是可以理解和領(lǐng)會(huì),所要求保護(hù)的本發(fā)明不受框的順序限制,因?yàn)槟承┛蚩梢园磁c此處所示和描述不同的順序和/或與其它框同時(shí)發(fā)生。而且,不是所有示出的框?qū)?shí)現(xiàn)之后描述的方法都是必需的。
另外,還應(yīng)該理解,之后揭示并貫穿本說(shuō)明書(shū)的方法能夠被存儲(chǔ)在制品上,以便于向計(jì)算機(jī)傳送和傳輸這樣的方法。如此處所用的術(shù)語(yǔ)制品旨在包含可從任何計(jì)算機(jī)可讀設(shè)備、載波或介質(zhì)訪問(wèn)的計(jì)算機(jī)程序。
轉(zhuǎn)向圖7,示出了定義關(guān)系的方法700。在710處,接收項(xiàng)。這可以包括但不限于,諸如數(shù)據(jù)類(lèi)型和文檔(例如,XML、文字處理、HTTP...)等程序項(xiàng)。在720處,生成諸如類(lèi)等定義多個(gè)項(xiàng)之間的關(guān)系的構(gòu)造。例如,類(lèi)可以是面向?qū)ο蟮撵o態(tài)類(lèi)。而且,類(lèi)可以包括封裝計(jì)算和/或?qū)Ш巾?xiàng)或元素關(guān)系的靜態(tài)方法。關(guān)系可以是二元或n元的,以及其它關(guān)系。另外,可由與要相關(guān)的項(xiàng)相關(guān)聯(lián)的名稱或其它元數(shù)據(jù)影響關(guān)系或方法的名稱。應(yīng)該理解,盡管可以自動(dòng)生成類(lèi),但是方法400也可以被手動(dòng)實(shí)現(xiàn),例如通過(guò)在IDE(集成開(kāi)發(fā)環(huán)境)或類(lèi)似系統(tǒng)的幫助下,或在沒(méi)有其幫助的情況下在面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中標(biāo)識(shí)諸如數(shù)據(jù)類(lèi)型等各種元素,一級(jí)手動(dòng)指定定義元素之間的關(guān)系來(lái)實(shí)現(xiàn)。
圖8示出了根據(jù)本發(fā)明的一方面的編譯方法800。在810處,接收到關(guān)系表達(dá)式。關(guān)系表達(dá)式可以被表示為類(lèi)的屬性,諸如“cutomer.Orders”。在820處,編譯程序或其它系統(tǒng)可以接收表達(dá)式并生成或擴(kuò)展到與類(lèi)中定義的例如指定項(xiàng)之間的關(guān)系的方法相關(guān)聯(lián)的代碼。為了便于這樣的代碼生成,編譯器可以利用例如與關(guān)系類(lèi)相關(guān)聯(lián)的元數(shù)據(jù),來(lái)確定表達(dá)式和更詳細(xì)的方法調(diào)用之間的映射。從而,編譯器調(diào)用作為在諸如類(lèi)型等項(xiàng)上直接定義的屬性的靜態(tài)方法。
轉(zhuǎn)向圖9,示出用于與數(shù)據(jù)交互的方法900。在參考標(biāo)號(hào)910處,接收到關(guān)系表達(dá)式。關(guān)系表達(dá)式標(biāo)識(shí)兩個(gè)或多個(gè)項(xiàng)或元素以及項(xiàng)之間的關(guān)系。根據(jù)本發(fā)明的一個(gè)方面,可以在屬性格式中指定表達(dá)式,使得關(guān)系看上去是項(xiàng)的屬性,例如“customer.Orders”、“order.Customer“或”orders.Customers”。在標(biāo)號(hào)920處,定位與該關(guān)系表達(dá)式相關(guān)聯(lián)的方法。在一個(gè)實(shí)例中,該方法可以駐留在由此與項(xiàng)目本身無(wú)關(guān)地定義的分離的關(guān)系類(lèi)中。例如,可以確定“customer.Orders”映射至定單關(guān)系類(lèi),并特別地映射至方法“GetOrdersGivenCustomer(Customer customer)”。在930處,可以執(zhí)行該方法。該方法可便于數(shù)據(jù)導(dǎo)航和可任選的其它功能,諸如檢索、添加、移除或其它數(shù)據(jù)交互或操縱。在參考標(biāo)號(hào)940處,如果合適可以返回結(jié)果。
圖10是根據(jù)本發(fā)明的一方面的程序協(xié)助方法1000。方法1000可協(xié)助關(guān)系的指定。在參考標(biāo)號(hào)1010處,特定類(lèi)型的項(xiàng)被接收、檢索或獲取。隨該項(xiàng)之后,在1020處,接收、檢索或以獲取觸發(fā)器。觸發(fā)器可以對(duì)應(yīng)于諸如空格(““)、點(diǎn)(“.”)、回車(chē)等等。在參考標(biāo)號(hào)1030處,例如,以基于所定義的關(guān)系的提示的形式提供協(xié)助。例如,如果用戶輸入“customer.”,那么可以提供諸如“Orders”等的完成提示。提示可以例如在下拉式菜單中向用戶顯示。在選取之后,可以完成語(yǔ)句,并被讀為“customer.Orders”。這減少了記憶或回想與給定項(xiàng)相關(guān)聯(lián)的所有可能關(guān)系的負(fù)擔(dān),并最小化排字錯(cuò)誤等等。
除了提示之外,應(yīng)該注意到,可以提供其它形式的程序協(xié)助,諸如關(guān)于關(guān)系表達(dá)式的獨(dú)特的格式化和/或著色。而且,可以提供工具提示,其中例如類(lèi)型信息在文字框中冒出或在光標(biāo)滾動(dòng)或懸停后冒出,和/或按下預(yù)定的組合鍵之后冒出。也構(gòu)想了關(guān)于關(guān)系表達(dá)式的其它程序協(xié)助,且這些程序協(xié)助也在本發(fā)明要求保護(hù)的范圍之內(nèi)。
圖11是示出可以用來(lái)生成實(shí)現(xiàn)代碼(例如,可執(zhí)行代碼、中間語(yǔ)言...)的編譯器環(huán)境1100。然而,環(huán)境1100的各方面也可以用作例如關(guān)于代碼編輯器的后臺(tái)編譯器的一部分,以使能夠提供智能或上下文敏感的程序設(shè)計(jì)協(xié)助。編譯器環(huán)境1100包括編譯器1120,它包括前端組件1120、轉(zhuǎn)換器組件1130、后端組件1140、出錯(cuò)檢驗(yàn)器組件1150、符號(hào)表1160、分析樹(shù)1170、以及狀態(tài)1180。編譯器1120接受源代碼作為輸入,并產(chǎn)生實(shí)現(xiàn)代碼作為輸出。輸入可以包括但不限于,關(guān)系表達(dá)式、類(lèi)和/或如此處所述的其它構(gòu)造。編譯器環(huán)境1100的組件和模塊之間的關(guān)系示出數(shù)據(jù)的主要流程。為了清楚和簡(jiǎn)要起見(jiàn),不示出其它組件和關(guān)系。取決于實(shí)現(xiàn),組件可以被添加、省略、分裂成多個(gè)模塊、與其它模塊組合和/或模塊的其它配置。
編譯器1120可以接受含有與處理元素序列相關(guān)聯(lián)的源代碼的文件作為輸入。源代碼可以包括關(guān)系表達(dá)式、類(lèi)、其它表達(dá)式、方法和/或其它程序構(gòu)造。編譯器1120可以結(jié)合用于分析構(gòu)造和生成或注入代碼的一個(gè)或多個(gè)組件來(lái)處理源代碼。
前端組件1120讀取源代碼并對(duì)其執(zhí)行詞法分析。本質(zhì)上,前端組件1120讀取源代碼中的字符(例如,字母數(shù)字)序列并將其轉(zhuǎn)換成句法元素或標(biāo)記,指示常量、標(biāo)識(shí)符、運(yùn)算符、關(guān)鍵詞和標(biāo)點(diǎn)等等。
轉(zhuǎn)換器組件1130將標(biāo)記解析為中間表示。例如,轉(zhuǎn)換器組件1130可以檢查句法并將標(biāo)記組合成表達(dá)式或其它句法結(jié)構(gòu),這些句法結(jié)構(gòu)進(jìn)而又合并成語(yǔ)句樹(shù)。概念上,這些樹(shù)形成分析樹(shù)1170。而且,如果合適,轉(zhuǎn)換器模塊1130可以將條目放入列出在源代碼中使用的符號(hào)名和類(lèi)型信息及其相關(guān)特征的符號(hào)表1130中。
狀態(tài)1180可以用來(lái)跟蹤編譯器1120在處理所接收或檢索到的源代碼以及形成分析樹(shù)1170時(shí)的進(jìn)度。例如,不同的狀態(tài)值指示編譯器1120處于類(lèi)定義或功能的開(kāi)始處,剛聲明了類(lèi)成員或已經(jīng)完成表達(dá)式。隨著編譯器行進(jìn),它持續(xù)更新?tīng)顟B(tài)1180。編譯器1120可以向之后向編譯器1120提供輸入的外部實(shí)體部分或全部地展示狀態(tài)1180。
基于源代碼中的構(gòu)造或其它信號(hào)(或者如果識(shí)別了機(jī)遇),轉(zhuǎn)換器1130或另一組件可以注入代碼以便于有效且正確地執(zhí)行。例如,可以注入代碼來(lái)擴(kuò)展理解縮略語(yǔ)或?qū)⒉樵兝斫廪D(zhuǎn)換成序列運(yùn)算符。編碼至轉(zhuǎn)換器1130或其它組件內(nèi)的規(guī)則指明為實(shí)現(xiàn)所期望的功能必須做什么,并標(biāo)識(shí)將被注入代碼或?qū)?zhí)行其它操作的位置。注入的代碼一般包括一個(gè)或多個(gè)位置處添加的語(yǔ)句、元數(shù)據(jù)、或其它元素,但是該術(shù)語(yǔ)也可以包括改變、刪除或以修改現(xiàn)有的源代碼。注入代碼可以被存儲(chǔ)為一個(gè)或多個(gè)模板或以某種其它形式儲(chǔ)存。另外,應(yīng)該理解,可以操縱符號(hào)表和變換分析樹(shù)。
基于符號(hào)表1160和分析樹(shù)1170,后端組件1140可以將中間表示轉(zhuǎn)換成輸出代碼。后端組件1140將中間表示轉(zhuǎn)換為可在目標(biāo)處理器中執(zhí)行或可由該目標(biāo)處理器執(zhí)行的指令、變量的存儲(chǔ)器分配等等。輸出代碼可以由真實(shí)的處理器執(zhí)行,但是本發(fā)明也構(gòu)想了輸出代碼由虛擬處理器執(zhí)行。
此外,前端組件1120和后端組件1140可以執(zhí)行其它的功能,諸如代碼優(yōu)化,也可以將所述操作作為單個(gè)階段或在多個(gè)階段中執(zhí)行。編譯器1120組件的各種其它方面在本質(zhì)上是常規(guī)的,且可以使用執(zhí)行等效功能的組件代替。另外,在處理源代碼的過(guò)程中的各個(gè)階段,出錯(cuò)檢驗(yàn)器1150可以檢驗(yàn)諸如詞匯結(jié)構(gòu)、句法錯(cuò)誤甚至語(yǔ)義錯(cuò)誤等錯(cuò)誤。在檢測(cè)到錯(cuò)誤后,檢驗(yàn)器組件1150可以中止編譯并生成指示錯(cuò)誤的消息。
為了提供用于本發(fā)明的各方面的環(huán)境,圖12和13及以下討論旨在提供可在其中實(shí)現(xiàn)本發(fā)明的各方面的合適的計(jì)算環(huán)境900的簡(jiǎn)要概括描述。盡管以上在可以在一臺(tái)和/或多臺(tái)計(jì)算機(jī)上運(yùn)行的計(jì)算機(jī)程序的計(jì)算機(jī)可執(zhí)行指令的通用語(yǔ)境中描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員可以認(rèn)識(shí)到,本發(fā)明也可以結(jié)合其它程序模塊來(lái)實(shí)現(xiàn)。一般而言,程序模塊包括例程、程序、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)和/或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類(lèi)型。而且,本領(lǐng)域的技術(shù)人員可以理解,本發(fā)明方法可以使用其它計(jì)算機(jī)系統(tǒng)配置來(lái)實(shí)現(xiàn),包括單處理器或多處理器計(jì)算機(jī)系統(tǒng)、小型計(jì)算設(shè)備、大型機(jī)、以及個(gè)人計(jì)算機(jī)、手持式計(jì)算設(shè)備(例如,個(gè)人數(shù)字助理(PDA)、電話、手表...)、基于微處理器的或可編程消費(fèi)者或工業(yè)電子產(chǎn)品等。本發(fā)明所示方面也可以在分布式計(jì)算環(huán)境中實(shí)現(xiàn),在分布式計(jì)算環(huán)境中任務(wù)是由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的。然而,本發(fā)明的某些(如果不是全部)方面也可以在獨(dú)立計(jì)算機(jī)上實(shí)現(xiàn)。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地或遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
參考圖12,用于實(shí)現(xiàn)此處所揭示的各方面的示例性環(huán)境1210包括計(jì)算機(jī)1212(例如,臺(tái)式機(jī)、膝上型計(jì)算機(jī)、服務(wù)器、手持式設(shè)備、可編程消費(fèi)者或工業(yè)電子產(chǎn)品…)。計(jì)算機(jī)1212包括處理單元1214、系統(tǒng)存儲(chǔ)器1216和系統(tǒng)總線1218。系統(tǒng)總線1218將包括但不限于系統(tǒng)總線1216在內(nèi)的系統(tǒng)組件耦合至處理單元1214。處理單元1214可以是各種可用的任何處理器。雙微處理器和其它多處理器體系結(jié)構(gòu)也可以用作處理單元1214。
系統(tǒng)總線1218可以是若干類(lèi)型的總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線或外部總線和/或使用各種可用的總線體系結(jié)構(gòu)中的任一種的局部總線,可用的總線體系結(jié)構(gòu)包括,但不限于,11位總線、工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)、微通道體系結(jié)構(gòu)(MCA)、擴(kuò)展的ISA(EISA)、智能驅(qū)動(dòng)器電子接口(IDE)、VESA局部總線(VLB)、外圍部件互連(PCI)、通用串行總線(USB)、高級(jí)圖形接口(AGP)、個(gè)人計(jì)算機(jī)存儲(chǔ)卡國(guó)際協(xié)會(huì)總線(PCMCIA)以及小型計(jì)算機(jī)系統(tǒng)接口(SCSI)。
系統(tǒng)存儲(chǔ)器1216包括易失性存儲(chǔ)器1220和非易失性存儲(chǔ)器1222?;据斎?輸出系統(tǒng)(BIOS)包含有助于諸如在啟動(dòng)時(shí)在計(jì)算機(jī)1212中的元件之間傳遞信息的基本例程,它通常存儲(chǔ)在非易失性存儲(chǔ)器1222中。作為說(shuō)明,而非限制,非易失性存儲(chǔ)器1222可以包括只讀存儲(chǔ)器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)、電可擦除ROM(EEPROM)或閃存。易失性存儲(chǔ)器1220可以包括用作外部高速緩存的隨機(jī)存取存儲(chǔ)器(RAM)。作為說(shuō)明,而非限制,RAM以多種形式可用,諸如同步RAM(SRAM)、動(dòng)態(tài)RAM(DRAM)、同步DRAM(SDRAM)、雙數(shù)據(jù)速率SDRAM(DDR SDRAM)、增強(qiáng)型SDRAM(ESDRAM)、同步鏈路DRAM(SLDRAM)以及直接Rambus RAM(DRRAM)。
計(jì)算機(jī)1212也包括可移動(dòng)/不可以移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。例如,圖12示出磁盤(pán)存儲(chǔ)1224。磁盤(pán)存儲(chǔ)1224包括,但不限于,如磁盤(pán)驅(qū)動(dòng)器、軟盤(pán)驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)器、Jaz驅(qū)動(dòng)器、Zip驅(qū)動(dòng)器、LS-100驅(qū)動(dòng)器、閃存卡或記憶棒等設(shè)備。另外,磁盤(pán)存儲(chǔ)1224可以包括獨(dú)立或與其它存儲(chǔ)介質(zhì)結(jié)合的存儲(chǔ)介質(zhì),包括但不限于,諸如光盤(pán)ROM設(shè)備(CD-ROM)、CD可記錄驅(qū)動(dòng)器(CD-R驅(qū)動(dòng)器)、CD可重寫(xiě)驅(qū)動(dòng)器(CD-RW驅(qū)動(dòng)器)或數(shù)字多功能盤(pán)ROM驅(qū)動(dòng)器(DVD-ROM)等的光盤(pán)驅(qū)動(dòng)器。為了便于將磁盤(pán)存儲(chǔ)設(shè)備1224連接至系統(tǒng)總線1218,一般使用諸如接口1226等可移動(dòng)或不可移動(dòng)接口。
可以理解,圖12描述了作為用戶和在合適的操作環(huán)境1210中描述的基本計(jì)算機(jī)資源之間的中介的軟件。這樣的軟件包括操作系統(tǒng)1228??杀淮鎯?chǔ)在磁盤(pán)存儲(chǔ)1224上的操作系統(tǒng)1228用來(lái)控制和分配計(jì)算機(jī)系統(tǒng)1212的資源。系統(tǒng)應(yīng)用程序1230利用了操作系統(tǒng)1228通過(guò)存儲(chǔ)在系統(tǒng)存儲(chǔ)器1216或者磁盤(pán)存儲(chǔ)1214上的程序模塊1232和程序數(shù)據(jù)1234執(zhí)行的資源管理??梢岳斫?,本發(fā)明可以使用各種操作系統(tǒng)或操作系統(tǒng)的組合來(lái)實(shí)現(xiàn)。
用戶通過(guò)輸入設(shè)備1236向計(jì)算機(jī)1212輸入命令或信息。輸入設(shè)備1236包括,但不限于,諸如鼠標(biāo)、跟蹤球、指示筆、觸摸墊等定點(diǎn)設(shè)備、鍵盤(pán)、麥克風(fēng)、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線、掃描儀、TV調(diào)諧器卡、數(shù)碼相機(jī)、數(shù)碼攝像機(jī)、網(wǎng)絡(luò)攝像頭等。這些和其它輸入設(shè)備經(jīng)由接口端口1238通過(guò)系統(tǒng)總線1218連接至處理單元1214。接口端口1238包括,例如串行端口、并行端口、游戲端口和通用串行總線(USB)。輸出設(shè)備1240使用某些與輸入設(shè)備1236相同類(lèi)型的端口。從而,例如,USB端口可以用于向計(jì)算機(jī)1212提供輸入,并向輸出設(shè)備1240提供來(lái)自計(jì)算機(jī)1212的輸出信息。提供輸出適配器1242來(lái)示出存在類(lèi)似監(jiān)視器(例如,平板和CRT)、揚(yáng)聲器和打印機(jī)等需要專(zhuān)用適配器的輸出設(shè)備1240的某些輸出設(shè)備1240。作為說(shuō)明而非限制,輸出適配器1242包括提供輸出設(shè)備1240和系統(tǒng)總線1218之間的連接手段的顯卡和聲卡。應(yīng)該注意,諸如遠(yuǎn)程計(jì)算機(jī)1244等其它設(shè)備和/或設(shè)備系統(tǒng)同時(shí)提供輸入和輸出能力兩者。
計(jì)算機(jī)1212可使用至一臺(tái)或多臺(tái)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)1244的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)1244可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、工作站、基于微處理器的裝置、對(duì)等設(shè)備或其它常見(jiàn)網(wǎng)絡(luò)節(jié)點(diǎn)等,且通常包括上文相對(duì)于計(jì)算機(jī)1212描述的許多或所有元件。為簡(jiǎn)潔起見(jiàn),對(duì)于遠(yuǎn)程計(jì)算機(jī)1244僅示出存儲(chǔ)器存儲(chǔ)設(shè)備1246。遠(yuǎn)程計(jì)算機(jī)1244通過(guò)網(wǎng)絡(luò)接口1248被邏輯連接至計(jì)算機(jī)1212,并且然后通過(guò)通信連接1250被物理地連接。網(wǎng)絡(luò)接口1248包括諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)的通信網(wǎng)絡(luò)。LAN技術(shù)包括光纖分布式數(shù)據(jù)接口(FDDI)、銅線分布式數(shù)據(jù)接口(CDDI)、以太網(wǎng)/IEEE 802.3、令牌環(huán)/IEEE 802.5等。WAN技術(shù)包括,但不限于,點(diǎn)對(duì)點(diǎn)鏈路、類(lèi)似綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)及其變體的電路交換網(wǎng)絡(luò)、分組交換網(wǎng)絡(luò)和數(shù)字用戶線(DSL)。
通信連接1250指的是用來(lái)將網(wǎng)絡(luò)接口1248連接至總線1218的硬件/軟件。盡管為說(shuō)明清楚,將通信連接1250示為位于計(jì)算機(jī)1212內(nèi),然而通信連接1250也可以在計(jì)算機(jī)1212外部。僅為示例的目的,連接至網(wǎng)絡(luò)接口1248所必需的硬件/軟件包括內(nèi)部和外部技術(shù),諸如包括常規(guī)電話級(jí)調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器、電力調(diào)制解調(diào)器(power modems)、DSL調(diào)制解調(diào)器等的調(diào)制解調(diào)器、ISDN適配器以及以太網(wǎng)卡或組件。
圖13是可與本發(fā)明交互的示例計(jì)算環(huán)境1300的示意性框圖。系統(tǒng)1300包括一個(gè)或多個(gè)客戶機(jī)1310。客戶機(jī)1310可以是硬件和/或軟件(例如,線程、進(jìn)程、計(jì)算設(shè)備)。系統(tǒng)1300也包括一個(gè)或多個(gè)服務(wù)器1330。這樣,系統(tǒng)1300可以對(duì)應(yīng)于兩層的客戶機(jī)服務(wù)器模型或多層模型(例如,客戶機(jī)、中間層服務(wù)器、數(shù)據(jù)服務(wù)器)以及其它模型。服務(wù)器1330也可以是硬件和/或軟件(例如,線程、進(jìn)程、計(jì)算設(shè)備)。例如,服務(wù)器1330可以容納通過(guò)使用本發(fā)明來(lái)執(zhí)行轉(zhuǎn)換的線程??蛻魴C(jī)1310和服務(wù)器1330之間的一種可能的通信可以是適于在兩個(gè)或多個(gè)計(jì)算機(jī)進(jìn)程之間傳輸?shù)臄?shù)據(jù)包的形式。
系統(tǒng)1300包括可以用來(lái)促進(jìn)客戶機(jī)1310和服務(wù)器1330之間通信的通信架構(gòu)1350??蛻魴C(jī)1310可操作地連接至可用來(lái)存儲(chǔ)對(duì)客戶機(jī)1310本地的信息的一個(gè)或多個(gè)客戶機(jī)數(shù)據(jù)存儲(chǔ)1360。類(lèi)似地,服務(wù)器1330可操作地連接至可被用來(lái)存儲(chǔ)對(duì)服務(wù)器1330本地的信息的一個(gè)或多個(gè)服務(wù)器數(shù)據(jù)存儲(chǔ)1340。
以上描述的包括所要求保護(hù)的本發(fā)明的各方面的示例。當(dāng)然,不可能為描述所要求保護(hù)的本發(fā)明而描述每個(gè)可想象的組件或方法的組合,但是本領(lǐng)域的普通技術(shù)人員可以認(rèn)識(shí)到,此處所揭示的本發(fā)明的眾多其它組合和排列是可能的。從而,本發(fā)明旨在包括落入所附權(quán)利要求書(shū)精神和范圍內(nèi)的所有這樣的變更、修改和變化。而且,就在詳細(xì)描述或權(quán)利要求書(shū)中使用的術(shù)語(yǔ)“包括”、“含有”或“具有”及其變體而言,這樣的術(shù)語(yǔ)旨在類(lèi)似于解釋術(shù)語(yǔ)“包含”(當(dāng)術(shù)語(yǔ)“包含”被用作權(quán)利要求書(shū)中的過(guò)渡詞時(shí))的方式是包含性的。
權(quán)利要求
1.一種計(jì)算機(jī)實(shí)現(xiàn)的關(guān)系系統(tǒng),所述關(guān)系系統(tǒng)包括以下計(jì)算機(jī)可執(zhí)行組件項(xiàng)接收器組件,用于獲取兩個(gè)或多個(gè)程序項(xiàng);以及關(guān)系生成組件,用于從所述接收器組件接受項(xiàng),并生成定義所述項(xiàng)之間的一個(gè)或多個(gè)關(guān)系的構(gòu)造。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述項(xiàng)是數(shù)據(jù)類(lèi)型和XML文檔之一。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述構(gòu)造是類(lèi)。
4.如權(quán)利要求3所述的系統(tǒng),其特征在于,所述類(lèi)包括根據(jù)指定關(guān)系檢索特定項(xiàng)元素的方法。
5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述類(lèi)是靜態(tài)類(lèi)。
6.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述一個(gè)或多個(gè)關(guān)系是包括一對(duì)一、一對(duì)多、多對(duì)一和多對(duì)多的二元關(guān)系。
7.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述一個(gè)或多個(gè)關(guān)系是由對(duì)所述項(xiàng)封裝導(dǎo)航計(jì)算的方法指定的。
8.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述一個(gè)或多個(gè)關(guān)系包括組成、關(guān)聯(lián)和鏈接之一。
9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述關(guān)聯(lián)是公值、條件和實(shí)體之一。
10.如權(quán)利要求1所述的系統(tǒng),其特征在于,還包括為關(guān)系生成項(xiàng)專(zhuān)用名的影響組件。
11.一種其上存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括第一數(shù)據(jù)類(lèi)型;第二數(shù)據(jù)類(lèi)型;以及定義所述第一數(shù)據(jù)類(lèi)型與第二數(shù)據(jù)類(lèi)型之間獨(dú)立于類(lèi)型的關(guān)系的類(lèi)。
12.如權(quán)利要求11所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述類(lèi)包括封裝定義類(lèi)型之間關(guān)系的計(jì)算的方法。
13.如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述關(guān)系包括二元、組成、關(guān)聯(lián)和鏈接之一。
14.如權(quán)利要求12所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述類(lèi)型映射至數(shù)據(jù)庫(kù)表,且所述關(guān)系捕捉所述表之間的公共屬性上的連接。
15.一種便于數(shù)據(jù)交互的計(jì)算機(jī)實(shí)現(xiàn)的方法,包括以下計(jì)算機(jī)可執(zhí)行動(dòng)作接收兩個(gè)或多個(gè)項(xiàng)之間的關(guān)系表達(dá)式;定位與所述表達(dá)式相關(guān)聯(lián)的項(xiàng)外部的方法;以及執(zhí)行所述方法來(lái)計(jì)算所述關(guān)系和/或在所述項(xiàng)之間導(dǎo)航。
16.如權(quán)利要求15所述的方法,其特征在于,還包括返回結(jié)果。
17.如權(quán)利要求15所述的方法,其特征在于,接收關(guān)系表達(dá)式包括接收屬性記號(hào)中類(lèi)型之間的關(guān)系。
18.如權(quán)利要求17所述的方法,其特征在于,定位方法包括將所述表達(dá)式從屬性記號(hào)擴(kuò)展至方法名。
19.如權(quán)利要求18所述的方法,其特征在于,定位方法還包括標(biāo)識(shí)含有一個(gè)或多個(gè)關(guān)系方法的關(guān)系類(lèi)。
20.如權(quán)利要求15所述的方法,其特征在于,所述關(guān)系包括二元、組成、關(guān)聯(lián)和鏈接之一。
全文摘要
本發(fā)明涉及項(xiàng)之間的關(guān)系。可以在項(xiàng)本身外部定義項(xiàng)之間的關(guān)系,從而提供模塊化、靈活且可擴(kuò)展的系統(tǒng)。例如,可以在包含用于根據(jù)指定的關(guān)系返回特定元素或值的方法的類(lèi)中定義項(xiàng)之間的關(guān)系。而且,可以擴(kuò)展編譯器或類(lèi)似的系統(tǒng)來(lái)接受簡(jiǎn)單屬性格式的關(guān)系表達(dá)式,并指引這樣的調(diào)用至特定的方法。
文檔編號(hào)G06F17/30GK1821957SQ200610005450
公開(kāi)日2006年8月23日 申請(qǐng)日期2006年1月18日 優(yōu)先權(quán)日2005年2月18日
發(fā)明者B·阿爾巴哈瑞, H·J·M·邁耶, M·E·蒂姆 申請(qǐng)人:微軟公司