關係建模的製作方法
2023-09-11 21:18:15 2
專利名稱:關係建模的製作方法
相關申請的交叉引用本申請要求於2005年2月18日提交的、名為「OBJECT ORIENTEDRELATIONSHIP MODELING(面向對象關係建模)」的美國專利臨時申請第60/654,237號的優先權。該臨時申請的整體通過引用包含在此。
背景技術:
程序設計語言是專門用來為執行任務而將指令傳遞至計算機或微處理器的形式語言。近年來,面向對象程序設計成為設計員和程式設計師用來實現計算機系統內的功能的多個慣用且流行的模型之一。面向對象的程序設計是獨特的,至少因為其前提是按照對象或事物而不是像其它模型那樣按照動作來查看。
對象技術的好處源於三個基本原理封裝、多態以及繼承。對象隱藏或封裝其數據和相關聯方法的內部結構。並非展示實現細節,而是對象呈現清晰地表示它們的抽象而無需無關信息的接口。多態比封裝更進一步。多態允許為不同的數據類型使用相同的代碼,即多種形狀一個接口的想法。從而,軟體組件可以請求另一組件而不必確切地了解該組件。接收請求的組件解釋該請求,並根據其變量和數據來判斷如何執行該請求。第三個原理是繼承性,它使得開發員能夠再次使用之前存在的設計和代碼。該能力允許開發員避免從零開始創建所有軟體。相反,通過繼承,開發員可以導出繼承和修改其它類的狀態和行為的子類。
面向對象的程序設計模型通常由基於類的方法來定義。在該系統中,對象是包括狀態和行為兩者的實體。對象的狀態和行為均由類定義,類標識了特定類型的對象。基於類定義創建的對象被認為是在動態類型中反映的該類的實例。因此,類指定對象可以包含的數據(即,狀態)以及該對象可以執行的方法、功能或行為。方法用於通過變更其中包含的數據來修改相關聯對象的內部狀態。對象中這樣的數據和方法的組合通常被稱為面向對象程序設計中的封裝。封裝規定對象的狀態僅由與該對象相關聯的良好定義的方法改變。當對象的行為限於這樣的良好定義的位置和接口時,對象中的改變(例如,代碼修改)將對系統中的其它對象和元素產生最小的影響。
發明內容
以下提供了本發明的簡化概述,以提供對所要求保護的本發明的主題的某些方面的基本理解。該概述不是本發明的廣泛概觀。它既不旨在標識本發明的關鍵或重要的元素,也不描繪本發明的範圍。該概述的唯一目的是以簡化的形式呈現本發明的某些概念,作為之後呈現的更詳細描述的序言。
簡言之,本發明涉及項和/或其元素之間的關係的表達式。更具體地,關係被作為一級概念。根據本發明的一方面,關係可以由項外部的構造,諸如類來表示,該構造提供計算和/或導航關係的機制或方法。根據本發明的另一方面,可以利用數據類型屬性記號來調用關係方法。
本發明的各方面至少因為它們提供了用於與項之間的關係交互的可擴展且易於使用的系統和方法而是有益的。通過使得關係成為一級編程對象,可以在現有項之間創建新的關係,而不必修改項。這是有價值的,至少因為它允許定義可能不受程式設計師控制的某些或全部項或元素之間的關係,或者在不可能修改這樣的元素來反映新關係的情況下允許定義這樣的關係。而且,可以通過屬性表示容易地實現類方法的調用,並將其映射至實際方法記號。
為了達到前述和相關的目的,此處結合以下描述和附圖來描述所要求保護的本發明的某些說明性方面。這些方面指示了可實現本發明的各種方法,所有這些方法旨在落入所要求保護的本發明的範圍之內。當結合附圖考慮閱讀以下詳細描述時,其它優點和新穎的特徵將變得明顯。
圖1是關係系統的框圖。
圖2是示例性關係系統的框圖。
圖3是包含影響組件的關係系統的框圖。
圖4是編譯系統的框圖。
圖5是便於與數據交互的接口系統的框圖。
圖6是集成開發系統或環境的框圖。
圖7是定義關係的方法的流程圖。
圖8是編譯方法的流程圖。
圖9是數據交互方法的流程圖。
圖10是協助程序開發的方法的流程圖。
圖11是示例性編譯環境的示意性框圖。
圖12是示出合適的操作環境的示意性框圖。
圖13是示例計算環境的示意性框圖。
具體實施例方式
現在參考附圖描述本發明的各方面,在所有附圖中,同樣的標號指的是相同或對應的元素。然而,應該理解,附圖和關於附圖的詳細描述不旨在將所要求保護的本發明限於所揭示的具體形式。而是相反,本發明旨在覆蓋落入所要求保護的本發明的精神和範圍內的所有修改、等效方案和替換方案。
如在本申請中所用的,術語「組件」和「系統」等指的是計算機相關的實體,它們或者是硬體、硬體和軟體的組合、軟體或者是執行中的軟體。例如,組件可以是,但不限於,運行在處理器上的進程、處理器、對象、可執行代碼、執行的線程、程序和/或計算機。作為說明,運行在伺服器上的應用程式和伺服器本身都可以是組件。一個或多個組件可以駐留在執行中的進程和/或線程內,且組件可以位於一臺計算機上和/或分布在兩臺或多臺計算機之間。
術語「示例性」在此處用來指的是作為示例、實例或說明。此處被描述為「示例性」的任何方面或設計不必被解釋為與其它方面或設計相比是較佳的或更有利的。而且,此處提供了各種示例性代碼片段。應該理解,這些示例是為說明清楚的目的而提供的,並且應理解,這些示例不意味著將所揭示的本發明的範圍限於在所要求保護的本發明的各方面描述中所使用的語言、體系結構和/或特徵。
可以將基於人工智慧的系統(例如,顯式和/或隱式訓練的分類器、基於知識的系統...)用於執行根據如下所述的本發明的一個或多個方面的推斷和/或概率判斷和/或基於統計的判斷。如此處所用的,術語「推斷」一般指的是從通過事件和/或數據捕捉到的一組觀察值中推出或推斷系統、環境和/或用戶的狀態的過程。推斷例如可以被用來標識特定的上下文或動作,或者可以生成狀態的概率分布。推斷可以是概率性的,即,基於對數據和事件的考慮對所關注的狀態的概率分布的計算。推斷也可以指的是用於從一組事件和/或數據中組成更高級事件的技術。這樣的推斷導致從一組觀察到的事件和/或存儲的事件數據中構造出新的事件或動作,而不論原先的事件是否在時間上緊密相關,也不論原先的事件和數據是來自一個還是若干個事件和數據源。可以將各種分類方案和/或系統(例如,支持矢量機、神經網絡、專家系統、貝葉斯信任網絡、模糊邏輯、數據融合引擎...)用於執行關於本發明的自動和/或推斷出的動作。
另外,所揭示的本發明可以被實現為系統、方法、裝置或製品,它們使用生產軟體、固件、硬體或其任何組合的標準程序設計和/或工程技術來控制基於計算機或處理器的設備,以實現此處所詳細描述的各方面。如此所用的術語「製品」(或者「電腦程式產品」)旨在包括可從任何計算機可讀設備、載波或介質來訪問的電腦程式。例如,計算機可讀介質可以包括,但不限於,磁性存儲設備(例如,硬碟、軟盤、磁條...)、光碟(例如,高密度盤(CD)、數字多功能盤(DVD)...)、智慧卡、以及快閃記憶體設備(例如,卡、棒、跳轉驅動器(jump drive)...)。另外,可以理解,載波可以用來承載諸如在發送和接收電子郵件或訪問諸如網際網路或區域網(LAN)等網絡時使用的計算機可讀電子數據。當然,本領域的技術人員可以認識到,可以對該配置進行各種修改,而不背離所要求保護的本發明的範圍和精神。
最初轉向圖1,根據本發明的一方面示出關係系統100。關係系統100可以包括項接收器組件110和關係生成系統120。項接收器組件110接收、檢索或獲取項和/或其元素。這些項可以包括,但不限於,數據類型、對象、網頁以及XML文檔。關係生成組件120從項接收器組件110中接收、檢索或以獲取多個項。關係生成組件120分析項並指定和/或定義項之間的關係。例如,關係可以在諸如類或更具體地靜態類等程序構造中定義。類可以包括封裝用於根據特定關係檢索各種項或其元素的集合的功能的類外部的方法或對方法的引用。
應該注意,關係生成系統100以一種以上方式有益。例如,系統100支持諸如項和它們之間的關係或連結等概念的分離,以及開發中的模塊性。而且,項和關係的分離提供靈活性及可擴展性,因為項不可能總是可供修改或者修改它們可能是不可行的。例如,考慮這樣的情形,其中存在以幾十年前的某種傳統格式定義的人和關於每個人的數據或屬性的集合。在此之後,修改該集合來為每個人添加電話號碼可能是不可能或不可行的。現在,可以生成分離的關係構造以將人集合與分離的手機集合相關聯。
圖2示出了示例性關係交互系統200。提供系統200以便於描述和討論本發明的各方面。系統200包括一個或多個關係方法210和兩個項A 220和B 230。如圖所示,項A 220與項B 230之間的關係不被定義在項屬性內,也不被定義為項屬性。相反,該關係被定義在項外部作為一級概念。關係方法210封裝該計算來與項和項元素交互。
作為示例而非限制,考慮對象至關係的映射情形。具體地,在該情形中期望針對資料庫與對象的關係來進行編程。概念上包含類型T的對象的資料庫表可以在程序設計語言中使用諸如C#中的IENumerableT(枚舉)等集合類型來表示,其中T是帶有映射至表欄位的屬性的類。資料庫關係然後可以在該程序設計語言中使用靜態類表示。該類提供通過封裝連接條件來導航這些關係的靜態方法。例如,項A 220可以是對應於顧客(Customer)表的對象、類型或類,而項B 230可以是對應於定單(Order)表的對象、類型或類。例如public class Customer{...}public class Order{...}可以如下以諸如靜態類等編程構造與項A 220和B 230分離地定義關係210public static class OrderRelationship{public static Customer GetCustomerGivenOrder(Order order);public static IEnumerableOrderGetOrdersGivenCustomer(Customer,customer);public static IEnumerableCustomerGetCustomersGivenOrders(IEnumerableOrderorders);public static IEnumerableOrderGetOrdersGivenCustomers(IEnumerableCustomercustomers);}此處,類方法提供一種根據可能存在於顧客與定單之間的多個關係來導航數據存儲的機制。此處,由類和類方法封裝二元關係。二元關係可以包括一對一、一對多、多對一和多對多關係。第一方法「GetCustomerGivenOrder(給定定單獲取顧客)」捕捉給定一特定定單來檢索一顧客的一對一關係。第二方法「GetOrdersGivenCustomer(給定一顧客獲取多個定單)」是多對一關係。此處,檢索與特定顧客相關聯的多個定單。第三方法和第四方法「GetCustomersGivenOrders(給定多個定單獲取多個顧客)」及「GetOrdersGivenCustomers(給定多個顧客獲取多個定單)」是多對多關係。具體地,第一方法檢索與指定定單相關聯的顧客集合。給定一組定單,第四方法可以檢索相關的顧客。
前述和後繼的示例不旨在限制所附權利要求書的範圍。本發明的各方面可適用於其中項之間存在關係或導航的任何情形。例如,考慮連結文檔的情形。項A 220和項B 230可以是各種格式中的任何一種的電子文檔,這些格式包括但不限於超文本和XML。並非包括諸如從項A 220至項B 230的超連結等連結。文檔之間的關係210可以被定義為在其外部。這使得可以定義關係,而不必修改文檔之一。
也構想了除二元關係和連結之外的其它關係,且它們也屬於權利要求書的範圍內,這些其它關係包括但不限於組成和關聯。如果一個項被嵌套在另一項內,則該項與另一項具有組成關係。這樣,項或實體可以組成任何其它項或實體。下表示出消息-參與者組成關係
表1根據關聯,存在若干不同的類型,包括引用、公值、條件和實體。引用關聯可以對應於主鍵-外鍵關係。以下示例示出了顧客-定單引用關聯關係,其中表2對應於顧客而表3對應於定單
表2
表3公值關聯是其中跨兩個或更多項共享公值的關係。例如,下表示出在人(表4)和器材(表5)之間所示的音樂家公值關聯
表4
表5條件關聯是由查詢準則表達的關係。下表提供了聯繫人-文檔條件關聯
表6
表7實體關聯圍繞一個項或實體具有n個端點,它擔當通過其它類型關係至其它實體的中心。連結關係僅是含有一個中心以及兩個基於引用的端點的實體關聯的特殊情況。以下的示例性表示出了僱傭關係實體關聯,其中表8對應於僱傭關係,表9對應於人,表10對應於僱主
表8
表9
表10圖3示出了根據本發明一方面的關係系統300。類似於圖1的系統100,系統300包括項接收器組件110和關係生成組件120。如上所述,接收器組件110可以接收和/或檢索多個元素,僅舉幾例,諸如數據對象、網頁或XML文檔。關係生成組件120可以從接收器組件110接收和/或檢索元素。關係生成組件120可以定義或指定項之間的關係或連結。而且,關係生成組件120可以提供用於響應於指定的關係來檢索特定項或其元素的方法或其引用。同樣類似於系統100,系統300可以定義類中的關係,而類可以包括用於計算關係的方法。然而,系統300也可以包括影響組件310。影響組件310是用於影響關係命名的機制。根據本發明的一方面,影響組件310可以包括,或者可以被通信地耦合至,試探或人工智慧組件、方法或機制,以基於相關元素的名稱來推斷或推理出關係的名稱。例如,如上例所述,兩個項「Customer」和「Order」可以含有名為「GetCutomerGivenOrder」的關係方法。除此之外或者作為替代,影響組件310可以例如通過接收和/或提供由外部元數據信息驅動的命名方案來協助關係生成組件120。
如上所述,關係可以是二元關係或普通的n元關係(例如,中心-輻軸關係)等等。二元關係可以是如在實體關係討論中所用的一對一、一對多、多對一或多對多關係。類型S和T之間的關係可以使用靜態類來建模。考慮捕捉若干二元關係的類的以下示例public static class RelationshipName_Relationship{public static IEnumerableTGetTsGivenS(S,s);public static S GetSGivenT(T t);public static IEnumerableSGetSsGivenTs(IEnumerableTts);public static IEnumerableTGetTsGivenSs(IEnumerableSss);}在一對一關係的情況下,GetTsGivenS(給定S獲取T)方法返回T的單個實例,而在多對多關係的情況下,GetSGivenT(給定T獲取S)方法返回諸如IEnumerable(枚舉)等集合類型。
關係類的名稱、靜態方法和形參名稱可以通過多種方式導出,包括但不限於,使用基於類型名稱的試探和使用由外部元數據信息驅動的命名方案。同樣如之前所提供的,以下對「Customer」和「Order」之間的關係建模public class Customer{...}public class Order{...}public static class OrderRelationship{public static Customer GetCustomerGivenOrder(Order order);public static IEnumerableOrderGetOrdersGivenCustomer(Customer,customer);public static IEnumerableCustomerGetCustomerGivenOrders(IEnumerableOrderorders);public static IEnumerableOrderGetOrdersGivenCustomers(IEnumerableCustomercustomers);}給定表示顧客表中一組顧客的變量,如IEnumerableCustomercustomers=...;可以如下使用以下靜態方法來檢索與該組顧客有關的一組定單IEnumerableOrderorders=OrerRelationship.GetOrderGivenCustomer(customers);該靜態方法調用封裝了連接(join)條件SELECT(欄位)FROM Customer JOIN Order ON(條件)n元關係(此處也被稱為實體關聯)是例如一組特定類型的二元關係與其它類型的二元關係。一個示例是中心和輻軸關係。這樣的關係的設計模式如下public static class RelationshipName_Relationship{public static S1 GetSpoke1GivenHub(hub);public static IEnumerableHubGetHubsGivenSpoke1(spoke1);public static S2 GetSpoke2GivenHub(hub);public static IEnumerableHubGetHubsGivenSpoke2(spoke2);public static IEnumerableS1GetSpoke 1GivenHub(IEnumerableHubhubs);public static IEnumerableHubGetHubsGivenSpokel(IEnumerableS1spokels);public static IEnumerableS2GetSpoke2GivenHub(IEnumerableHubhubs);public static IEnumerableHubGetHubsGivenSpoke2(IEnumerableS2spoke2s);}技術上,可以區分關係各方上的基數,但是為簡明起見,假定中心和輻軸之間的所有個別二元關係都是一對多關係。
與簡單的二元關係情況一樣,關係類和靜態方法的名稱可以通過多種方式導出,範圍從基於類型名稱的試探到由外部元數據信息驅動的命名方案。以下示例對「Employment(僱傭關係)」、「Person(個人)」和「Organization(組織)」之間的關係建模。在「Employment」和「Person」以及「Employment」和「Organization」之間存在兩個一對多二元關係,「Employment」用作中心。public class Person{..}public class Organization{..}public class Employment{..}public static class EmploymentRelationship{public static IEnumerableEmploymentGetEmploymentsGivenEmployee(Personemployee);public static Person GetEmployeeGivenEmployment(Employment employment);public static IEnumerableEmploymentGetEmploymentsGivenEmployer(Organizationemployer);public static Organization GetEmployerGivenEmployment(Employment employment);public static IEnumerableEmploymentGetEmploymentGivenEmployee(IEnumerablePersonemployees);public static IEnumerablePersonGetEmployeeGivenEmployment(IEnumerableEmploymentemployments);public static IEnumerableEmploymentGetEmploymentGivenEmployer(IEnumerableOrganizationemployers);public static IEnumerableOrganizationGetEmployerGivenEmployment(IEnumerableEmploymentemployments);}給定表示個人表中的一組人的變量,如IEnumerablePersonpeople=...;以下靜態方法用於獲取關於該組人的一組僱傭關係IEnumerableEmploymentemployments=EmploymentRelationship.GetEmploymentGivenEmployee(people);以下靜態方法用於獲取關於該組僱傭關係的一組組織IEnumerableOrganizationemployers=EmploymentRelationship.GetEmployerGivenEmployment(employments);後一種靜態方法調用封裝連接條件SELECT(欄位)FROM Person JOIN Employment ON(條件)JOIN Organization ON(條件)類型或類關係可以被建模為與類型屬性的關係。例如,考慮包含類型個人(Person)和類型組織(Organization)的情形,其中組織僱傭個人,而個人被組織僱傭。這在諸如C#等面向對象語言中如下表示public class Person{public IEnumerableEmploymentEmployments{get;}}public class Organization{public IEnumerableEmploymentEmployments{get;}然而,使用分離的類建模優於使用屬性對關係建模。例如,可以在現有類型之間創建新的關係,而無需修改這些類型。在上述使用屬性的情形中,「Person」和「Organization」類型依賴於「Employment」類型。而且,使用屬性對關係建模僅允許從實例導航,而從靜態類對關係建模允許從實例的集合導航。
儘管使用靜態方法將關係表示為一級概念的設計模式給予程式設計師強大的表達能力,但它在句法上是冗長的。而且,這些關係看上去不相同,從而與按照屬性建模的關係相比較難發現。
圖4示出了根據本發明的一方面,在句法上統一訪問關係的方式的編譯系統400。系統400包括表達式接收器組件410、代碼生成組件420和元數據組件430。接收器組件410接收含有項之間的關係,包括但不限於數據類型的程序表達式。該程序表達式可以是如同關係是屬性一般指定的簡化表達式。例如,給定表示顧客表中的一組顧客的變量「IEnumerableCustomercustomers=...;」,以下的句法可以用於獲取與該組顧客相關的一組定單「IEnumerableOrderorders=customer.Orders.」。代碼生成組件接收該表達式,並從該表達式生成更詳細的代碼或對方法的調用,諸如「OrderRelationship.GetOrderGivenCustomers(customers)」。代碼生成組件420通過元數據組件430啟用該功能。元數據組件430可以檢索或接收關於類的元數據,並將其提供給代碼生成組件420,以允許從簡化的表達式到實際的或更詳細的表達式的映射。元數據可以指定「OrderRelationship.GetOrderGivenCustomers(customers)」映射至「customer.Order」。根據本發明的一方面,這樣的元數據可以在定義元素之間關係的類中提供。或者,元數據可以由編譯系統和/或代碼生成組件420利用的某些外部文件或方案來提供。
轉向圖5,示出接口系統500以便於數據交互。接口系統500包括通信上耦合的導航接口組件510和數據接口組件520。作為示例,數據接口組件520可以實現可由導航接口組件510調用或執行的方法,反之亦然。導航接口組件510可以接收關係表達式。接口組件510可以接收經縮寫的或全長的表達式,分別諸如「customer.Order」或「OrderRelationship.GetOrderGivenCustomers(customers)」。當提供縮寫時,導航接口組件510可以將該表達式轉換為全長的表達式。然後可以將該表達式從導航接口組件510發送至數據接口組件520。數據接口組件520可以提供該表達式,用於在一個或多個項上執行。如果檢索到數據,那麼數據接口組件520可以將結果傳回導航接口組件510。從而,導航接口組件510和數據接口組件520可以對應於應用程式編程接口(API)。
圖6示出了根據本發明的一方面的集成開發環境或系統600。系統600可以包括編輯器組件610和程序協助組件620。編輯器組件610是專門用於編輯和/或開發計算機原始碼的文本編輯器。具體地,編輯器組件610可以接收關係的指定。文本編輯器在通信上耦合至程序協助組件620。協助組件620可以提供編碼協助,包括提示、格式化、著色、工具欄以及出錯指示或警告等等。例如,響應於接收到諸如點等項或觸發器,程序協助組件620可以提供和/或使得文本編輯器組件610顯示用於完成語句的提示。可以就此處提供的關係進行提示。例如,當接收到「customer」,則可以建議「Orders」以提供完整語句「customer.Orders」,表示檢索「customer」的所有order。從而,可以做出表現為項屬性,而對應於分離的關係方法的提示或建議。
對於若干組件之間的交互描述了前述系統。應該理解,這樣的系統和組件可以包括那些組件或其中指定的子組件、指定的組件或子組件中的某一些和/或另外的組件。子組件也可以被實現為通信上耦合至其它組件而非包含在父組件中的組件。而且,一個或多個組件和/或子組件可以被組合成提供聚合功能的單個組件。組件也可以與為簡潔起見此處沒有具體描述但本領域技術人員已知的一個或多個其它組件交互。
而且,可以理解,以上揭示的系統和以下方法的各個部分可以包括或包含人工智慧或基於知識或規則的組件、子組件、進程、裝置、方法或機制(例如,支持矢量機、神經網絡、專家系統、貝葉斯信任網絡、模糊邏輯、數據融合引擎、分類器...)。這樣的組件及其它組件可以自動化由此執行的某些機制或進程,從而使得該系統和方法的各部分更具有適應性並更高效和智能。作為示例而非限制,影響組件310可以使用這樣的方法或機制來推斷和影響生成的關係名。
考慮上述示例性系統,參考圖7-10的流程圖能更好地理解可以根據所揭示的本發明實現的方法。儘管為說明的簡單起見,方法被示出和描述為一連串框,但是可以理解和領會,所要求保護的本發明不受框的順序限制,因為某些框可以按與此處所示和描述不同的順序和/或與其它框同時發生。而且,不是所有示出的框對實現之後描述的方法都是必需的。
另外,還應該理解,之後揭示並貫穿本說明書的方法能夠被存儲在制品上,以便於向計算機傳送和傳輸這樣的方法。如此處所用的術語製品旨在包含可從任何計算機可讀設備、載波或介質訪問的電腦程式。
轉向圖7,示出了定義關係的方法700。在710處,接收項。這可以包括但不限於,諸如數據類型和文檔(例如,XML、文字處理、HTTP...)等程序項。在720處,生成諸如類等定義多個項之間的關係的構造。例如,類可以是面向對象的靜態類。而且,類可以包括封裝計算和/或導航項或元素關係的靜態方法。關係可以是二元或n元的,以及其它關係。另外,可由與要相關的項相關聯的名稱或其它元數據影響關係或方法的名稱。應該理解,儘管可以自動生成類,但是方法400也可以被手動實現,例如通過在IDE(集成開發環境)或類似系統的幫助下,或在沒有其幫助的情況下在面向對象程序設計語言中標識諸如數據類型等各種元素,一級手動指定定義元素之間的關係來實現。
圖8示出了根據本發明的一方面的編譯方法800。在810處,接收到關係表達式。關係表達式可以被表示為類的屬性,諸如「cutomer.Orders」。在820處,編譯程序或其它系統可以接收表達式並生成或擴展到與類中定義的例如指定項之間的關係的方法相關聯的代碼。為了便於這樣的代碼生成,編譯器可以利用例如與關係類相關聯的元數據,來確定表達式和更詳細的方法調用之間的映射。從而,編譯器調用作為在諸如類型等項上直接定義的屬性的靜態方法。
轉向圖9,示出用於與數據交互的方法900。在參考標號910處,接收到關係表達式。關係表達式標識兩個或多個項或元素以及項之間的關係。根據本發明的一個方面,可以在屬性格式中指定表達式,使得關係看上去是項的屬性,例如「customer.Orders」、「order.Customer「或」orders.Customers」。在標號920處,定位與該關係表達式相關聯的方法。在一個實例中,該方法可以駐留在由此與項目本身無關地定義的分離的關係類中。例如,可以確定「customer.Orders」映射至定單關係類,並特別地映射至方法「GetOrdersGivenCustomer(Customer customer)」。在930處,可以執行該方法。該方法可便於數據導航和可任選的其它功能,諸如檢索、添加、移除或其它數據交互或操縱。在參考標號940處,如果合適可以返回結果。
圖10是根據本發明的一方面的程序協助方法1000。方法1000可協助關係的指定。在參考標號1010處,特定類型的項被接收、檢索或獲取。隨該項之後,在1020處,接收、檢索或以獲取觸發器。觸發器可以對應於諸如空格(「「)、點(「.」)、回車等等。在參考標號1030處,例如,以基於所定義的關係的提示的形式提供協助。例如,如果用戶輸入「customer.」,那麼可以提供諸如「Orders」等的完成提示。提示可以例如在下拉式菜單中向用戶顯示。在選取之後,可以完成語句,並被讀為「customer.Orders」。這減少了記憶或回想與給定項相關聯的所有可能關係的負擔,並最小化排字錯誤等等。
除了提示之外,應該注意到,可以提供其它形式的程序協助,諸如關於關係表達式的獨特的格式化和/或著色。而且,可以提供工具提示,其中例如類型信息在文字框中冒出或在光標滾動或懸停後冒出,和/或按下預定的組合鍵之後冒出。也構想了關於關係表達式的其它程序協助,且這些程序協助也在本發明要求保護的範圍之內。
圖11是示出可以用來生成實現代碼(例如,可執行代碼、中間語言...)的編譯器環境1100。然而,環境1100的各方面也可以用作例如關於代碼編輯器的後臺編譯器的一部分,以使能夠提供智能或上下文敏感的程序設計協助。編譯器環境1100包括編譯器1120,它包括前端組件1120、轉換器組件1130、後端組件1140、出錯檢驗器組件1150、符號表1160、分析樹1170、以及狀態1180。編譯器1120接受原始碼作為輸入,並產生實現代碼作為輸出。輸入可以包括但不限於,關係表達式、類和/或如此處所述的其它構造。編譯器環境1100的組件和模塊之間的關係示出數據的主要流程。為了清楚和簡要起見,不示出其它組件和關係。取決於實現,組件可以被添加、省略、分裂成多個模塊、與其它模塊組合和/或模塊的其它配置。
編譯器1120可以接受含有與處理元素序列相關聯的原始碼的文件作為輸入。原始碼可以包括關係表達式、類、其它表達式、方法和/或其它程序構造。編譯器1120可以結合用於分析構造和生成或注入代碼的一個或多個組件來處理原始碼。
前端組件1120讀取原始碼並對其執行詞法分析。本質上,前端組件1120讀取原始碼中的字符(例如,字母數字)序列並將其轉換成句法元素或標記,指示常量、標識符、運算符、關鍵詞和標點等等。
轉換器組件1130將標記解析為中間表示。例如,轉換器組件1130可以檢查句法並將標記組合成表達式或其它句法結構,這些句法結構進而又合併成語句樹。概念上,這些樹形成分析樹1170。而且,如果合適,轉換器模塊1130可以將條目放入列出在原始碼中使用的符號名和類型信息及其相關特徵的符號表1130中。
狀態1180可以用來跟蹤編譯器1120在處理所接收或檢索到的原始碼以及形成分析樹1170時的進度。例如,不同的狀態值指示編譯器1120處於類定義或功能的開始處,剛聲明了類成員或已經完成表達式。隨著編譯器行進,它持續更新狀態1180。編譯器1120可以向之後向編譯器1120提供輸入的外部實體部分或全部地展示狀態1180。
基於原始碼中的構造或其它信號(或者如果識別了機遇),轉換器1130或另一組件可以注入代碼以便於有效且正確地執行。例如,可以注入代碼來擴展理解縮略語或將查詢理解轉換成序列運算符。編碼至轉換器1130或其它組件內的規則指明為實現所期望的功能必須做什麼,並標識將被注入代碼或將執行其它操作的位置。注入的代碼一般包括一個或多個位置處添加的語句、元數據、或其它元素,但是該術語也可以包括改變、刪除或以修改現有的原始碼。注入代碼可以被存儲為一個或多個模板或以某種其它形式儲存。另外,應該理解,可以操縱符號表和變換分析樹。
基於符號表1160和分析樹1170,後端組件1140可以將中間表示轉換成輸出代碼。後端組件1140將中間表示轉換為可在目標處理器中執行或可由該目標處理器執行的指令、變量的存儲器分配等等。輸出代碼可以由真實的處理器執行,但是本發明也構想了輸出代碼由虛擬處理器執行。
此外,前端組件1120和後端組件1140可以執行其它的功能,諸如代碼優化,也可以將所述操作作為單個階段或在多個階段中執行。編譯器1120組件的各種其它方面在本質上是常規的,且可以使用執行等效功能的組件代替。另外,在處理原始碼的過程中的各個階段,出錯檢驗器1150可以檢驗諸如詞彙結構、句法錯誤甚至語義錯誤等錯誤。在檢測到錯誤後,檢驗器組件1150可以中止編譯並生成指示錯誤的消息。
為了提供用於本發明的各方面的環境,圖12和13及以下討論旨在提供可在其中實現本發明的各方面的合適的計算環境900的簡要概括描述。儘管以上在可以在一臺和/或多臺計算機上運行的電腦程式的計算機可執行指令的通用語境中描述了本發明,但是本領域的技術人員可以認識到,本發明也可以結合其它程序模塊來實現。一般而言,程序模塊包括例程、程序、組件、數據結構等,它們執行特定的任務和/或實現特定的抽象數據類型。而且,本領域的技術人員可以理解,本發明方法可以使用其它計算機系統配置來實現,包括單處理器或多處理器計算機系統、小型計算設備、大型機、以及個人計算機、手持式計算設備(例如,個人數字助理(PDA)、電話、手錶...)、基於微處理器的或可編程消費者或工業電子產品等。本發明所示方面也可以在分布式計算環境中實現,在分布式計算環境中任務是由通過通信網絡連結的遠程處理設備執行的。然而,本發明的某些(如果不是全部)方面也可以在獨立計算機上實現。在分布式計算環境中,程序模塊可以位於本地或遠程存儲器存儲設備中。
參考圖12,用於實現此處所揭示的各方面的示例性環境1210包括計算機1212(例如,臺式機、膝上型計算機、伺服器、手持式設備、可編程消費者或工業電子產品…)。計算機1212包括處理單元1214、系統存儲器1216和系統總線1218。系統總線1218將包括但不限於系統總線1216在內的系統組件耦合至處理單元1214。處理單元1214可以是各種可用的任何處理器。雙微處理器和其它多處理器體系結構也可以用作處理單元1214。
系統總線1218可以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線或外部總線和/或使用各種可用的總線體系結構中的任一種的局部總線,可用的總線體系結構包括,但不限於,11位總線、工業標準體系結構(ISA)、微通道體系結構(MCA)、擴展的ISA(EISA)、智能驅動器電子接口(IDE)、VESA局部總線(VLB)、外圍部件互連(PCI)、通用串行總線(USB)、高級圖形接口(AGP)、個人計算機存儲卡國際協會總線(PCMCIA)以及小型計算機系統接口(SCSI)。
系統存儲器1216包括易失性存儲器1220和非易失性存儲器1222。基本輸入/輸出系統(BIOS)包含有助於諸如在啟動時在計算機1212中的元件之間傳遞信息的基本例程,它通常存儲在非易失性存儲器1222中。作為說明,而非限制,非易失性存儲器1222可以包括只讀存儲器(ROM)、可編程ROM(PROM)、電可編程ROM(EPROM)、電可擦除ROM(EEPROM)或快閃記憶體。易失性存儲器1220可以包括用作外部高速緩存的隨機存取存儲器(RAM)。作為說明,而非限制,RAM以多種形式可用,諸如同步RAM(SRAM)、動態RAM(DRAM)、同步DRAM(SDRAM)、雙數據速率SDRAM(DDR SDRAM)、增強型SDRAM(ESDRAM)、同步鏈路DRAM(SLDRAM)以及直接Rambus RAM(DRRAM)。
計算機1212也包括可移動/不可以移動、易失性/非易失性計算機存儲介質。例如,圖12示出磁碟存儲1224。磁碟存儲1224包括,但不限於,如磁碟驅動器、軟盤驅動器、磁帶驅動器、Jaz驅動器、Zip驅動器、LS-100驅動器、快閃記憶體卡或記憶棒等設備。另外,磁碟存儲1224可以包括獨立或與其它存儲介質結合的存儲介質,包括但不限於,諸如光碟ROM設備(CD-ROM)、CD可記錄驅動器(CD-R驅動器)、CD可重寫驅動器(CD-RW驅動器)或數字多功能盤ROM驅動器(DVD-ROM)等的光碟驅動器。為了便於將磁碟存儲設備1224連接至系統總線1218,一般使用諸如接口1226等可移動或不可移動接口。
可以理解,圖12描述了作為用戶和在合適的操作環境1210中描述的基本計算機資源之間的中介的軟體。這樣的軟體包括作業系統1228。可被存儲在磁碟存儲1224上的作業系統1228用來控制和分配計算機系統1212的資源。系統應用程式1230利用了作業系統1228通過存儲在系統存儲器1216或者磁碟存儲1214上的程序模塊1232和程序數據1234執行的資源管理。可以理解,本發明可以使用各種作業系統或作業系統的組合來實現。
用戶通過輸入設備1236向計算機1212輸入命令或信息。輸入設備1236包括,但不限於,諸如滑鼠、跟蹤球、指示筆、觸摸墊等定點設備、鍵盤、麥克風、操縱杆、遊戲墊、圓盤式衛星天線、掃描儀、TV調諧器卡、數位相機、數碼攝像機、網絡攝像頭等。這些和其它輸入設備經由接口埠1238通過系統總線1218連接至處理單元1214。接口埠1238包括,例如串行埠、並行埠、遊戲埠和通用串行總線(USB)。輸出設備1240使用某些與輸入設備1236相同類型的埠。從而,例如,USB埠可以用於向計算機1212提供輸入,並向輸出設備1240提供來自計算機1212的輸出信息。提供輸出適配器1242來示出存在類似監視器(例如,平板和CRT)、揚聲器和印表機等需要專用適配器的輸出設備1240的某些輸出設備1240。作為說明而非限制,輸出適配器1242包括提供輸出設備1240和系統總線1218之間的連接手段的顯卡和音效卡。應該注意,諸如遠程計算機1244等其它設備和/或設備系統同時提供輸入和輸出能力兩者。
計算機1212可使用至一臺或多臺遠程計算機,諸如遠程計算機1244的邏輯連接在網絡化環境中操作。遠程計算機1244可以是個人計算機、伺服器、路由器、網絡PC、工作站、基於微處理器的裝置、對等設備或其它常見網絡節點等,且通常包括上文相對於計算機1212描述的許多或所有元件。為簡潔起見,對於遠程計算機1244僅示出存儲器存儲設備1246。遠程計算機1244通過網絡接口1248被邏輯連接至計算機1212,並且然後通過通信連接1250被物理地連接。網絡接口1248包括諸如區域網(LAN)和廣域網(WAN)的通信網絡。LAN技術包括光纖分布式數據接口(FDDI)、銅線分布式數據接口(CDDI)、乙太網/IEEE 802.3、令牌環/IEEE 802.5等。WAN技術包括,但不限於,點對點鏈路、類似綜合業務數字網(ISDN)及其變體的電路交換網絡、分組交換網絡和數字用戶線(DSL)。
通信連接1250指的是用來將網絡接口1248連接至總線1218的硬體/軟體。儘管為說明清楚,將通信連接1250示為位於計算機1212內,然而通信連接1250也可以在計算機1212外部。僅為示例的目的,連接至網絡接口1248所必需的硬體/軟體包括內部和外部技術,諸如包括常規電話級數據機、線纜數據機、電力數據機(power modems)、DSL數據機等的數據機、ISDN適配器以及乙太網卡或組件。
圖13是可與本發明交互的示例計算環境1300的示意性框圖。系統1300包括一個或多個客戶機1310。客戶機1310可以是硬體和/或軟體(例如,線程、進程、計算設備)。系統1300也包括一個或多個伺服器1330。這樣,系統1300可以對應於兩層的客戶機伺服器模型或多層模型(例如,客戶機、中間層伺服器、數據伺服器)以及其它模型。伺服器1330也可以是硬體和/或軟體(例如,線程、進程、計算設備)。例如,伺服器1330可以容納通過使用本發明來執行轉換的線程。客戶機1310和伺服器1330之間的一種可能的通信可以是適於在兩個或多個計算機進程之間傳輸的數據包的形式。
系統1300包括可以用來促進客戶機1310和伺服器1330之間通信的通信架構1350。客戶機1310可操作地連接至可用來存儲對客戶機1310本地的信息的一個或多個客戶機數據存儲1360。類似地,伺服器1330可操作地連接至可被用來存儲對伺服器1330本地的信息的一個或多個伺服器數據存儲1340。
以上描述的包括所要求保護的本發明的各方面的示例。當然,不可能為描述所要求保護的本發明而描述每個可想像的組件或方法的組合,但是本領域的普通技術人員可以認識到,此處所揭示的本發明的眾多其它組合和排列是可能的。從而,本發明旨在包括落入所附權利要求書精神和範圍內的所有這樣的變更、修改和變化。而且,就在詳細描述或權利要求書中使用的術語「包括」、「含有」或「具有」及其變體而言,這樣的術語旨在類似於解釋術語「包含」(當術語「包含」被用作權利要求書中的過渡詞時)的方式是包含性的。
權利要求
1.一種計算機實現的關係系統,所述關係系統包括以下計算機可執行組件項接收器組件,用於獲取兩個或多個程序項;以及關係生成組件,用於從所述接收器組件接受項,並生成定義所述項之間的一個或多個關係的構造。
2.如權利要求1所述的系統,其特徵在於,所述項是數據類型和XML文檔之一。
3.如權利要求1所述的系統,其特徵在於,所述構造是類。
4.如權利要求3所述的系統,其特徵在於,所述類包括根據指定關係檢索特定項元素的方法。
5.如權利要求4所述的系統,其特徵在於,所述類是靜態類。
6.如權利要求1所述的系統,其特徵在於,所述一個或多個關係是包括一對一、一對多、多對一和多對多的二元關係。
7.如權利要求1所述的系統,其特徵在於,所述一個或多個關係是由對所述項封裝導航計算的方法指定的。
8.如權利要求1所述的系統,其特徵在於,所述一個或多個關係包括組成、關聯和連結之一。
9.如權利要求1所述的系統,其特徵在於,所述關聯是公值、條件和實體之一。
10.如權利要求1所述的系統,其特徵在於,還包括為關係生成項專用名的影響組件。
11.一種其上存儲數據結構的計算機可讀介質,所述數據結構包括第一數據類型;第二數據類型;以及定義所述第一數據類型與第二數據類型之間獨立於類型的關係的類。
12.如權利要求11所述的計算機可讀介質,其特徵在於,所述類包括封裝定義類型之間關係的計算的方法。
13.如權利要求12所述的計算機可讀介質,其特徵在於,所述關係包括二元、組成、關聯和連結之一。
14.如權利要求12所述的計算機可讀介質,其特徵在於,所述類型映射至資料庫表,且所述關係捕捉所述表之間的公共屬性上的連接。
15.一種便於數據交互的計算機實現的方法,包括以下計算機可執行動作接收兩個或多個項之間的關係表達式;定位與所述表達式相關聯的項外部的方法;以及執行所述方法來計算所述關係和/或在所述項之間導航。
16.如權利要求15所述的方法,其特徵在於,還包括返回結果。
17.如權利要求15所述的方法,其特徵在於,接收關係表達式包括接收屬性記號中類型之間的關係。
18.如權利要求17所述的方法,其特徵在於,定位方法包括將所述表達式從屬性記號擴展至方法名。
19.如權利要求18所述的方法,其特徵在於,定位方法還包括標識含有一個或多個關係方法的關係類。
20.如權利要求15所述的方法,其特徵在於,所述關係包括二元、組成、關聯和連結之一。
全文摘要
本發明涉及項之間的關係。可以在項本身外部定義項之間的關係,從而提供模塊化、靈活且可擴展的系統。例如,可以在包含用於根據指定的關係返回特定元素或值的方法的類中定義項之間的關係。而且,可以擴展編譯器或類似的系統來接受簡單屬性格式的關係表達式,並指引這樣的調用至特定的方法。
文檔編號G06F17/30GK1821957SQ200610005450
公開日2006年8月23日 申請日期2006年1月18日 優先權日2005年2月18日
發明者B·阿爾巴哈瑞, H·J·M·邁耶, M·E·蒂姆 申請人:微軟公司