專利名稱:Web服務(wù)設(shè)備和方法
技術(shù)領(lǐng)域:
本發(fā)明通常涉及UDDI注冊中心和WEB服務(wù),尤其涉及在這樣的服務(wù)的實際實施中使用的方法,設(shè)備和系統(tǒng)。
背景技術(shù):
UDDI(統(tǒng)一描述,發(fā)現(xiàn)和集成(Universal Description,Discoveryand Integration))是一組標(biāo)準(zhǔn),其被定義以允許使用WEB服務(wù)的應(yīng)用迅速、容易和動態(tài)地彼此交互。UDDI被用來建立平臺無關(guān)的開放式框架,用于描述服務(wù),發(fā)現(xiàn)企業(yè)和集成使用因特網(wǎng)的系統(tǒng)服務(wù),并且用于描述工作注冊中心。參照WEB站點www.uddi.org以了解詳情。
UDDI注冊中心(UDDI registry)對利用WEB服務(wù)構(gòu)造的系統(tǒng)提供有價值的支持。圖1a示意性圖解了基本W(wǎng)EB服務(wù)和UDDI概念。圖1b示意性圖解了WEB服務(wù)環(huán)境的簡化協(xié)議堆棧。UDDI提供WEB服務(wù)信息的數(shù)據(jù)庫(repository),并且自身通過WEB服務(wù)來提供。
UDDI允許應(yīng)用公開其希望如何在WEB上進(jìn)行交互。每個′WEB服務(wù)′是自描述的、自包含的應(yīng)用邏輯模塊單元,其通過因特網(wǎng)連接為其它應(yīng)用提供某個系統(tǒng)功能。應(yīng)用通過通用的Web協(xié)議和數(shù)據(jù)格式訪問WEB服務(wù),但不必關(guān)心如何實現(xiàn)每個WEB服務(wù)。WEB服務(wù)能夠與其它WEB服務(wù)混合和匹配以執(zhí)行較大的工作流程或企業(yè)事務(wù)。
UDDI標(biāo)準(zhǔn)描述了被用來管理WEB服務(wù)類型的說明,企業(yè)組織和關(guān)于如何調(diào)用WEB服務(wù)的細(xì)節(jié)的專用數(shù)據(jù)庫。標(biāo)準(zhǔn)不必規(guī)定應(yīng)當(dāng)如何實現(xiàn)標(biāo)準(zhǔn),也不必規(guī)定實現(xiàn)是否應(yīng)當(dāng)包含利用數(shù)據(jù)庫,目錄或任何其他介質(zhì)的存儲。
在負(fù)責(zé)UDDI標(biāo)準(zhǔn)的組織托管的WEB站點(http//www.uddi.org/faqs.html)上有一些常見問題解答(FAQ)。這些問題之一是″UDDI注冊中心能夠被建立在LDAP上或基于LDAP嗎?″作為回答,這個WEB站點公開道在UDDI和目錄之間沒有正式的關(guān)系?!錟DDI規(guī)范沒有規(guī)定注冊中心實現(xiàn)細(xì)節(jié)。UDDI規(guī)范定義了基于XML的數(shù)據(jù)模型和一組SOAP API,以訪問和操作該數(shù)據(jù)模型。SOAP API定義了UDDI數(shù)據(jù)庫所表現(xiàn)出的特性。UDDI實現(xiàn)能夠建立在LDAP目錄上,只要它符合規(guī)定的特性。到目前為止,所有UDDI實現(xiàn)均建立在關(guān)系數(shù)據(jù)庫上。″應(yīng)當(dāng)注意,例如X.500和LDAP的目錄技術(shù)是可擴展的通用數(shù)據(jù)存儲,并且其相關(guān)語言經(jīng)常被用來管理用戶和資源。它們是非常精心設(shè)計的技術(shù),得到廣泛采用,并且被認(rèn)為是非常穩(wěn)定和可靠的。
然而,在目錄上實現(xiàn)UDDI標(biāo)準(zhǔn)(可從www.uddi.org得到)需要解決若干問題。UDDI標(biāo)準(zhǔn)留下許多重要的問題有待解決,例如●UDDI標(biāo)準(zhǔn)定義了若干對象,其中一些對象通過層次結(jié)構(gòu)相關(guān),但是UDDI沒有定義全包括的層次結(jié)構(gòu)。例如,企業(yè)服務(wù)對象會處于企業(yè)實體對象下面,而綁定模板對象會處于企業(yè)服務(wù)下面。圖2圖解了這個層次結(jié)構(gòu)的例子。企業(yè)實體對象被表示為21,企業(yè)服務(wù)對象被表示為22,綁定模板對象被表示為23。還應(yīng)當(dāng)注意,例如表示為24的TModel對象在層次上與這些對象無關(guān)。還存在例如發(fā)布者聲明(Publisher Assertion)、在層次上沒有定義的其它概念。
●建立滿足只允許用戶改變在其控制下的那些對象的要求的高效實現(xiàn),●建立允許UDDI注冊中心為分布式的高效實現(xiàn),●建立增強管理特性和搜索與更新的性能的高效實現(xiàn)。
●如何以相對高效的方式表示復(fù)雜UDDI對象。例如,企業(yè)實體,企業(yè)服務(wù),綁定模板和/或TModel具有復(fù)合的重復(fù)單元。于是這些重復(fù)單元能夠包含進(jìn)一步的重復(fù)單元。例如,企業(yè)實體可以包含聯(lián)系(contacts),而聯(lián)系可以包含地址。地址可以包含地址行(address line)和電話號碼。圖13示意性圖解了企業(yè)實體中相對復(fù)雜對象的UDDI概念。企業(yè)實體對象131例如包含若干屬性132,例如授權(quán)名字(AuthorizedName),企業(yè)關(guān)鍵字(BusinessKey)和名字(Name)。名字具有一或多個名字字段133,例如′文本′,或者這可以隱含在′名字′自身中。還有′語言′。可以存在這些字段133的一或多個。
●如何對重復(fù)單元中包含的特定項提供相對快速的搜索。
●如何在目錄對象層次結(jié)構(gòu)中表示UDDI信息和要求,●如何以高效方式管理UDDI對象和所有其相關(guān)信息的刪除,以及●考慮到目錄存儲介質(zhì)的限制,如何優(yōu)化搜索操作期間中間搜索結(jié)果集合的構(gòu)造,使得目錄訪問和迭代存儲器內(nèi)(in-memory)操作最小化。實際上,可以以任意順序存儲和返回目錄項,并且目錄結(jié)果可能過大以致不能排序。
●如何以高效方式表示涉及發(fā)布者聲明的數(shù)據(jù),●如何建立發(fā)布者聲明的高效實現(xiàn),尤其是對于findrelatedBusiness方法的實現(xiàn),●如何通過關(guān)系實現(xiàn)發(fā)布者聲明的高效搜索,●如何管理發(fā)布者聲明的有效性,●如何約束由企業(yè)實體的所有者針對企業(yè)實體建立和刪除的聲明。
●如何高效管理UDDI標(biāo)準(zhǔn)中定義的相關(guān)屬性集合,●如何定義屬性和對象以增強搜索性能。
已經(jīng)提出各種UDDI模式(UDDI Schema)。然而沒有任何UDDI模式被認(rèn)為解決了至少上述問題。例如,一個模式提供了相對簡單的UDDI對象到目錄對象的映射,而不必涉及到產(chǎn)生高效商用實現(xiàn)的復(fù)雜度和優(yōu)化。同樣不清楚在這樣的模式中如何能夠高效實現(xiàn)若干UDDI服務(wù)(尤其是find系列的服務(wù))。
例如,圖14示意性圖解了企業(yè)實體中的相對復(fù)雜對象的Novell表示。企業(yè)實體對象141包含例如若干屬性142,每個屬性具有′類型′和′值′。如圖所示,存在具有值′Bill′的授權(quán)名字,具有值′890.obale.890......′的企業(yè)關(guān)鍵字,和具有多值143,144,即en#CAIN#CATS的名字。
UDDI(圖13)和Novell(圖14)的示例性表示不被認(rèn)為是對于WEB服務(wù)的高效表示。
于是,需要解決上述一般性問題以及其它問題,以提供一種基于目錄的UDDI的可擴展、高效和可靠的實現(xiàn)。
發(fā)明內(nèi)容
一種為WEB服務(wù)結(jié)構(gòu)中的對象產(chǎn)生關(guān)鍵字的方法,包括確定對象是否具有定義的第一關(guān)鍵字,以及如果對象具有定義的第一關(guān)鍵字,則為該對象提供定義的第一關(guān)鍵字,并且如果對象不具有定義的第一關(guān)鍵字,則為該對象提供第二關(guān)鍵字。
一種包含計算機可執(zhí)行代碼的計算機記錄介質(zhì),所述計算機可執(zhí)行代碼用于為WEB服務(wù)結(jié)構(gòu)中的對象產(chǎn)生關(guān)鍵字,包括用于確定對象是否具有定義的第一關(guān)鍵字的代碼,用于在對象具有定義的第一關(guān)鍵字的情況下為該對象提供定義的第一關(guān)鍵字的代碼,和用于在對象不具有定義的第一關(guān)鍵字的情況下為該對象提供第二關(guān)鍵字的代碼。
參照以下結(jié)合附圖對優(yōu)選實施例進(jìn)行的說明可更好地理解本發(fā)明的其它目的,優(yōu)點和方面,其中圖1a示意性圖解了某些WEB服務(wù)和UDDI概念;圖1b示意性圖解了WEB服務(wù)環(huán)境的簡化協(xié)議堆棧;圖2示意性圖解了現(xiàn)有技術(shù)的層次結(jié)構(gòu);圖3示意性圖解了現(xiàn)有技術(shù)的目錄服務(wù)模型;圖4根據(jù)本發(fā)明實施例示意性圖解了利用X.500目錄技術(shù)實現(xiàn)的UDDI服務(wù)模型的基礎(chǔ)部件;
圖5根據(jù)本發(fā)明實施例示意性圖解了服務(wù)投影(ServiceProjection);圖6根據(jù)本發(fā)明實施例示意性圖解了綁定模板和TModel之間的關(guān)系;圖7根據(jù)本發(fā)明實施例示意性圖解了TModel如何建立2個實體之間的關(guān)系;圖8根據(jù)本發(fā)明實施例圖解了增加發(fā)布者聲明的請求的邏輯表示;圖9根據(jù)本發(fā)明實施例圖解了UDDI數(shù)據(jù)對象的構(gòu)造函數(shù)(constructor)的邏輯表示;圖10示意性圖解了將企業(yè)實體對象放在用戶對象下面的情況;圖11示意性圖解了將域?qū)ο蠓旁谟脩魧ο笙旅娴那闆r;圖12根據(jù)本發(fā)明實施例示意性圖解了模式的概況;圖13根據(jù)現(xiàn)有技術(shù)示意性圖解了企業(yè)實體中的相對復(fù)雜對象的UDDI概念;圖14示意性圖解了企業(yè)實體中的相對復(fù)雜對象的Novell表示;圖15根據(jù)本發(fā)明實施例示意性圖解了引入層次結(jié)構(gòu)以表示企業(yè)實體中的相對復(fù)雜對象的情況;圖16根據(jù)本發(fā)明實施例示意性圖解了綁定模板層次子結(jié)構(gòu);圖17示意性圖解了扁平化和/或合并的綁定模板子結(jié)構(gòu);而圖18是能夠?qū)崿F(xiàn)本發(fā)明各個方面的計算機系統(tǒng)的模塊圖。
具體實施例方式
在描述附圖中圖解的本發(fā)明的優(yōu)選實施例時,為了清楚而使用特定的術(shù)語。然而本發(fā)明不限于選擇的特定術(shù)語,應(yīng)當(dāng)理解,各個特定單元包含所有以類似方式工作的技術(shù)等價特征。
圖18示出了可以實現(xiàn)本發(fā)明的方法和系統(tǒng)的計算機系統(tǒng)的例子??梢砸栽诶绱笮蜋C,個人計算機(PC),手持計算機,服務(wù)器等等的計算機系統(tǒng)上運行的軟件應(yīng)用的形式實現(xiàn)本發(fā)明的系統(tǒng)和方法。軟件應(yīng)用可以存儲在計算機系統(tǒng)本地可訪問的記錄介質(zhì),例如軟盤,光盤,硬盤等等中,或者可以遠(yuǎn)離計算機系統(tǒng)并且可通過針對例如局域網(wǎng)或因特網(wǎng)的網(wǎng)絡(luò)的硬連線或無線連接來訪問。
圖18示出了能夠?qū)崿F(xiàn)本發(fā)明的方法和系統(tǒng)的計算機系統(tǒng)的例子。通常稱為系統(tǒng)180的計算機系統(tǒng)可以包含中央處理單元(CPU)182,例如隨機訪問存儲器(RAM)的存儲器184,打印機接口186,顯示單元188,(LAN)局域網(wǎng)數(shù)據(jù)傳輸控制器190,LAN接口192,網(wǎng)絡(luò)控制器194,內(nèi)部總線196和一或多個輸入設(shè)備198,例如鍵盤,鼠標(biāo)等等。如圖所示,系統(tǒng)180可以通過鏈路202連接到例如硬盤的數(shù)據(jù)存儲設(shè)備200。
下面總結(jié)了本發(fā)明實施例的一些顯著特征,以及因而提供的一些優(yōu)點。
根據(jù)本發(fā)明的實施例,在用戶之上建立數(shù)據(jù)庫層,因而每個數(shù)據(jù)庫能夠被放到不同的服務(wù)器上。這個數(shù)據(jù)庫層包含共同形成目錄前綴(Directory pre-fix)的一或多個目錄節(jié)點。這也可以被稱作數(shù)據(jù)庫的′域′或′名字′。其優(yōu)點在于提供單獨位置以保存關(guān)于域的信息。這個節(jié)點的名字表示目錄前綴。
可以建立用戶對象以保存表示UDDI帳戶的數(shù)據(jù)。其優(yōu)點在于提供單獨位置以保存關(guān)于用戶/帳戶的信息。
企業(yè)實體對象可以被排列在用戶對象下面,企業(yè)服務(wù)對象可以被排列在企業(yè)實體對象下面,綁定模板對象可以被排列在企業(yè)服務(wù)對象下面。其優(yōu)點在于用戶對象層之上的數(shù)據(jù)庫或′域′層允許將若干數(shù)據(jù)庫布置或邏輯連接在一起。域?qū)涌梢园慈舾蓪哟闻帕?,例如使不同國家,即AU,US,EP等等按大陸組織。
另一個優(yōu)點在于通過使用X.500目錄的分布特性可以為這個特征提供效果。例如,為實現(xiàn)這個,′世界′或′公司′節(jié)點被放在虛擬目錄樹的頂端,并且唯一命名的節(jié)點被放在每個UDDI子樹(UDDI名字空間)的頂端。雖然對用戶不可見,然而這些′節(jié)點′前綴允許UDDI數(shù)據(jù)庫影響到(leverage)目錄分布。
根據(jù)本發(fā)明的實施例,可以使企業(yè)實體對象作為用戶對象的子節(jié)點。使用戶/帳戶在企業(yè)實體,企業(yè)服務(wù)和綁定模板層次上,提供了使每個用戶具有其自身的子樹的效果。這增強了可管理性和安全性。用戶被容易地限制于只修改和/或控制其自身的子樹。這也通過利用目錄子樹搜索操作增強了性能。
根據(jù)實施例,用戶定義的TModel可以作為用戶對象的子節(jié)點,于是使得安全性易于實現(xiàn)。由于用戶只能修改和/或控制其自身的子樹,這增強了可管理性和安全性。這也通過利用目錄子樹搜索操作增強了性能。
本發(fā)明的實施例表示利用X.500/LDAP目錄技術(shù)的UDDI環(huán)境的′映射′。尤其是,已經(jīng)發(fā)現(xiàn)X.500和LDAP目錄技術(shù)的層次結(jié)構(gòu)適用于UDDI環(huán)境。附加單元(例如用戶對象)的精心設(shè)計使得層次結(jié)構(gòu)更加適合UDDI環(huán)境的需要。
在本發(fā)明中,術(shù)語目錄要包含X.500,LDAP和類似技術(shù);術(shù)語′用戶′被理解為也包含′帳戶′,并且反之亦然;而術(shù)語′數(shù)據(jù)庫′被理解為也包含′目錄前綴′,′域′和/或′節(jié)點′,并且反之亦然。
WEB服務(wù)最初被認(rèn)為是例如企業(yè),伙伴,客戶,供應(yīng)商的組織之間的服務(wù)。在這個環(huán)境中,UDDI被考慮為這些組織提供的服務(wù)的單獨數(shù)據(jù)庫。
現(xiàn)在顯然WEB服務(wù)和UDDI可用于企業(yè)內(nèi)以在組織內(nèi)集成應(yīng)用。也顯然WEB服務(wù)和UDDI可用于在來自指定廠商的產(chǎn)品集合內(nèi)集成產(chǎn)品。這同樣適用于商用環(huán)境以外的領(lǐng)域,例如政府部門,大型教育機構(gòu),和許多其它非商用實體的實例。
盡管針對的是企業(yè),然而以下說明同樣適用于任何類型的環(huán)境,尤其適用于上述類型的環(huán)境。
企業(yè)UDDI注冊中心可以是這樣的服務(wù),其能夠部署在企業(yè)內(nèi)以發(fā)布供內(nèi)部使用的信息和服務(wù)。另外,企業(yè)UDDI服務(wù)可以受到影響以提供其它功能,例如用于分布式應(yīng)用的配置發(fā)現(xiàn)。
希望WEB服務(wù)能夠迅速和容易地在內(nèi)部和與伙伴集成企業(yè)過程。有效利用WEB服務(wù)的一個部件是公共UDDI注冊中心,其允許軟件部件動態(tài)發(fā)現(xiàn)和連接到因特網(wǎng)上的適當(dāng)服務(wù)。WEB服務(wù)也提供能夠集成企業(yè)內(nèi)的業(yè)務(wù)過程的承諾。在這種情況下,UDDI注冊中心可以變成組織的基礎(chǔ)設(shè)施的一部分(例如重要企業(yè)應(yīng)用),因此提供最高等級的安全性,性能,可靠性和可管理性。目錄技術(shù)提供理想基礎(chǔ)以支持企業(yè)UDDI注冊中心的嚴(yán)格要求。
企業(yè)UDDI注冊中心可以被定義成提供對UDDI的符合標(biāo)準(zhǔn)的支持,但是又進(jìn)行超越以解決有關(guān)部署的4方面問題。這些方面包含將訪問僅限于授權(quán)用戶的安全性,支持大型部署的分布,用于真實生產(chǎn)系統(tǒng)的可管理性,和滿足服務(wù)等級協(xié)議的可用性。
強安全性可以是某些企業(yè)部署的重要要求。公共UDDI注冊中心的存在完全是為了幫助任一方發(fā)現(xiàn)可用服務(wù)。UDDI注冊中心的存在完全是為了使正確的人們發(fā)現(xiàn)這些服務(wù)。這是重要的區(qū)別。
因特網(wǎng)UDDI注冊中心被認(rèn)為對于在企業(yè)中部署WEB服務(wù)是不適當(dāng)?shù)摹@?,接口到薪水系統(tǒng)或雇員收益管理應(yīng)用的WEB服務(wù)的定義不會發(fā)布到因特網(wǎng)UDDI注冊中心上。
安全性要求也可以意味著甚至內(nèi)部部署的UDDI注冊中心也要提供強訪問控制。這是由于UDDI注冊中心基本上提供關(guān)于能夠做什么和如何做的指導(dǎo)。UDDI注冊中心提供任何可用WEB服務(wù)的企業(yè)級的描述,并且對完全定義那些服務(wù)的編程接口的WSDL提供指示。這為應(yīng)用開發(fā)人員以及黑客提供高生產(chǎn)率工具。
因此,期望限制對財務(wù)敏感或機密(例如醫(yī)藥記錄)系統(tǒng)的接口定義的訪問。甚至在開發(fā)組織內(nèi)部,最好限制對關(guān)于授權(quán)的特定WEB服務(wù)的信息的訪問。
在企業(yè)內(nèi),或由選定企業(yè)成員通過企業(yè)外部互聯(lián)網(wǎng)使用非安全UDDI注冊中心是非常危險的。借助可自由下載的工具,技能水平相對較低的人們能夠訪問和使用WEB服務(wù)。任何真正的企業(yè)解決方案均能夠以透明控制對有關(guān)WEB服務(wù)的信息的訪問的能力,實現(xiàn)標(biāo)準(zhǔn)UDDI服務(wù)。
對于分布,在許多情況下,UDDI注冊中心的初始部署將具有較小規(guī)模。然而隨著WEB服務(wù)需求的增長,通常會變成大型部署。另外,注冊中心的應(yīng)用和部署會隨著UDDI注冊中心的新功能的發(fā)現(xiàn)而得到加速。
更大型的實現(xiàn)和地理上分布的組織內(nèi)的使用會促使在單獨組織內(nèi)實現(xiàn)多個UDDI注冊中心。向分布式注冊中心的演變使得任何個體注冊中心能夠與其它注冊中心動態(tài)交互以服務(wù)于其請求的能力變得重要。一旦被建立,注冊中心間的通信能夠擴展超出防火墻,以包含受信企業(yè)伙伴的注冊中心,或甚至與因特網(wǎng)UDDI注冊中心通信。
考慮有2個基本方案以滿足注冊中心間通信的需要。一個方案是復(fù)制,其中多個服務(wù)器上存在相同的名字空間項。另一個方案是分布,其中互連服務(wù)器具有不同的名字空間項,然而它們提供一個邏輯服務(wù)。
盡管這2個方案經(jīng)常被混淆為類似的,然而它們有相當(dāng)?shù)牟煌?br>
在復(fù)制方案中,在可能需要查找信息的每個服務(wù)器中復(fù)制信息。這是相對簡單的,甚至過分簡單的解決方案,但是它引入了同步更新的需求,并且根據(jù)定義,它會隨著注冊中心數(shù)量和其內(nèi)容量的增長而增加網(wǎng)絡(luò)阻塞。復(fù)制技術(shù)最適于服務(wù)器數(shù)量較少,信息量較低并且很少改變的環(huán)境。對于企業(yè)部署,復(fù)制經(jīng)常用于在故障恢復(fù)環(huán)境中維護(hù)備份數(shù)據(jù)庫。使用復(fù)制技術(shù)非常難以保持地理上或功能上分布的服務(wù)器的同步。
在分布方案中,在每個參與的服務(wù)器上邏輯表示信息,但是信息只存儲在單個注冊中心中。僅在需要時查詢才被分布到其它注冊中心。于是保證返回的信息是最新的。這提供了單點更新,并且消除了復(fù)制技術(shù)固有的同步和帶寬消耗問題。真正分布被認(rèn)為是服務(wù)器之間可伸縮連通性的一個解決辦法。
對于企業(yè)UDDI注冊中心,存在2種通常會使用分布的情況。第一種情況用于具有地理上分隔的辦公室的組織,其中每個辦公室產(chǎn)生新的UDDI項并且使用UDDI服務(wù)。雖然可能能夠運行單個的集中式UDDI注冊中心,然而帶寬約束和時差經(jīng)常使得難以運行,以致不可工作。
分布式注冊中心提供靈活、可伸縮的解決方案。在這種情況下,每個參與的辦公室具有分立的注冊中心,并且每個注冊中心將其它注冊中心視為其自身內(nèi)容的邏輯部分。注冊中心服務(wù)負(fù)責(zé)所有的連通細(xì)節(jié),并且客戶不必關(guān)心地理問題。
第二種情景出現(xiàn)在企業(yè)需要將其內(nèi)部UDDI系統(tǒng)連接到受信伙伴的UDDI系統(tǒng)或公共因特網(wǎng)注冊中心時。尤其在公共注冊中心的情況下,復(fù)制是有問題的。因特網(wǎng)注冊中心操作人員可能不希望將其注冊中心的部分復(fù)制到企業(yè)的內(nèi)部注冊中心。于是,分布式方案是一個辦法。當(dāng)前,沒有針對分布的UDDI標(biāo)準(zhǔn),并且關(guān)于復(fù)制的建議被認(rèn)為是復(fù)雜的。一個解決方案會提供UDDI分布式方案的益處,而無需修改標(biāo)準(zhǔn)。
對于可管理性,作為執(zhí)行企業(yè)內(nèi)的任務(wù)關(guān)鍵功能的部件,UDDI應(yīng)當(dāng)滿足性能和可靠性要求。它不應(yīng)只是作為開發(fā)人員的方便實用程序而存在??蛻舳说淖x取訪問將是對UDDI注冊中心的最頻繁和時間要求最嚴(yán)格的應(yīng)用。為最大吞吐率而優(yōu)化性能,并且查找查詢的響應(yīng)時間不應(yīng)受更復(fù)雜搜索的影響。隨著注冊中心的規(guī)模和復(fù)雜度的增長,性能不應(yīng)受影響。支持UDDI注冊中心的數(shù)據(jù)存儲應(yīng)當(dāng)是工業(yè)級的,并且完全支持事務(wù)和自動恢復(fù)。另外,UDDI服務(wù)器應(yīng)當(dāng)具有高度可用性,并且支持例如網(wǎng)絡(luò)故障恢復(fù)和熱后備的特性。系統(tǒng)管理員應(yīng)當(dāng)有能力使得UDDI注冊中心易于維護(hù),監(jiān)視和控制。這些能力包含無需使服務(wù)脫機而改變控制,規(guī)則和設(shè)置的動態(tài)配置,用于高可用性的在線備份和調(diào)整,停止注冊中心″搜索″和防止拒絕服務(wù)攻擊的管理控制,經(jīng)由SNMP或其它類型的提醒機構(gòu)的監(jiān)視,利用針對安全,統(tǒng)計,查詢和更新信息的分立日志文件的審計和診斷,以及支持復(fù)制,分布和路由的部署選項。
已經(jīng)引入了許多以開發(fā)人員為焦點的UDDI注冊中心。這些為小型開發(fā)團(tuán)隊提供了有用的能力,但不是真正的生產(chǎn)級的系統(tǒng)。WEB服務(wù)部署正迅速增長,并且對能夠迅速升級以支持正在進(jìn)行的WEB服務(wù)部署的企業(yè)級注冊中心存在相應(yīng)的需求。
UDDI注冊中心提供服務(wù)。許多應(yīng)用會依賴此服務(wù)。在在線企業(yè)的情況下,一起提供這個服務(wù)可能是重要的。例如,可能需要UDDI注冊中心提供99.99%可用性的服務(wù)等級協(xié)議。為了利于這個可用性水平,UDDI注冊中心可以復(fù)制在兩個或更多機器上,并且提供機制以確保機器保持同步,并且確保在任何機器變得不可用的情況下,任何傳入查詢被自動路由到可用機器。
如已經(jīng)指出的,UDDI可以被看作類似于電話目錄服務(wù)。于是,最好基于信息存儲的目錄模型建立UDDI注冊中心服務(wù)。已經(jīng)針對基于目錄的服務(wù)的特定需求演變和開發(fā)了目錄模型,其具有企業(yè)級部署所需的安全性,可伸縮性和可靠性。
在應(yīng)用體系結(jié)構(gòu)中,如上所述的大部分項目被實現(xiàn)在服務(wù)級,而不是數(shù)據(jù)存儲級。關(guān)系數(shù)據(jù)庫(RDBMS)是能夠借以建立許多不同類型的應(yīng)用的通用工具包。RDBMS實現(xiàn)側(cè)重于提供堅實的數(shù)據(jù)訪問功能,而不是終端應(yīng)用中需要的額外服務(wù)功能。
圖3示出的目錄服務(wù)體系結(jié)構(gòu)圖解了服務(wù)層31與其它部件的分離。將接口功能封裝到服務(wù)層31中,產(chǎn)生了可重用服務(wù)基礎(chǔ)設(shè)施部件。其一個極好的例子是Web服務(wù)器。Web服務(wù)器提供一個功能集合(HTTP訪問,CGI處理等等),其共同構(gòu)成足夠可用于建立到獨立部件中的服務(wù)。以相同方式,已經(jīng)開發(fā)了目錄服務(wù)模型以提供特定類型的應(yīng)用所需的功能。目錄技術(shù)提供對認(rèn)證和授權(quán)領(lǐng)域的許多任務(wù)關(guān)鍵應(yīng)用的支持。
UDDI可被視作類似于另一個類型的目錄服務(wù)。于是可以發(fā)現(xiàn),通過使用目錄技術(shù)能夠解決UDDI產(chǎn)生的許多實現(xiàn)問題。例如,針對對于UDDI電話目錄操作而言非常普遍的非常高效的發(fā)現(xiàn)和搜索操作而優(yōu)化目錄。
已經(jīng)注意到,UDDI服務(wù)應(yīng)當(dāng)提供強安全性,分布和可管理性能力,如果它要成功部署在企業(yè)中的話。這些是已經(jīng)建立到企業(yè)級目錄服務(wù)解決方案中的非常相同的屬性。
一個構(gòu)造企業(yè)UDDI注冊中心的方式是擴展現(xiàn)有的目錄基礎(chǔ)設(shè)施,這種現(xiàn)有的目錄基礎(chǔ)設(shè)施已經(jīng)在高性能真實世界應(yīng)用中得到嘗試和測試。
目錄服務(wù)體系結(jié)構(gòu)提供優(yōu)化的工具以實現(xiàn)企業(yè)UDDI注冊中心。這種組合支持為成功而需要的能力。圖4示意性示出的UDDI服務(wù)標(biāo)識出可以針對這個基礎(chǔ)設(shè)施實現(xiàn)的部件。UDDI語義橋41是介于UDDI的SOAP實現(xiàn)42和目錄44支持的LADP接口43之間的服務(wù)部件。目錄44傳送其中支持安全控制,分布機制和管理能力的信息訪問。RDBMS 45提供基礎(chǔ)物理數(shù)據(jù)管理,事務(wù)完整性和備份與恢復(fù)機制。
UDDI注冊中心產(chǎn)品可以直接建立在RDBMS技術(shù)上。盡管在許多方面都是非常有用和強大的,然而關(guān)系數(shù)據(jù)庫自身不滿足目錄處理所特有的要求。
使用RDBMS或下面的其它數(shù)據(jù)存儲系統(tǒng)能夠初步建立目錄型應(yīng)用。然而這不可能是最高效的方案。
一個替代方案是應(yīng)用目錄服務(wù)模型來建立UDDI注冊中心,并且提供這個特定類型的應(yīng)用所需的功能。通過現(xiàn)代的工業(yè)級目錄服務(wù)甚至能夠提供更多UDDI注冊中心所需的功能。UDDI注冊中心可被視作具有專用通信和API的目錄服務(wù)。在目錄上建立UDDI服務(wù)能夠提供必備的安全性,分布和管理能力,而無需修改UDDI標(biāo)準(zhǔn)以獲得益處。
精心設(shè)計的數(shù)據(jù)表示會有利于提供UDDI數(shù)據(jù)庫所需的功能和性能。
以下描述涉及各個UDDI概念。參照UDDI規(guī)范(http//www.uddi.org/specification.html)可獲得這些UDDI概念的更加詳細(xì)的描述。
在目錄用語中,模式是有關(guān)目錄中能夠存儲的數(shù)據(jù)單元和那些單元如何可以被連接在一起的描述。這包含每個可能屬性(屬性保存單段數(shù)據(jù))的描述,各個對象(對象是屬性的集合)的描述,和可能對象層次結(jié)構(gòu)的說明。本說明書中使用的特定模式符號是eTrust目錄,即Computer Associates International公司的產(chǎn)品所使用的符號?!鋏Trust′是Computer Associates International公司的產(chǎn)品名稱和商標(biāo)。當(dāng)然,可以使用其它模式符號。
本發(fā)明描述用來通過使用目錄作為數(shù)據(jù)存儲來實現(xiàn)UDDI數(shù)據(jù)庫的模式。存在與這個模式有關(guān)的若干概念。也存在用來增強UDDI實現(xiàn)的操作的若干技術(shù)。以下是對這些概念中的一些的簡要描述。后面當(dāng)描述本發(fā)明的實施例時會提供這些概念和技術(shù)的更加詳細(xì)的描述。
本發(fā)明的模式被設(shè)計成提供優(yōu)化操作。以增強操作的方式實施本發(fā)明的模式設(shè)計,其包含屬性,對象類,項(entry)和層次結(jié)構(gòu)的定義。本發(fā)明的模式設(shè)計至少在安全性,性能,可管理性和分布方面提供顯著的優(yōu)點。
現(xiàn)在描述系統(tǒng)的層次結(jié)構(gòu)。X.500目錄在內(nèi)部支持分布,從而在無需UDDI層次的任何編碼的情況下提供分布式UDDI數(shù)據(jù)庫。層次分割數(shù)據(jù)庫的內(nèi)容。這個模式的(可選)域?qū)哟渭俣ㄔ搶哟?,每個域項和在其下面的全部項均能夠?qū)DDI層次編程透明地被放到分立目錄服務(wù)器上。圖11圖解了本發(fā)明這個方面的實施例。下面會更詳細(xì)地對此進(jìn)行描述。
根據(jù)本發(fā)明的實施例,用戶對象被放置在企業(yè)和TModel對象之上。用戶對象提供用于存儲涉及用戶的信息的位置。它也提供針對用戶發(fā)布的全部數(shù)據(jù)的錨標(biāo)點(anchor point)。圖10圖解了本發(fā)明這個方面的實施例。下面會更詳細(xì)地對此進(jìn)行描述。
這個域/用戶層次系統(tǒng)有利于安全性。UDDI實現(xiàn)能夠保證用戶具有對其數(shù)據(jù)對象子樹的控制。
提供對用戶控制的項的搜索。通過在用戶對象下面使用子樹搜索,能夠增強對這個用戶控制的數(shù)據(jù)的搜索。
通過例如指定在綁定模板中出現(xiàn)的TModel,可以發(fā)現(xiàn)企業(yè)。這等同于″通過發(fā)現(xiàn)一個(或更多)其子節(jié)點來發(fā)現(xiàn)x″。換言之,查詢可以是″發(fā)現(xiàn)具有一服務(wù)的所有企業(yè),該服務(wù)具有引用這個模型的綁定模板″。通過發(fā)現(xiàn)派生對象的DN(區(qū)別名字)并且丟棄不期望的層次以產(chǎn)生企業(yè)實體的DN,進(jìn)行這樣的查詢。
也可以通過這種方式進(jìn)行復(fù)制消除。這個發(fā)現(xiàn)特性源于本發(fā)明的結(jié)構(gòu)的層次性質(zhì)。
可以使用對對象類唯一的屬性來執(zhí)行搜索。這是具有2個優(yōu)點的優(yōu)化。這通過消除′弱′子句簡化了搜索的編寫,并且產(chǎn)生出眾的性能。′弱′子句是過濾器的一部分,其返回大量的項,或者是指作為許多項的一部分的屬性。對每個名字使用相同屬性名字的設(shè)計在按照名字對企業(yè)實體進(jìn)行搜索時會具有2個選擇它在搜索中包含對象類,或過濾搜索結(jié)果。前者只在企業(yè)名字具有唯一對象類的情況下才可能出現(xiàn),并且即使如此,對象類仍是弱子句,從而導(dǎo)致更多開銷。后者意味著額外的代碼,和返回遠(yuǎn)大于期望結(jié)果的結(jié)果列表的可能性。
例如,考慮稱作″McKenna的測試服務(wù)″的公司,其提供各式各樣的WEB服務(wù),所有的WEB服務(wù)均在其名字中包含″McKenna的″-以在其名字中具有″McKenna的″為條件對企業(yè)實體進(jìn)行的搜索會返回全部服務(wù)的中間結(jié)果。這些中間結(jié)果可以被消除,但是處理它們降低了性能。
最好能夠在搜索中指定屬性名字,并且使該屬性名字唯一標(biāo)識正搜索的對象類。繼續(xù)上述例子,如果我們能夠進(jìn)行以下指定,則搜索會更加簡單(euBusinessEntityName=McKenna′s*)這樣的設(shè)計產(chǎn)生強搜索,由于它們單純搜索期望區(qū)域,因而是高效的。強搜索包含返回少量項的搜索。目錄能夠索引euBusinessEntityName屬性,并且根據(jù)該索引返回結(jié)果-這產(chǎn)生良好的性能,并且避免處理不必要的中間結(jié)果。
對于簡單查詢,這樣的設(shè)計意味著針對企業(yè)實體名字的搜索是單個子句,而不是在另一個設(shè)計中可能必要的復(fù)合子句。想象如果名字屬性被稱作euName,并且企業(yè)實體名字對象被稱作euBusinessEntityName。這會產(chǎn)生以下搜索(&(euName=McKenna′s*)(oc=euBusinessEntityName))
存在甚至更加簡單的設(shè)計,其中所有名字被存儲在相同對象類中。這意味著搜索再次縮減到(euName=McKenna′s*),但是現(xiàn)在我們遍歷所有名字的結(jié)果,以嘗試找到那些具有作為企業(yè)實體的父對象的結(jié)果-這個最后設(shè)計可能會產(chǎn)生不良性能,和更加復(fù)雜的編程。
影像屬性(shadow attribute)可以被用于大小寫敏感(case-sensitivity)。使用單個索引提供大小寫敏感和大小寫不敏感的搜索完全不是無效的。一個選擇是大小寫不敏感地進(jìn)行索引,接著大小寫敏感地掃描結(jié)果。另一個解決方案是大小寫敏感地索引原始數(shù)據(jù),并且增加大小寫不敏感地被索引的第二屬性(其中存儲相同數(shù)據(jù))。于是需要做的只是選擇適當(dāng)屬性以根據(jù)發(fā)現(xiàn)限定條件進(jìn)行搜索。
這個設(shè)計中的每個屬性可以是單值的。這允許高效索引,更高性能和更強搜索。
使用多值屬性使得能夠進(jìn)行模糊搜索。也就是說,可以得到不直觀和不期望的搜索結(jié)果。假定一個稱作′n′的多值數(shù)字屬性,并且包含這個屬性的項具有值2和5;這個項會響應(yīng)搜索(&(n<3)(n>4))而被返回,這不是容易預(yù)測的。
單值屬性是用于強搜索的技術(shù)之一。強搜索是能夠通過索引消除大多數(shù)候選結(jié)果的搜索。強搜索是改進(jìn)性能的關(guān)鍵。
別名可以被用于服務(wù)投影。這是使用X.500目錄作為數(shù)據(jù)存儲的顯著益處。能夠使用X.500別名巧妙地表示服務(wù)投影。這是保證數(shù)據(jù)完整性的主要優(yōu)點。別名訪問原始數(shù)據(jù),所以通過別名立即反映對原始數(shù)據(jù)的任何改變。如果目錄實現(xiàn)支持別名完整性,則當(dāng)原始項被刪除時,別名無需附加工作便會消失。
發(fā)布者聲明是UDDI標(biāo)準(zhǔn)中定義最不清楚的元素之一,它們需要精心的設(shè)計。不適當(dāng)?shù)膶崿F(xiàn)能夠容易地產(chǎn)生不良的性能。
由于發(fā)布者聲明的最通常的使用是搜索涉及指定企業(yè)實體的所有完整發(fā)布者聲明的find_relatedBusiness API,將每個聲明放置在其所針對的企業(yè)實體下面會是良好的設(shè)計。
通過計算聲明的狀態(tài)并且在聲明對象中存儲該狀態(tài),可以將搜索限于完整發(fā)布者聲明。這意味著返回的結(jié)果不會包含要清除的虛假引用。
將關(guān)系對象存儲為輔助類允許搜索消除具有不期望關(guān)系的任何聲明。如果關(guān)系被存儲為子對象,則不能編寫出訪問到關(guān)系和聲明完成狀態(tài)的單個搜索。
UDDI關(guān)鍵字可以被用于對存在的目標(biāo)進(jìn)行命名。UDDI對許多重要對象類定義了關(guān)鍵字,并且這些關(guān)鍵字被指定為保證唯一。這意味著關(guān)鍵字能夠被用作對象的名字屬性。使用UDDI關(guān)鍵字作為名字屬性意味著不必嘗試消除命名沖突-而在例如缺省名字被用作企業(yè)實體的名字屬性的情況下會需要消除命名沖突。
可以提供關(guān)鍵字以對不存在的目標(biāo)進(jìn)行命名。也就是說,不是所有的UDDI對象都具有定義的關(guān)鍵字。一個例子是發(fā)布者聲明。對于這些,本系統(tǒng)使用與UDDI定義的關(guān)鍵字相同的算法提供關(guān)鍵字。這個思路的重用意味著能夠重用針對其它對象編寫的代碼和結(jié)構(gòu)。
在一系列UDDI對象是另一個對象的子對象并且子對象的順序是重要的(例如地址行(address lines))的情況下,分配給子對象的關(guān)鍵字被構(gòu)造成其值單調(diào)增加,使得對關(guān)鍵字的排序產(chǎn)生期望的順序。這簡化了保證期望順序的處理。
實際上,期望關(guān)鍵字按照由小到大(little-endian)的方式發(fā)生改變。也就是說,關(guān)鍵字的最左字節(jié)改變最迅速,因為這在被用作數(shù)據(jù)存儲的X.500目錄中產(chǎn)生最優(yōu)的索引性能。
UDDI標(biāo)準(zhǔn)在一些主對象類型內(nèi)定義若干子結(jié)構(gòu)。在許多情況下,這些子結(jié)構(gòu)是可選的,并且可以重復(fù)(它們在相同對象中可以出現(xiàn)零次,一次或不止一次)。一個簡單例子是名字子結(jié)構(gòu),包含串(名字)和語言標(biāo)識符。X.500模式定義不支持結(jié)構(gòu)化屬性的使用,所以不存在現(xiàn)成的、清楚的子結(jié)構(gòu)映射。
存在一些能夠在X.500模式中實現(xiàn)這些子結(jié)構(gòu)的方式。
一種方式是通過使用某種分隔符分割各個元素,從而將子結(jié)構(gòu)的成分串聯(lián)成單個屬性。這可能是最優(yōu)的設(shè)計選擇,因為它失去分別索引或搜索成分的能力,并且增加了處理復(fù)雜度以處理數(shù)據(jù)。
在本系統(tǒng)中,選擇用來表示子結(jié)構(gòu)的特定設(shè)計以使性能和可管理性最大化。所公開的設(shè)計可以使用各種技術(shù)中的一或多個表示目錄中的子結(jié)構(gòu)。這些技術(shù)可以被概括為3個類別。
一個技術(shù)是將許多子結(jié)構(gòu)處理為子對象。名字是良好的例子企業(yè)實體名字被存儲為企業(yè)實體的子對象。另一個例子是描述,其中單獨的企業(yè)描述對象是企業(yè)實體對象的子對象。圖15提供了關(guān)于本發(fā)明這個方面的實施例的說明,并且會在下面更詳細(xì)地加以描述。
另一個技術(shù)是扁平化/合并。在可能最多存在一個針對另一個對象的關(guān)系的情況下,屬性可以被合并成一個單獨的對象。在這種情況下,層次結(jié)構(gòu)被稱作是扁平化的,因為2個對象已經(jīng)合并成一個對象。新對象被稱作是合并的,因為新對象包含來自組合對象的屬性的組合。關(guān)系對象的內(nèi)容最好被提升到父對象。
例如,圖16示意性圖解了UDDI關(guān)系圖的表示。圖17示意性圖解了目錄層次結(jié)構(gòu)圖,其中通過UDDI對象的扁平化形成了目錄層次結(jié)構(gòu)。
通過說明,圖16圖解了具有針對對象163的關(guān)系對象162的對象161。
根據(jù)本發(fā)明的實施例(其中存在一對一關(guān)系),′子對象′能夠得到提升。換言之,該部分層次結(jié)構(gòu)能夠被縮減或扁平化,并且對象被合并。圖17示意性圖解了結(jié)果。父對象171具有內(nèi)容A1,A2,An,并且具有一或多個子對象,即子對象9n,其具有內(nèi)容B1,B2,Bn,C1,C2和Cn。
另一個技術(shù)是分割。例如,在一個特定情況(OverviewDoc子結(jié)構(gòu))中,子結(jié)構(gòu)包含非重復(fù)單元和重復(fù)單元。非重復(fù)單元(OverviewURL)能夠移入父對象,而重復(fù)單元可以成為子對象。
本發(fā)明的另一個方面是管理。刪除TModel使得將其從find TModel隱藏掉,但是不將其從數(shù)據(jù)庫中清除。因此,為實現(xiàn)正確的TModel處理,可以實現(xiàn)隱藏標(biāo)記。這個標(biāo)記的存在指示TModel(或用戶對象)被隱藏。標(biāo)記的不存在指示它沒有被隱藏。對于絕大多數(shù)TModel均是如此,所以這個方案是高效的。非隱藏對象中沒有占用空間,并且也不使用索引。目錄會只索引那些具有隱藏屬性的項。這也意味著對非隱藏TModel的搜索會是快速和高效的。
被用作數(shù)據(jù)存儲的X.500目錄促使產(chǎn)生不存儲空值的設(shè)計。例如,對象中不存在的(可選)值不存儲在目錄中。這使得高效使用存儲空間,并且得到更強搜索。任何對屬性的搜索只需要考慮那些具有該屬性的數(shù)據(jù)的對象。
本系統(tǒng)的數(shù)據(jù)層次結(jié)構(gòu)很好地與UDDI標(biāo)準(zhǔn)的意圖相匹配。當(dāng)請求到達(dá)以刪除UDDI對象時,它直接映射到目錄中子樹的刪除。例如,刪除服務(wù)包含刪除其名字和描述,以及全部其綁定模板。所有這些均是目錄中的服務(wù)項的子對象。因此,本系統(tǒng)自服務(wù)項向下刪除子樹。這容易實現(xiàn)并且高效。
域是表示層次子樹的基部的名字。在X.500術(shù)語中,域被稱作上下文前綴。在LDAP術(shù)語中,它被稱作后綴。為UDDI數(shù)據(jù)庫提供域名允許在數(shù)據(jù)庫中使用數(shù)據(jù)的真正分布(就X.500而言)。UDDI標(biāo)準(zhǔn)僅支持復(fù)制。通過本系統(tǒng)能夠?qū)?yīng)用透明地使用目錄分布設(shè)備。
例如,假定企業(yè)內(nèi)部部署UDDI,但是具有2個開發(fā)位置。對于此設(shè)施,它們能夠在每個位置部署UDDI服務(wù)器,其中分布允許每個位置透明地觀看兩個注冊中心上發(fā)布的項目。
其優(yōu)點是允許分布′免費(for free)′。例如,UDDI服務(wù)器不必進(jìn)行任何額外工作,并且目錄系統(tǒng)有效地將信息島鏈接在一起。
UDDI標(biāo)準(zhǔn)中沒有規(guī)定如何存儲用戶信息。通過建立用戶對象,涉及用戶的全部信息能夠被存儲在一個單獨的對象中,并且該對象能夠被用作保存用戶發(fā)布的全部對象的子樹的根。這使得安全性的定義更加簡單。例如,如果所考慮的對象(企業(yè),服務(wù)或甚至TModel)在用戶的用戶對象下面,則用戶控制它。
UDDI定義包含重復(fù)單元的對象。對于例如性能,可搜索性和可管理性的益處,這些重復(fù)單元能夠被表示成子對象。
將重復(fù)的結(jié)構(gòu)化數(shù)據(jù)存儲為子對象允許在目錄中高效地表示數(shù)據(jù),其中每個字段分別可用于搜索(和為搜索而索引)。
例如,企業(yè)實體名字能夠被存儲為企業(yè)實體對象的子對象。另一個例子是能夠被存儲為企業(yè)實體對象下面的子對象的企業(yè)描述。
這類系統(tǒng)的優(yōu)點是允許搜索名字(是常見的UDDI搜索),并且該項的DN提供名字屬于的對象的DN。
UDDI定義冗余′容器′節(jié)點(只包含子對象子結(jié)構(gòu)而不是屬性的UDDI結(jié)構(gòu))。這些可以被從查詢結(jié)果中清除,因為它們能夠以相對較低的成本構(gòu)造。在某些情況下,屬性能夠被從子節(jié)點提升到其父節(jié)點,以從目錄表示中清除現(xiàn)在冗余的子節(jié)點。
例如,由于不包含屬性,在目錄模式中不表示tModelInstanceDetails。象其子對象OverviewDoc的屬性那樣,由于其屬性被提升到tModellnstancelnfo父對象,在目錄模式中不表示instanceDetails。在目錄中不表示類別和標(biāo)識符包(bag),使其內(nèi)容作為包的所有者的子對象。
其優(yōu)點是減少了目錄中項的數(shù)量。尤其是,它使DIT的深度最小,從而能夠改進(jìn)性能。
圖12根據(jù)本發(fā)明實施例示意性圖解了層次結(jié)構(gòu)。提供一或多個域或前綴121。在每個域121下面,可以有一或多個用戶122。在每個用戶122下面,可以有一或多個TModel 123和一或多個企業(yè)實體(BE)124。在每個企業(yè)實體124下面,可以有一或多個發(fā)布者聲明(PA)125,一或多個企業(yè)服務(wù)(BS)126和一或多個服務(wù)投影(SP)127。在每個企業(yè)服務(wù)(BS)126下面,可以有一或多個綁定模板(BT)128。通過特定實現(xiàn),能夠根據(jù)需要放置別名。例如,服務(wù)投影對象(如圖12中三角所示)可以從企業(yè)實體對象生出以作為別名。
通過讀取整個公開內(nèi)容可理解如圖12所示的這個模式設(shè)計的優(yōu)點。
發(fā)布者聲明被放置在它們所針對的企業(yè)實體下面,因為它們在find_RelatedBusinesses調(diào)用的環(huán)境中最頻繁使用,所述調(diào)用指定企業(yè)關(guān)鍵字,并且正經(jīng)由發(fā)布者聲明尋找與企業(yè)關(guān)鍵字相關(guān)的所有企業(yè)。本系統(tǒng)找到指定的企業(yè),接著讀取它下面的所有發(fā)布者聲明(是完整的)。這是找到相關(guān)聲明的快速和高效的方式。
其優(yōu)點是允許快速和高效的搜索。它也允許容易地維護(hù)數(shù)據(jù)完整性。例如,當(dāng)刪除企業(yè)時,任何發(fā)布者聲明也被自動刪除。
發(fā)布它們的用戶能夠改變(或撤消/隱藏)TModel。將它們放置在表示用戶的項下面使得安全性變得簡單。例如,如果TModel位于用戶項下面的子樹中,則能夠修改它。如果不是這樣,則不能修改。
更詳細(xì)地,如果嘗試進(jìn)行改變的用戶的DN(區(qū)別名字)與TModel的DN的前綴匹配,則該用戶能夠修改該項,否則不能。目錄能夠被用來進(jìn)行這個確定(如果DN不存在,則發(fā)生命名異常),UDDI服務(wù)器也能夠進(jìn)行這個確定。
當(dāng)從數(shù)據(jù)庫中刪除對象時,與該對象相關(guān)的信息也可以被刪除。通過根據(jù)本模式的實施例使用的層次設(shè)計可對此進(jìn)行大大簡化。當(dāng)刪除對象時,能夠刪除以其為根的整個子樹,并且這個處理能夠刪除所有相關(guān)信息(并且通常只刪除該相關(guān)信息)。能夠自底向上地刪除子樹。當(dāng)刪除所有其子對象時,只能刪除每個項。通過按照相反DN順序列出所有子對象來對此進(jìn)行管理。這保證刪除在其父對象之前的子對象。
其優(yōu)點是排序列表方法是更加復(fù)雜的遞歸使用的替代。此外,它相對簡單和存儲器高效。當(dāng)按照DN對子樹中的所有項進(jìn)行排序并且以相反順序執(zhí)行刪除時,這保證在其父對象之前刪除所有子對象。
例如,當(dāng)刪除企業(yè)服務(wù)時,系統(tǒng)刪除與之相關(guān)的所有綁定模板,其TModel實例信息,和各種相關(guān)類別信息。通過刪除以企業(yè)服務(wù)為根的子樹,可以刪除所有這些。
由于這個模式的設(shè)計中使用的層次結(jié)構(gòu),對象的DN揭示了所有關(guān)系鏈和對象的控制。注意,推論也取決于名字屬性的精心選擇。
其優(yōu)點是能夠減少用來收集信息的搜索或讀取的數(shù)量。例如,對于作為子對象(例如名字)的搜索結(jié)果,每個項的DN揭示出父對象(例如企業(yè)實體)和所有者帳戶。
例如,企業(yè)服務(wù)的DN揭示出它屬于的企業(yè),以及控制它的用戶。
目錄不保證結(jié)果的任何順序。當(dāng)處理復(fù)雜結(jié)果(例如企業(yè)實體及其企業(yè)服務(wù),以及其適當(dāng)名字和描述)時,通過得到搜索結(jié)果并按DN對其排序,能夠簡化輸出的構(gòu)造。這對它們進(jìn)行組織,使得結(jié)果的構(gòu)造變得相對簡單。在其子對象之前構(gòu)造每個對象,所以易于將子對象放置在其父對象下面,使得在其服務(wù)之前組織企業(yè)的結(jié)果。對象的所有子對象出現(xiàn)在相同類型的下一對象之前,一個企業(yè)的全部服務(wù)在下一企業(yè)出現(xiàn)之前。這也允許簡單的遞歸構(gòu)造,因為相同的道理適用于每個層次。
其優(yōu)點是使構(gòu)造UDDI結(jié)構(gòu)所需的遍歷原始項列表的次數(shù)最小。
例如,在排序之后,企業(yè)A的結(jié)果后面跟有其第一服務(wù)AA的結(jié)果,該服務(wù)的名字,A的第二服務(wù)AB,及其名字,接著是第二企業(yè)B。
也可以對子對象執(zhí)行搜索。例如,頻繁搜索請求可以是″通過發(fā)現(xiàn)一個(或更多)其子對象來發(fā)現(xiàn)x″。通過搜索能夠發(fā)現(xiàn)企業(yè)的一個方式是指定例如綁定模板中出現(xiàn)的TModel。換言之,查詢是″發(fā)現(xiàn)具有一服務(wù)的所有企業(yè),該服務(wù)具有引用這個模型的綁定模板″。通過發(fā)現(xiàn)派生對象的DN并且丟棄不期望的層次以產(chǎn)生企業(yè)實體的DN,能夠進(jìn)行這些查詢。有利的是,這也消除了復(fù)制。這個搜索方法部分源于本發(fā)明實施例的層次結(jié)構(gòu)。
保證唯一的關(guān)鍵字的使用簡化了工作。能夠針對單個關(guān)鍵字搜索整個數(shù)據(jù)庫,并且唯一性保證或者沒有結(jié)果(如果不存在該關(guān)鍵字),或者有一個結(jié)果(如果它存在)。不必費心將搜索限制在父對象的范圍內(nèi)。這由目錄產(chǎn)生增強的性能,因為它能夠使用數(shù)據(jù)庫索引進(jìn)行優(yōu)化。
其優(yōu)點是利用了最快速類型的目錄查詢。另一個優(yōu)點是在從另一個對象引用指定對象的情況下,保證唯一的名字是重要的。
多數(shù)索引系統(tǒng)的特性在于它們是數(shù)據(jù)相關(guān)的。如果數(shù)據(jù)是″從小到大的″(最左部分最迅速地改變),則該數(shù)據(jù)往往被擴展,所以索引能夠提供最大性能。反之,如果數(shù)據(jù)是重復(fù)的,則索引不能非常有效。能夠使用UUID(全局唯一標(biāo)識符)算法,其表現(xiàn)出″從小到大″特性。其優(yōu)點是使目錄性能最大。
關(guān)鍵字可以被加到導(dǎo)出對象上。在重復(fù)數(shù)據(jù)單元被加到子對象的情況下,需要增加名字屬性,這會形成其DN的最后的弧。在目錄中,名字屬性不同于其兄弟對象,因為相同父對象的任意2個子對象均不會具有相同名字。
可以使用兩種關(guān)鍵字。對于不要求順序的子對象,使用UUID,因為這些被保證是唯一的。如果順序是重要的,則具有單調(diào)增加特性的關(guān)鍵字被用來保證順序。
在UDDI標(biāo)準(zhǔn)中,企業(yè)實體能夠提供兩種服務(wù)它控制的服務(wù)(在數(shù)據(jù)庫中通過子對象表示),和它對其提供接口的服務(wù),盡管它們由另一個企業(yè)實體提供。在公開的UDDI數(shù)據(jù)庫中通過別名表示后者。別名確切地提供正確的特性。例如,如果其所有者以某種方式改變初始對象(服務(wù))(或許增加另一個綁定模板),則通過別名引用的對象也″改變″。此外,在企業(yè)實體下面對服務(wù)的任何搜索會產(chǎn)生真實和帶別名的服務(wù)。
例如,別名能夠被用于服務(wù)投影,其中企業(yè)能夠指向另一個企業(yè)下面定義的服務(wù)。
其優(yōu)點是起作用的別名允許基本上涉及要自動提供的″替代名字″的功能。此外,如果目錄支持別名完整性,則如果刪除原始服務(wù),那么任何投影會被自動清除。
在UDDI標(biāo)準(zhǔn)中,存在若干地方,其中我們不希望直接引用到另一個對象,而是希望引用到中間步驟-例如在TModel實例信息的情況下,或是引用到發(fā)布者聲明中的企業(yè)實體。在這些情況下,別名會使代碼復(fù)雜。因此,本系統(tǒng)可以使用對對象的引用。因為根據(jù)實施例的本系統(tǒng)保證每個對象具有唯一關(guān)鍵字,則該關(guān)鍵字確切充當(dāng)引用,有時被稱為″外″鍵。
能夠使用輔助對象類執(zhí)行屬性分組。在處理發(fā)布者聲明時,需要使用唯一標(biāo)識發(fā)布者聲明的3個屬性2個企業(yè)實體關(guān)鍵字,和其間的關(guān)系找到發(fā)布者聲明的能力。
然而,關(guān)系被指定為鍵值標(biāo)識引用(keyed reference),其自身是3個不同屬性TModel關(guān)鍵字,鍵名和鍵值。一種方式是將這個關(guān)系存儲為發(fā)布者聲明的子對象。然而這不允許對特定發(fā)布者聲明進(jìn)行最高效的搜索。通過使關(guān)系鍵值標(biāo)識引用(relationship keyed reference)作為發(fā)布者聲明項的輔助類,可以在單個搜索中搜索所有5個屬性,于是確切隔離出所需的發(fā)布者聲明對象。
這個模式的一個設(shè)計可以使用普通面向?qū)ο笤O(shè)計技術(shù),并且產(chǎn)生例如具有相同屬性名字的所有鍵值標(biāo)識引用。然而,這個設(shè)計會使得更加難以隔離例如企業(yè)實體類別鍵值標(biāo)識引用和避免使其與TModel類別鍵值標(biāo)識引用的混淆,并且使之成本更高。也會使得有必要在過濾器中包含對象類項,并且這樣的項是弱的(在數(shù)據(jù)庫中高度重復(fù))。
例如為每個不同類型的鍵值標(biāo)識引用提供不同對象類和不同屬性名字意味著對特定屬性名字的任何搜索有必要隱含對象類。也意味著目錄服務(wù)器能夠構(gòu)造這樣的索引,該索引只在其中具有針對特定類型的期望項的項。這種索引會更小并且因此更快速。
例如,類似″euBusinessEntityName=Smith*″的搜索會查詢針對euBusinessEntityName的索引,所以不能與在稱作euTModeIName的屬性中包含Smith的項混淆。
這需要UDDI標(biāo)準(zhǔn)范圍以外的工具。這種工具可能需要提供進(jìn)行超出UDDI標(biāo)準(zhǔn)中指定的范圍的訪問的手段。為允許這種工具,本發(fā)明定義抽象類,抽象類綁定表示單個UDDI概念的所有對象類。這允許定義能夠查看例如所有名字或所有鍵值標(biāo)識引用的搜索。
例如,存在抽象類euName,它是包含euBusinessEntityName和euTModeIName的所有名字型對象類的超類。
UDDI標(biāo)準(zhǔn)規(guī)定可以以例如大小寫敏感和大小寫不敏感的方式搜索名字。這可以通過大小寫不敏感地進(jìn)行索引,并且接著檢索各個項并且大小寫敏感地對其進(jìn)行檢查來實現(xiàn),但是這種方案以性能為代價。在這些情況下最好定義包含相同數(shù)據(jù)但是被不同索引的影像字段。類似地,影像屬性能夠被用于語言中的變化,例如可區(qū)別標(biāo)記。
例如,euBusinessEntityName對象類包含每個名字的2個拷貝。大小寫不敏感地索引第一版本,大小寫敏感地索引第二版本。這允許構(gòu)造無論請求何行為均最優(yōu)執(zhí)行的搜索過濾器。
這個數(shù)據(jù)庫中的每個屬性(對象類之外)可以是單值的。這使得目錄能夠構(gòu)造更加高效的索引,并且提供更好的搜索性能。
這也排除了搜索中產(chǎn)生虛假肯定結(jié)果的可能性。例如,考慮尋找以″Fr″為開始并且以″nk″為結(jié)束的名字的搜索??赡茴A(yù)計這個搜索會產(chǎn)生具有類似″Frank″的名字的(有效)項。然而如果名字為多值屬性,則會得到具有類似″Fred″和″Tink″的2個名字的無效項,因為這一個項與兩個規(guī)定的準(zhǔn)則匹配。通過使用單值名字(其每個是項的子對象),可排除″Fred″和″Tink″的虛假匹配。
操作屬性是由UDDI應(yīng)用管理但是用戶不可見的特殊屬性。
在UDDI數(shù)據(jù)的存儲中,應(yīng)當(dāng)能夠具有將使用中的TModel與已經(jīng)″撤消″的TModel區(qū)別開的方式。當(dāng)TModel被刪除時,它仍然會被通過許多使用,所以它不能被真正刪除。而是將其隱藏,這意味著它不會作為find_TModel調(diào)用的結(jié)果的一部分被返回,而是仍然能夠通過get_TModelDetal調(diào)用來查詢。這通過使用稱作euHidden的屬性來實現(xiàn),該屬性被加到被隱藏的TModel中。向搜索TModel的任何過濾器中增加排除包含euHidden屬性的任何項的搜索步驟是有好處和高效的。
在目錄實現(xiàn)中,具有主要為一個值的屬性通常被認(rèn)為是非常低效的。例如,99%的項具有被設(shè)置成假的隱藏屬性會產(chǎn)生不良性能-索引會相當(dāng)多地不可用。
被認(rèn)為是更多有效的方式是沒有隱藏屬性地存儲大多數(shù)項,并且只向要隱藏的那些項增加屬性。這具有不需要存儲空間保存所有那些″假″值的附加好處。現(xiàn)在,用于發(fā)現(xiàn)所有那些不被隱藏的TModel的過濾器變成″(!(euTModel=*))″-這是存在測試的否定,并且存在測試是快速的,尤其是當(dāng)屬性只存在于小部分的項中時。
現(xiàn)在描述用于解決在目錄環(huán)境中的實現(xiàn)和UDDI標(biāo)準(zhǔn)的問題的本發(fā)明實施例。存在若干針對X.500模式的元素。這些元素包含屬性定義,對象類定義和名字綁定定義。屬性定義規(guī)定單個數(shù)據(jù)單元,從而為其指定唯一標(biāo)識符(OID),名字和數(shù)據(jù)類型。對象類定義規(guī)定作為整體操作的屬性集合。它指定唯一標(biāo)識符(OID),名字和屬性列表;屬性可以是所需的或可選的。名字綁定規(guī)定可能的層次結(jié)構(gòu)的部分。名字綁定規(guī)定可以存儲在另一個對象類下面的一個對象類,并且規(guī)定子對象的屬性(多個屬性),它在這個上下文中命名該子對象。
存在若干提出附加設(shè)計要求的發(fā)現(xiàn)限定符。一個發(fā)現(xiàn)限定符是大小寫敏感性,用于提供以大小寫敏感和大小寫不敏感的方式高效搜索文本數(shù)據(jù)的能力。
根據(jù)本發(fā)明的實施例,通過在對象中提供不同索引的附加字段能夠解決大小寫敏感問題。根據(jù)這個實施例,文本數(shù)據(jù)在類型caseExactString的屬性和類型caseIgnoreString的屬性中被存儲兩次。發(fā)現(xiàn)限定符確定搜索的字段,從而產(chǎn)生最大性能。
例如,如果企業(yè)實體具有類似″McKenna′s Iron FoundryServices″的名字,則該串會被存儲兩次,一次是在大小寫敏感地索引的字段中,一次是在大小寫不敏感地索引的字段中-存儲的數(shù)據(jù)相同,但是基礎(chǔ)目錄所產(chǎn)生的索引不同。
另一個問題涉及高效實現(xiàn)服務(wù)投影。根據(jù)本發(fā)明的實施例,可以使用X.500別名設(shè)施解決這個問題。存在若干能夠處理服務(wù)投影的方式。本發(fā)明的這個實施例通過目錄別名處理它們。這是實現(xiàn)它們的特別高效的方式。它保證投影與基服務(wù)的一致性,因為通過別名直接訪問基服務(wù)。它也保證投影會在刪除基服務(wù)時消失,于是保證一致性。
例如,如果稱作Williams會計服務(wù)的企業(yè)實體發(fā)布稱作總帳交叉核對的WEB服務(wù),并且希望在稱作Williams審計服務(wù)的第二企業(yè)實體下面提供這個相同服務(wù),這可以通過將別名項放置在第二企業(yè)實體下面來實現(xiàn)。列舉Williams審計服務(wù)提供的服務(wù)的查詢方會發(fā)現(xiàn)總帳交叉核對服務(wù),就象其會發(fā)現(xiàn)Williams審計服務(wù)直接提供的任何服務(wù)那樣。
另一個問題涉及高效實現(xiàn)關(guān)鍵字。根據(jù)本發(fā)明的實施例,這通過使用外部關(guān)鍵字和其中順序不重要的關(guān)鍵字的UUID來解決。在順序很重要的情況下可以使用序號。盡管關(guān)鍵字被表示成串,然而它們不是真正的文本數(shù)據(jù)。在對大小寫或可區(qū)別標(biāo)記不敏感的情況下對其進(jìn)行比較。
外部可見的關(guān)鍵字遵循一組規(guī)則。當(dāng)實現(xiàn)符合UDDI規(guī)范的版本2的數(shù)據(jù)庫時,它們保存符合ISO-11578的UUID。當(dāng)實現(xiàn)符合UDDI規(guī)范的版本3的數(shù)據(jù)庫時,它們保存遵循該版本規(guī)范中設(shè)定的規(guī)則的鍵串。
注意,內(nèi)部用來將單元鏈接在一起的關(guān)鍵字遵循另一個組規(guī)則。那些順序不重要的關(guān)鍵字使用UUID。在順序很重要的情況下使用序號。
例如,表示稱作Williams審計服務(wù)的企業(yè)實體的類別包的單元的鍵值標(biāo)識引用可以引用具有關(guān)鍵字12345678-1234-1234-1234-1234567890ab(UDDIv2)的TModel。類別包中鍵值標(biāo)識引用的順序不重要,但是鍵值標(biāo)識引用需要充當(dāng)對象的名字屬性的關(guān)鍵字。于是我們可以產(chǎn)生這個對象的有些類似于87654321-4321-4321-4321-ba0123456789的UUID關(guān)鍵字,并且使用其作為這個對象在目錄中的名字屬性。
另一個問題是在期望X.500分布的情況下,數(shù)據(jù)可以被組織到域中。根據(jù)本發(fā)明的實施例,這通過在用戶之上建立數(shù)據(jù)庫層來解決,因而每個數(shù)據(jù)庫能夠被放到不同的服務(wù)器上。
UDDI標(biāo)準(zhǔn)不允許名字空間是分布式的。這意味著通過復(fù)制或通過透明地具有管理分布式名字空間的后臺數(shù)據(jù)存儲,多個UDDI注冊中心能夠彼此配合操作。
具有名字前綴的每個數(shù)據(jù)庫能夠利于分布式名字空間。這個前綴是定義域的一組節(jié)點。這些節(jié)點能夠被認(rèn)為是每個UDDI注冊中心之上的數(shù)據(jù)庫層。這些節(jié)點被放置在用戶層之上。
圖11圖解了稱作″域″110的這種節(jié)點的例子。域110是目錄前綴,并且可以包含直至根的一或多個節(jié)點。在域110下面,這個例子圖解了例如若干用戶112,113和114的排列。根據(jù)本系統(tǒng)的特定配置和/或用途,可以改變域110下面排列的用戶的數(shù)量。也可以存在根據(jù)本系統(tǒng)的特定配置和/或用途而排列的若干個域。在下面的例子中,它們被稱為數(shù)據(jù)庫對象,表明它們表示分立的物理數(shù)據(jù)庫。當(dāng)然,根據(jù)本系統(tǒng)的配置和/或用途,也可以不必如此。
數(shù)據(jù)庫對象需要名字屬性,但僅此而已。
set object-class uddiObjectClass400={#數(shù)據(jù)庫-可以用于將用戶分成組name=euRepositorysubclass-of topmust-containeuRepositoryName};分布是大規(guī)模目錄部署中的重要概念,因為它允許多個節(jié)點共享數(shù)據(jù),但沒有巨大的帶寬開銷和復(fù)制的同步問題。
在一個實施例中,′eTrust′UDDI支持使用基礎(chǔ)eTrust目錄服務(wù)器的能力的分布,并且為此相應(yīng)構(gòu)造了模式,其中允許在樹層次結(jié)構(gòu)的頂端有虛擬′域′節(jié)點,并且在每個節(jié)點子樹的頂端有唯一節(jié)點標(biāo)識符或名字(參見下面的UDDI模式描述)。
此外,通過配置可以使eTrust UDDI服務(wù)器′了解分布′。能夠指定2個分立的目錄前綴-一個用于搜索和讀取,另一個用于增加項。為部署分布式服務(wù)器,按照eTrust目錄管理指南為分布而構(gòu)造基礎(chǔ)eTrust目錄服務(wù)器代理。每個分立eTrust UDDI節(jié)點配有唯一節(jié)點名字。每個節(jié)點的搜索/讀取前綴被設(shè)置成′世界′或′公司′節(jié)點名字。每個節(jié)點的增加前綴被設(shè)置成該節(jié)點的唯一名字。
通過這種方式,每個節(jié)點向其自身的目錄數(shù)據(jù)庫增加項,但是通過X.500目錄的分布特性在所有節(jié)點上搜索項。
數(shù)據(jù)庫對象的例子可以是
euRepositoryName=Melbourne另一個問題涉及組織所保存的有關(guān)用戶的數(shù)據(jù)。這可以通過建立用戶對象以保存數(shù)據(jù)來解決。
盡管UDDI規(guī)范中沒有規(guī)定用戶對象,然而可以根據(jù)本發(fā)明的實施例使用這種對象。例如,除其它以外,用戶對象可以是用戶證書的存儲點,和用于發(fā)布的錨標(biāo)點。
圖10圖解了稱作′用戶′101的這種結(jié)構(gòu)的例子。在用戶101下面,這個例子圖解了其它對象,例如企業(yè)實體對象102,企業(yè)服務(wù)對象103和綁定模板對象104的結(jié)構(gòu)。根據(jù)本系統(tǒng)的特定配置和/或用途可以改變用戶101下面排列的企業(yè)實體對象的數(shù)量。也可以存在根據(jù)本系統(tǒng)的特定配置和/或用途而排列的若干個用戶。
用戶對象中保存的數(shù)據(jù)單元包含用戶關(guān)鍵字(用來提供這個用戶帳戶的唯一名字),用戶名稱,和證書(可以如口令那樣簡單,或如PKI證書那樣復(fù)雜)。它也可以包含授權(quán)名字(標(biāo)識授權(quán)操作用戶帳戶的人員或角色)。它也可以包含在處理用戶帳戶的刪除但不丟失用戶定義的任何TModel時使用的隱藏標(biāo)記。
set object-class uddiObjectClass401={#用戶帳戶name=euUserAccountsubclass-of topmust-containeuUserKey,euUserName,euCredentialsmay-containeuAuthorizedName,euHidden};用戶帳戶對象的例子可以是
euUserKey=23456789-2345-2345-2345-234567890abceuUserName=GraceeuCredentials=Amazing76sQ(在這個例子中假定已經(jīng)實現(xiàn)簡單的userid和口令系統(tǒng))另一個問題涉及以高效方式表示涉及企業(yè)實體(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實施例,通過將唯一字段表示為對象的屬性并且將重復(fù)單元表示為子對象來解決此問題。
企業(yè)實體對象是UDDI標(biāo)準(zhǔn)的基本成分。其內(nèi)容由標(biāo)準(zhǔn)定義,但是其許多單元是X.500模式不支持的重復(fù)復(fù)雜對象。通過層次結(jié)構(gòu)表示這種單元。
企業(yè)實體中唯一需要的單元是企業(yè)關(guān)鍵字。可選單元包含授權(quán)名字,操作人員和用戶關(guān)鍵字(這最后會出現(xiàn)在普通用戶發(fā)布的企業(yè)實體中)。
set object-class uddiObjectClass402={#企業(yè)實體-提供服務(wù)的實體的細(xì)節(jié)name=euBusinessEntitysubclass-of topmust-containeuBusinessEntityKeymay-containeuParentUserKey,euAuthorizedName,};企業(yè)實體的可能子對象是名字(為排序而加鍵值標(biāo)識、包含名字串和語言代碼的對象);描述(為排序而加鍵值標(biāo)識、包含描述串和語言代碼的對象);聯(lián)系(復(fù)雜對象-以后描述);發(fā)現(xiàn)URL(包含URL串和使用類型的對象,加鍵值標(biāo)識);通過選擇對象類而被標(biāo)記為類別或標(biāo)識符信息的鍵值標(biāo)識引用;和企業(yè)服務(wù)(如下所述)。
企業(yè)實體對象的例子可以是
euBusinessEntityKey=34567890-3456-3456-3456-34567890abcdeuParentUserKey=23456789-2345-2345-2345-234567890abc注意,企業(yè)實體對象的大部分明顯內(nèi)容實際被存儲在作為企業(yè)實體對象的直接子對象的對象中。
圖15根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子。在圖15中,多值單元對于子對象152語言 en名字 CA對于子對象153語言 IN名字 CATS被表示成企業(yè)實體151的子對象152,153??梢詻]有子對象,也可以有更多的子對象。
另一個要解決的問題涉及以高效方式表示涉及企業(yè)服務(wù)(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。
根據(jù)本發(fā)明的實施例,通過將唯一字段表示為對象的屬性并且將重復(fù)單元表示為子對象來解決此問題。
可以以至少兩個方式實現(xiàn)企業(yè)服務(wù)。第一個方式是企業(yè)服務(wù)表示企業(yè)實體提供的、可通過一或多個訪問路徑得到的單個概念性服務(wù),其中每個訪問路途由綁定模板表示。第二個方式是企業(yè)服務(wù)作為服務(wù)的分組機制,其中在綁定模板層次劃分為各個服務(wù)。在任一情況下,在UDDI規(guī)范中定義了數(shù)據(jù)字段。
企業(yè)服務(wù)的單元是企業(yè)和服務(wù)關(guān)鍵字。企業(yè)關(guān)鍵字指定擁有服務(wù)的企業(yè)實體。這不必是在其下進(jìn)行發(fā)現(xiàn)的企業(yè)實體。通過服務(wù)投影可以在若干企業(yè)實體下面發(fā)現(xiàn)單個服務(wù)。服務(wù)關(guān)鍵字是整個UDDI數(shù)據(jù)庫中服務(wù)的唯一標(biāo)識符。兩個關(guān)鍵字被表示成串。
set object-class uddiObjectClass403={#企業(yè)
name=euBusinessServicesubclass-of topmust-containeuBusinessServiceKey,euParentBusinessKey};沒有企業(yè)服務(wù)對象的可選內(nèi)容。所有其它內(nèi)容包括可能的重復(fù)單元,所以被表示成子對象。企業(yè)服務(wù)的潛在子對象是綁定模板(見下文);名字(為排序而加鍵值標(biāo)識、包含名字串和語言代碼的對象);描述(為排序而加鍵值標(biāo)識、包含描述串和語言代碼的對象);和標(biāo)記為類別信息的鍵值標(biāo)識引用。
例如,企業(yè)服務(wù)對象可以是euBusinessServiceKey=4567890a-4567-4567-4567-4567890abcdeeuParentBusinessKey=34567890-3456-3456-3456-34567890abcd注意,企業(yè)服務(wù)對象的大部分明顯內(nèi)容實際被存儲在作為企業(yè)服務(wù)對象的直接子對象的對象中。
盡管圖15根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子,然而它同樣圖解了根據(jù)本發(fā)明實施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示企業(yè)服務(wù)中相對復(fù)雜對象的例子。圖15的企業(yè)實體151同樣適用于企業(yè)服務(wù),其中企業(yè)服務(wù)的多值單元被表示成企業(yè)服務(wù)151的子對象152,153??梢詻]有子對象,也可以有更多的子對象。
另一個問題涉及以高效方式表示涉及綁定模板(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實施例,通過將唯一字段表示為對象的屬性并且將重復(fù)單元表示為子對象來解決此問題。
綁定模板表示可以訪問具體服務(wù)的方式。唯一需要的綁定模板的單元是其關(guān)鍵字,和它應(yīng)用到的服務(wù)的關(guān)鍵字。可選單元可以包含接入點或駐留重定向器(對象應(yīng)當(dāng)確切具有其中的一個)。如果提供接入點,則也應(yīng)當(dāng)提供接入點類型。
set object-class uddiObjectClass404={#綁定模板name=euBindingTemplatesubclass-of topmust-containeuBindingTemplateKeymay-containeuParentServiceKey,euHostingRedirector,euAccessPoint,euAccessPointType};綁定模板的可能子對象是TModel實例信息(見下文);和描述(為排序而加鍵值標(biāo)識、包含描述串和語言代碼的對象)。
綁定模板的例子可以是euBindingTemplateKey=567890ab-5678-5678-5678-567890abcdefeuParentServiceKey=4567890a-4567-4567-4567-4567890abcdeeuAccessPoint=http//www.rsps.com.au/wsepeuAccessPointType=http.
再次地,盡管圖1 5根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子,然而它同樣圖解了根據(jù)本發(fā)明實施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示綁定模板中相對復(fù)雜對象的例子。圖15的企業(yè)實體151同樣適用于綁定模板,其中綁定模板的多值單元被表示成綁定模板151的子對象152,153。可以沒有子對象,也可以有更多的子對象。
另一個問題涉及以高效方式表示涉及TModel(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實施例,通過將唯一字段表示為對象的屬性并且將重復(fù)單元表示為子對象來解決此問題。
TModel表示一個思路。該思路可以是例如分類系統(tǒng),從而需要指定可以確認(rèn)的值。它也可以是數(shù)據(jù)通信協(xié)議規(guī)范。TModel是靈活和強力的概念,并且以UDDI以能夠精確查詢的方式表示復(fù)雜數(shù)據(jù)的能力為中心。
唯一需要的TModel對象的單元是TModel關(guān)鍵字和名字。這些被表示成串。
TModel對象的可選單元是授權(quán)名字,概述URL(概述文檔對象的部分),用戶關(guān)鍵字和隱藏標(biāo)記。
隱藏標(biāo)記是TModel的處理的單元。隱藏標(biāo)記是如何處理deleteTModel調(diào)用。當(dāng)TModel被″刪除″時,隱藏標(biāo)記被加到對象中。這意味著不會向findTModel調(diào)用返回對象,但是可被getTModel調(diào)用訪問。
set object-class uddiObjectClass405={#tmodel-對概念的引用name=euTModelsubclass-of topmust-containeuTModeIKey,euTModeiNamemay-containeuAuthorizedName,euOperator,euOverviewURL,euParentUserKey,euHidden};可能的子對象是描述(為排序而加鍵值標(biāo)識、包含描述串和語言代碼的對象);標(biāo)記為類別或標(biāo)識符信息的鍵值標(biāo)識引用;和概述文檔描述(為排序而加鍵值標(biāo)識、包含描述串和語言代碼的對象)。
TModel的例子可以是
euTModelKey=uuid67890abc-6789-6789-6789-67890abcdef1euTModeiName=Corporate QA PolicyeuOverviewURL=http//www.rsps.com.au/policy/qa.htmleuParentUserKey=23456789-2345-2345-2345-234567890abc再次地,盡管圖15根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子,然而它同樣圖解了根據(jù)本發(fā)明實施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示TModel中相對復(fù)雜對象的例子。圖15的企業(yè)實體151同樣適用于TModel,其中TModel的多值單元被表示成TModel151的子對象152,153??梢詻]有子對象,也可以有更多的子對象。
另一個問題涉及以高效方式表示涉及發(fā)布者聲明(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。
根據(jù)本發(fā)明的實施例,通過將唯一字段表示為對象的屬性并且將輔助類用于所需關(guān)系鍵值標(biāo)識引用來解決此問題。
發(fā)布者聲明是表示2個企業(yè)實體之間的關(guān)系的對象。
發(fā)布者聲明的所需單元是其關(guān)鍵字,到達(dá)和來自企業(yè)(to andfrom business)和用戶關(guān)鍵字,狀態(tài)和關(guān)系。關(guān)系被指定為鍵值標(biāo)識引用,并且被存儲為發(fā)布者聲明項的輔助類。狀態(tài)被存儲為串,但是從完成狀態(tài)對象提出其可能的值。所有關(guān)鍵字被表示成串。
set object-class uddiObjectClass406={#發(fā)布者聲明-兩個企業(yè)之間的關(guān)系name=euPublisherAssertionsubclass-of topmust-containeuPublisherAssertionKey,euFromBusinessKey,euFromUserKey,euToBusinesKey,euToUserKey,
euPublisherAssertionStatus}在發(fā)布者聲明中沒有可選內(nèi)容,并且沒有子對象。
發(fā)布者聲明的例子可以是euPublisherAssertionKey=7890abcd-7890-7890-7890-7890abcdef12euFromBusinessKey=34567890-3456-3456-3456-34567890abcdeuFromUserKey=23456789-2345-2345-2345-234567890abceuToBusinessKey=09876543-6543-6543-6543-dcba09876543euToUserKey=98765432-5432-5432-5432-cba098765432euPublisherAssertionStatus=statuscomplete注意,會存在與這個項相關(guān)的輔助類;它會具有對象類euPublisherAssertionRelationshipKeyedReference,并且會指定在所命名的2個企業(yè)實體之間聲明的關(guān)系。一個例子可以是euPublisherAssertionTModel=uuid807A2C6A-EE22-470D-ADC7-E0424A337C03euPublisherAssertionKeyName=wholly-owned subsidiaryeuPublisherAssertionKeyValue=parent-child另一個問題涉及以高效方式表示涉及鍵值標(biāo)識引用(UDDI標(biāo)準(zhǔn)中描述的對象類)的數(shù)據(jù)。能夠高效搜索鍵值標(biāo)識引用的特定集合的需要使得這個更加復(fù)雜例如企業(yè)實體上的類別包。
根據(jù)本發(fā)明的實施例,通過建立表示鍵值標(biāo)識引用的抽象基類并且針對每個期望集合將分為子類來解決這個問題。集合在目錄中不具有表示。例如,它們的存在不超過相同子類的一組鍵值標(biāo)識引用,從而作為相同對象的子對象存在。例如,企業(yè)實體的類別包是類euBusinessEntityCategoryKeyedReference的對象,其作為指定企業(yè)實體的子對象。注意,企業(yè)實體對象能夠具有作為子對象的若干鍵值標(biāo)識引用對象,其中只有其對象類清楚哪些是類別包的一部分,哪些是標(biāo)識符包的一部分。
在UDDI數(shù)據(jù)模型內(nèi)的若干位置使用鍵值標(biāo)識引用。它們包含TModel關(guān)鍵字,鍵名和鍵值。鍵值標(biāo)識引用的2個用途是類別包和標(biāo)識符包。這些包是鍵值標(biāo)識引用的集合,并且對于搜索是重要的。如果這些包通過包含無差別鍵值標(biāo)識引用的對象來表示,則可能相當(dāng)難以實現(xiàn)高效搜索。這就是實現(xiàn)鍵值標(biāo)識引用的若干子類的原因。通過類euBusinessEntityCategoryKeyedReference的一或多個子對象表示企業(yè)實體上的類別包。這使得易于用其類別包中的指定鍵值標(biāo)識引用實現(xiàn)對企業(yè)實體的高效搜索。
下面的例子示出如上所述的抽象類和導(dǎo)出類之一euBusinessEntityCategoryKeyedReference。注意,從抽象類繼承針對鍵值標(biāo)識引用的關(guān)鍵字,而TModel關(guān)鍵字,鍵名和鍵值全部在導(dǎo)出類中指定,所以它們可以具有用于搜索的有區(qū)別的名字。
set object-class uddiObjectClass201={#作為所有鍵值標(biāo)識引用的父節(jié)點的抽象類name=euKeyedReferencesubclass-of topmust-containeuKeyedReferenceKey};set object-class uddiObjectCalss301={#企業(yè)實體類別鍵值標(biāo)識引用-集合構(gòu)成類別包name=euBusinessEntityCategoryKeyedReferencesubclass-of euKeyedReferencemust-containeuBusinessEntityCategoryTModel,euBusinessEntityCategoryKeyName,euBusinessEntityCategoryKeyValue};聯(lián)系是復(fù)雜對象,表示各種信息。非常類似于企業(yè)實體,聯(lián)系保存各種復(fù)合重復(fù)單元,從而有必要使用子對象類。
直接作為聯(lián)系對象的一部分的僅有數(shù)據(jù)單元是關(guān)鍵字,和聯(lián)系表示的人員或角色的名字。存在可選的使用類型。
所有其它的可能單元是聯(lián)系對象的子對象。這些是地址(地址行對象的排序列表的父對象,每個具有關(guān)鍵字,使用類型,排序代碼和TModel關(guān)鍵字);電話(電話號碼加上使用類型);電子郵件(電子郵件地址加上使用類型);和描述(描述串加上語言代碼)。
再次地,盡管圖15根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子,然而它同樣圖解了根據(jù)本發(fā)明實施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示聯(lián)系對象中相對復(fù)雜對象的例子。圖15的企業(yè)實體151同樣適用于聯(lián)系對象,其中聯(lián)系對象的多值單元被表示成聯(lián)系對象151的子對象152,153??梢詻]有子對象,也可以有更多的子對象。
另一個問題涉及以高效方式表示名字和描述(UDDI標(biāo)準(zhǔn)中指定),以及允許快速搜索特定類型的名字或描述。
根據(jù)本發(fā)明的實施例,系統(tǒng)建立抽象基類以表示名字,并且建立另一個抽象基類以表示描述,而且針對每個期望類型將其劃分子類。當(dāng)尋找特定類型的名字(例如企業(yè)實體名字)時搜索子類的屬性,并且當(dāng)尋找任何名字時搜索抽象類。
若干主要對象(企業(yè)實體,企業(yè)服務(wù)等等)具有多個名字和描述的選項。其原因是多重的。通過多個名字得知企業(yè)并不是不常見的,其中或許有一個正式名字,一或多個非正式名字。此外,企業(yè)可以使用不同語言的不同名字。例如,名字的翻譯不佳并不是不常見的現(xiàn)象。例如,計算機公司Fujitsu在說英語的國家使用名字Facom許多年。在具有多字符集的語言中問題會更加惡化。日本公司的名字會具有一個片假名版本,和另一個平假名版本。
基于這些原因和其它原因,對于一個單獨的對象,名字和描述對象會出現(xiàn)多次。每個實例被標(biāo)記上語言代碼。在UDDI版本3中可以有具有相同語言代碼的多個實例(這在版本2中是不允許的)。
發(fā)現(xiàn)限定符加劇了混亂。如上所述,UDDI搜索需要支持大小寫敏感和大小寫不敏感搜索,并且這最好通過在X.500目錄中存儲數(shù)據(jù)兩次來處理。
下面的例子示出用于企業(yè)實體的名字集合的抽象類和導(dǎo)出類之一euBusinessEntityNameset object-class uddiObjectClass202={#作為所有名字的父節(jié)點的抽象類name=euNamesubclass-of topmust-containeuNameKeymay-containeuLanguage};set object-class uddiObjectClass331={#企業(yè)實體的名字name=euBusinessEntityNamesubclass-of euNamemust-containeuBusinessEntityNameValue,euBusinessEntityNameValueiC#從euName繼承euNameKey和euLanguage};注意,euBusinessEntityNameValue是包含名字的大小寫敏感版本的屬性;而euBusinessEntityNameValuelC是標(biāo)記為″忽略大小寫″的版本,于是是大小寫不敏感的。從抽象類繼承的euNameKey字段被用來控制名字的排序,并且提供唯一名字屬性。
名字對象的例子可以是euNameKey=890abcde-890a-890a-890a-890abcdef123
euLanguage=ENeuBusinessEntityNameValue=McKenna′s Validation SystemseuBusinessEntityNameValuelC=McKenna′s Validation Systems再次地,盡管圖15根據(jù)本發(fā)明實施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實體中相對復(fù)雜對象的例子,然而它同樣圖解了根據(jù)本發(fā)明實施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示抽象類中相對復(fù)雜對象的例子。圖15的企業(yè)實體151同樣適用于抽象類,其中綁定模板的多值單元被表示成抽象類151的子對象152,153??梢詻]有子對象,也可以有更多的子對象。
另一個問題涉及建立滿足只允許用戶改變在其控制下的那些企業(yè)實體的要求的高效實現(xiàn)。根據(jù)本發(fā)明的實施例,通過使受用戶控制的企業(yè)實體作為用戶對象的子對象來實現(xiàn)此目的。這使得安全性更加容易實現(xiàn)。
保證發(fā)布用戶只在其擁有的信息之后才被允許會是重要的。通過各種設(shè)計可以達(dá)到此目的。然而,優(yōu)化設(shè)計使得立即清楚用戶是否被授權(quán)發(fā)布項目指定用戶控制的所有數(shù)據(jù)均位于該用戶的子樹中。
這個設(shè)計決策對于方便訪問為整體的企業(yè)實體沒有影響,因為能夠從層次結(jié)構(gòu)中的用戶層之上執(zhí)行對企業(yè)實體的所有查詢,而無需損失一般性或性能。
另一個問題涉及建立發(fā)布者聲明的高效實現(xiàn),尤其是對于findRelatedBusiness方法的實現(xiàn)。根據(jù)本發(fā)明的實施例,通過使發(fā)布者聲明與企業(yè)對象的企業(yè)子對象相關(guān)來實現(xiàn)此目的。這使得不需要針對該準(zhǔn)則進(jìn)行搜索。
發(fā)布者聲明的一個主要用途在于find RelatedBusinesses查詢。這個查詢指定特定企業(yè)實體,并且請求有關(guān)通過完整發(fā)布者聲明與該實體相關(guān)的所有企業(yè)實體的信息。通過將發(fā)布者聲明放置在其關(guān)聯(lián)到的企業(yè)實體下面的層次結(jié)構(gòu),這個查詢得到簡化和加速。這具有增加一致性的額外好處。當(dāng)刪除企業(yè)實體時,隨之刪除所有相關(guān)發(fā)布者聲明(現(xiàn)在無關(guān))。
另一個問題涉及建立滿足只允許用戶改變在其控制下的那些TModel的要求的高效實現(xiàn)。根據(jù)本發(fā)明的實施例,系統(tǒng)使得由用戶定義的TModel作為用戶對象的子對象。這使得安全性易于實現(xiàn)。
出于類似于導(dǎo)致將企業(yè)實體放置在用戶項下面的原因的原因,將用戶定義的TModel放置在定義它們的用戶的用戶項下面是恰當(dāng)?shù)?。對查找TModel沒有不利影響,其原因在于,由于所有TModel被唯一命名,能夠通過單索引訪問來找到它們。
另一個問題涉及通過關(guān)系實現(xiàn)發(fā)布者聲明的高效搜索。根據(jù)本發(fā)明的實施例,通過使關(guān)系鍵值標(biāo)識引用作為發(fā)布者聲明項的輔助類來實現(xiàn)此目的。如果鍵值標(biāo)識引用是子對象(一個實現(xiàn)),則不能以同樣的效率對其進(jìn)行搜索,并且對關(guān)系的搜索不能與對發(fā)布者聲明內(nèi)容的搜索,例如關(guān)于狀態(tài)的(關(guān)鍵)過濾器(僅考慮完整聲明)相結(jié)合。
X.500模式系統(tǒng)可能不支持包含作為數(shù)據(jù)單元的其它對象類的對象類的構(gòu)造。例如,鍵值標(biāo)識引用不能是發(fā)布者聲明的數(shù)據(jù)單元。可以使鍵值標(biāo)識引用作為發(fā)布者聲明的子對象,但是這不利于引用鍵值標(biāo)識引用的內(nèi)容的高效搜索的構(gòu)造。
使鍵值標(biāo)識引用作為發(fā)布者聲明項的輔助類是此問題的高效解決方案。于是能夠?qū)︽I值標(biāo)識引用的內(nèi)容進(jìn)行搜索,就象它是聲明的一部分那樣。
如上所述,發(fā)布者聲明的例子可以是euPublisherAssertionKey=7890abcd-7890-7890-7890-7890abcdef12euFromBusinessKey=34567890-3456-3456-3456-34567890abcdeuFromUserKey=23456789-2345-2345-2345-234567890abceuToBusinessKey=09876543-6543-6543-6543-dcbaO9876543euToUserKey=98765432-5432-5432-5432-cbaO98765432euPublisherAssertionStatus=statuscompleteeuPublisherAssertionTModel=uuid807A2C6A-EE22-470D-ADC7-E0424A337C03
euPublisherAssertionKeyName=wholly-owned subsidiaryeuPublisherAssertionKeyValue=parent-child輔助對象類為euPublisherAssertionKeyReference,并且上面列出的最后三個屬性是該類的數(shù)據(jù)元素。
根據(jù)本發(fā)明的實施例,諸如Computer Associates的eTrustTM的目錄可以被用來實現(xiàn)理想的企業(yè)UDDI注冊中心平臺。作為完全符合LDAPv3,X.500電子目錄的eTrust目錄可以被用來支持UDDI WEB服務(wù)實現(xiàn)?!甧Trust’目錄允許UDDI實現(xiàn)影響到已經(jīng)在大規(guī)模業(yè)務(wù)關(guān)鍵級目錄服務(wù)應(yīng)用中得到證明的高度成熟的目錄解決方案。
‘eTrust’有許多獨特的特性,使得其在作為建立UDDI注冊中心的平臺方面極有吸引力。其中一些包含訪問控制策略,角色,安全代理,相互認(rèn)證,分布式認(rèn)證,分布式SSL證書主題驗證和網(wǎng)絡(luò)地址確認(rèn);分布和路由能力,包含并行分布式搜索,負(fù)載分擔(dān),查詢流和最短路徑路由;多主復(fù)制模式(multi-master replication scheme),其將基于應(yīng)答的機制(稱為多寫(multi-write))的速度和效率與基于狀態(tài)的恢復(fù)和調(diào)節(jié)技術(shù)結(jié)合起來;可用性特性,包含數(shù)據(jù)庫熱切換,網(wǎng)絡(luò)故障恢復(fù)和目錄系統(tǒng)代理(DSA)故障恢復(fù);被認(rèn)為是快速的高速緩存設(shè)計;和部署特性,包含動態(tài)配置(數(shù)據(jù)類型,模式規(guī)則,安全,知識等等),無限制的數(shù)據(jù)長度,一般信息完整性規(guī)則,廣泛的管理控制和交互式命令控制臺。
eTrust目錄提供得到證明的X.500目錄解決方案。在其得到證明的基礎(chǔ)上可實現(xiàn)UDDI語義橋,以允許建立完全符合標(biāo)準(zhǔn)的UDDI注冊中心。由于基礎(chǔ)目錄解決方案的能力,這里公開的實施例可以實現(xiàn)靈活的安全性,分布和可管理性,而不必改變或擴展現(xiàn)有UDDI標(biāo)準(zhǔn)。
本實施例的一個問題涉及如何映射在目錄的分離部分中存儲的實體之間的關(guān)系。
雖然UDDI數(shù)據(jù)結(jié)構(gòu)主要是層次化的,然而在不同對象的交叉關(guān)系方面會存在問題。
主要有兩類關(guān)系,即替代名字(alternative names)和交叉關(guān)系(cross relationship)。根據(jù)本發(fā)明的實施例,通過利用別名的概念來實現(xiàn)替代名字,從而解決該問題。這基本上具有將外部實體‘連接’作為主實體的虛擬子實體的效果。
本實施例利用唯一關(guān)鍵字解決交叉關(guān)系的問題。這基本上具有建立相當(dāng)類似于RDBMS技術(shù)的主/外鍵系統(tǒng)的‘關(guān)系指針’,以模擬層次目錄系統(tǒng)內(nèi)不相交子樹之間存在的數(shù)據(jù)實體之間的關(guān)系的效果。
現(xiàn)在描述基于本發(fā)明實施例的別名的使用。通過UDDI企業(yè)服務(wù)投影的實現(xiàn)可最清楚地說明第一種情形。企業(yè)服務(wù)投影實際上是企業(yè)服務(wù)的替代名字。企業(yè)服務(wù)投影是看上去屬于企業(yè)A,但實際上由企業(yè)B擁有和定義的企業(yè)服務(wù)。
參照圖5,企業(yè)服務(wù)51,即企業(yè)A所擁有的服務(wù)看上去也屬于企業(yè)B。企業(yè)A對企業(yè)服務(wù)51作出的任何改變均會反映在企業(yè)B下面出現(xiàn)的投影的服務(wù)中。類似地,如果企業(yè)服務(wù)51被從注冊中心中刪除,則它不再出現(xiàn)在企業(yè)A和企業(yè)B下面。另外,企業(yè)實體B不可以編輯或改變企業(yè)服務(wù)51。為了編輯和所有其它發(fā)布目的,只有企業(yè)A必須訪問企業(yè)服務(wù)51。
目錄別名系統(tǒng)可以被用來實現(xiàn)這個效果。企業(yè)服務(wù)51的別名被加到企業(yè)實體B中。該別名對于目錄服務(wù)器是特殊的標(biāo)記,實際告知‘當(dāng)某方查看此別名時,向其出示在此的這個其它項’。
這意味著當(dāng)編輯原始服務(wù)時,改變在投影中也是可見的。如果目錄系統(tǒng)支持別名完整性(eTrust目錄便是如此),在服務(wù)被刪除的情況下,投影也會被自動清除。
另外,目錄服務(wù)器可以被配置成當(dāng)其在每個父對象下面被搜索一次時,將投影的企業(yè)服務(wù)顯示再次。當(dāng)進(jìn)行需要解析企業(yè)服務(wù)的父對象的搜索時,這是有用的。
某些情況下需要目錄層次結(jié)構(gòu)的不相交部分中的對象保持關(guān)系。
這個的一個例子是綁定模板和TModel之間。在整個UDDI中TModel被用于各種目的。它們是分類關(guān)鍵字,搜索標(biāo)識符,(UDDI)關(guān)系描述符,以及在這個實例中的技術(shù)規(guī)范‘指紋(fingerprints)’?!B接’到綁定模板的TModel描述綁定模板(參見圖8)遵從的技術(shù)規(guī)范。例如,發(fā)布者可以連接一個聲明其綁定模板遵從SOAP 1.1標(biāo)準(zhǔn)的TModel。
注冊中心通常包含有限的TModel集合,其中的許多TModel會被數(shù)百或甚至數(shù)千綁定模板項引用。在某些情況下,注冊中心會返回任何‘連接’的TModel的細(xì)節(jié)和綁定模板的細(xì)節(jié)。
根據(jù)本發(fā)明的這個實施例,可以適當(dāng)?shù)匦薷暮蛻?yīng)用例如關(guān)系數(shù)據(jù)庫系統(tǒng)中使用的主/外鍵系統(tǒng)。注冊中心中存儲的每個TModel具有其自身的唯一(主)鍵。綁定模板通過增加與所需TModel的唯一鍵匹配的本地(外)鍵來引用TModel。圖7圖解了這個的例子。如果需要用綁定模板返回TModel數(shù)據(jù),則服務(wù)器可以查找有關(guān)的TModel。
圖6示出了綁定模板和TModel之間的關(guān)系。
圖7示出了TModel關(guān)鍵字如何建立兩個實體之間的關(guān)系。
發(fā)布者聲明是UDDI數(shù)據(jù)庫的重要元素。如上所述,它為用戶提供發(fā)現(xiàn)與有關(guān)企業(yè)實體相關(guān)的企業(yè)實體,以及它們?nèi)绾蜗嚓P(guān)的能力。
發(fā)布者聲明被設(shè)計成防止濫用,其中僅當(dāng)所涉及的兩個企業(yè)實體的所有者已經(jīng)聲明關(guān)系時,所聲明的關(guān)系才變得可見。這種保護(hù)的代價是使得實現(xiàn)復(fù)雜,并且需要精心的設(shè)計以避免性能惡化。
一個問題是完整性。發(fā)布者聲明比任何其它UDDI構(gòu)造具有更加復(fù)雜的生命周期。當(dāng)企業(yè)實體的所有者作出關(guān)于該企業(yè)及其與另一企業(yè)實體的關(guān)系的聲明時,發(fā)布者聲明便開始存在。另一企業(yè)實體的所有者可以請求狀態(tài)報告,并且發(fā)現(xiàn)已經(jīng)作出哪些關(guān)于其企業(yè)的聲明,或者它們被通知排除(out-of-band)。在任一情況下,另一企業(yè)實體的所有者可以選擇對兩個企業(yè)實體之間的關(guān)系作出匹配的聲明。此時,聲明是完整的,并且對調(diào)用findRefatedBusinesses的用戶可見??梢孕薷幕騽h除一或兩個聲明,并且聲明再次變得不完整,而且應(yīng)當(dāng)不再可見。另外,任一企業(yè)實體的刪除應(yīng)當(dāng)立即清除聲明。
可以通過保持聲明完整性的方式來管理發(fā)布者聲明對象。
期望企業(yè)實體的所有者能夠作出(或清除)關(guān)于該所有者控制的企業(yè)實體的聲明。
本發(fā)明的實施例基于這樣的假設(shè),即UDDI數(shù)據(jù)庫是“以讀為主”的存儲,主要用于X.500目錄。為此,優(yōu)化設(shè)計以得到更好的讀取性能,甚至以加重寫入的負(fù)載為代價。
被稱作發(fā)布者聲明的對象類被設(shè)計成保存超過UDDI標(biāo)準(zhǔn)所需的數(shù)據(jù),因為期望優(yōu)化搜索性能。該設(shè)計引入了操作屬性,其定義了發(fā)布者聲明狀態(tài)。在向目錄寫入時確定聲明的狀態(tài),并且通過這種方式,不必每當(dāng)執(zhí)行搜索時確定狀態(tài)。
本實施例也使用用戶關(guān)鍵字形式的指針。當(dāng)發(fā)布者聲明被寫入目錄時,用于“到達(dá)”和“來自”企業(yè)的用戶關(guān)鍵字被確定和寫入對象中。這簡化了getAssertionStatusReport查詢,因為產(chǎn)生這樣的報告只需要搜索包含正產(chǎn)生報告的人的用戶關(guān)鍵字的發(fā)布者聲明。
相反,如果有必要查詢用戶下面的所有企業(yè)關(guān)鍵字,以查找包含這些企業(yè)關(guān)鍵字的發(fā)布者聲明,則需要大量處理以產(chǎn)生報告。
發(fā)布者聲明的一個通常的用途是發(fā)現(xiàn)那些與指定企業(yè)‘有關(guān)’的企業(yè)。為提供該查詢的良好性能,與企業(yè)有關(guān)的發(fā)布者聲明被放置為該企業(yè)的子節(jié)點。
另外,在聲明中將每個聲明的狀態(tài)記錄為操作屬性。這使得能夠只查詢位于有關(guān)公司下面的具有完整狀態(tài)的發(fā)布者聲明。這簡化了findRelatedBusinesses的搜索,因為搜索會只檢索那些完整的聲明。
為簡化安全性,用戶控制的所有企業(yè)及其發(fā)布者聲明可以是該用戶的帳戶項下面的子節(jié)點。這種實現(xiàn)通過只允許用戶訪問該用戶的帳戶項下面的子樹來實施訪問控制。
注意,由UDDI實現(xiàn)管理表示狀態(tài)的操作屬性。當(dāng)用戶發(fā)現(xiàn)已經(jīng)由另一個已聲明的企業(yè)做出的聲明時,UDDI實現(xiàn)會更新其它聲明的狀態(tài),所述其它聲明是由其它企業(yè)的用戶控制的另一個子樹。訪問控制允許這樣。
作為存儲兩個發(fā)布者聲明對象的可選實施例,在所涉及的兩個企業(yè)實體的每個下面均有一個,在其自身的子樹中提供單個發(fā)布者聲明對象。例如,可以在數(shù)據(jù)庫對象下面提供發(fā)布者聲明子樹。當(dāng)在這種情況下最初存儲聲明時,為其指定不完整狀態(tài)(例如,tokeyincomplete或fromkeyincomplete,這取決于哪一方作出聲明)。如果由互補的用戶作出發(fā)布者聲明,則狀態(tài)被改變?yōu)橥暾?。如果二者之一刪除發(fā)布者聲明,則狀態(tài)被變回為不完整。如果雙方均刪除發(fā)布者聲明,則發(fā)布者聲明對象被刪除。有利地,這導(dǎo)致只有一個聲明拷貝,并且多數(shù)維護(hù)工作包括修改保存聲明狀態(tài)的單個屬性。
圖12示意性圖解了根據(jù)本發(fā)明實施例的層次結(jié)構(gòu)。該示意解了兩個可選方式,其中發(fā)布者聲明對象被放在企業(yè)實體和/或數(shù)據(jù)庫對象下面。
圖8圖解了請求加入發(fā)布者聲明的方法。在步驟S80,確定請求是否有效。如果無效(否,步驟S80),則請求失敗(步驟S92)。如果請求有效(是,步驟S80),則確定請求是否來自我們的企業(yè)(步驟S82)。如果不是來自我們的企業(yè)(否,步驟S82),則確定其是否到達(dá)我們的企業(yè)(步驟S84)。如果不是到達(dá)我們的企業(yè)(否,步驟S84),則請求失敗(步驟S92)。如果是到達(dá)我們的企業(yè)(是,步驟S84),則確定是否從所有者作出聲明(步驟S86)。如果不是從所有者作出聲明(否,步驟S86),則寫入不完整聲明(步驟S94)。如果從所有者作出聲明(是,步驟S86),則寫入完整聲明(步驟S96)。返回到步驟S82,如果確定請求來自我們的企業(yè)(是,步驟S82),則確定其是否針對我們的企業(yè)(步驟S88)。如果不是針對我們的企業(yè)(否,步驟S88),則確定是否對所有者作出聲明(步驟S90)。如果不是對所有者作出聲明(否,步驟S90),則寫入不完整聲明(步驟S94)。如果步驟S88的結(jié)果為是(針對我們的企業(yè)),或步驟S90的結(jié)果為是(對所有者作出的聲明),則寫入完整聲明(步驟S96)。
下一個問題涉及如何在搜索操作期間優(yōu)化中間搜索結(jié)果集合的構(gòu)造,使得考慮到目錄存儲介質(zhì)的限制,目錄訪問和迭代存儲器內(nèi)操作最少。實際上,可以以任意順序存儲和返回目錄項,并且目錄結(jié)果可能過大以致不能排序。
根據(jù)本發(fā)明的實施例,提供一個面向?qū)ο蟮拇鎯ζ鲀?nèi)數(shù)據(jù)存儲系統(tǒng),該系統(tǒng)與一個按區(qū)別名字對中間結(jié)果進(jìn)行排序的唯一結(jié)構(gòu)排序模式相結(jié)合。這允許一個搜索返回許多不同類型的對象-企業(yè)實體(BusinessEntities),企業(yè)服務(wù)(BusinessServices),等等-并且仍然允許系統(tǒng)容易地構(gòu)造正確的XML結(jié)構(gòu)以向用戶返回數(shù)據(jù)。注意,通過XML進(jìn)行Web服務(wù)交互。
現(xiàn)在說明這個系統(tǒng)的描述。根據(jù)以下層次結(jié)構(gòu)在目錄中提供(部分地)本發(fā)明的UDDI企業(yè)實體和任何子數(shù)據(jù)元素企業(yè)實體●企業(yè)服務(wù)○綁定模板○綁定模板○服務(wù)名字○服務(wù)名字●企業(yè)服務(wù)○綁定模板○綁定模板○服務(wù)名字○服務(wù)名字●企業(yè)名字●企業(yè)名字●企業(yè)描述●企業(yè)描述注意,已經(jīng)結(jié)合本發(fā)明涉及子結(jié)構(gòu)和對象分割的方面說明了服務(wù)名字,企業(yè)名字和企業(yè)描述。
企業(yè)實體檢索代碼根據(jù)所需企業(yè)實體的唯一關(guān)鍵字執(zhí)行目錄子樹搜索。這個搜索將返回找到的項和所有子項。目錄標(biāo)準(zhǔn)不保證返回的項具有任何特定的順序-或者甚至子項緊跟在其父項后面。
因此,檢索代碼接著按照區(qū)別名稱對返回的項進(jìn)行排序。這保證子項將排列在其父項之后,并且能夠容易地區(qū)分父子關(guān)系??梢允褂酶鞣N排序算法。所使用的排序算法應(yīng)當(dāng)在各個項被部分排序的情況下表現(xiàn)出高性能特征。
用于結(jié)構(gòu)構(gòu)造的算法在操作上主要是′深度優(yōu)先、從左到右的樹遍歷′。這在圖論中也稱為′后序遍歷′。
排序的列表被傳遞到新企業(yè)實體對象的構(gòu)造函數(shù)方法。這個對象可以是例如被設(shè)計成表示UDDI企業(yè)實體的面向?qū)ο缶幊虡?gòu)造。企業(yè)實體對象包含根據(jù)最后的項中提供的數(shù)據(jù)′構(gòu)造其自身′的代碼。該代碼迭代地移動通過列表,對每個項作出判決。可以理解,列表中的第一項應(yīng)當(dāng)是企業(yè)實體本身的主項,并且一旦發(fā)現(xiàn)另一個企業(yè)實體,可以理解,構(gòu)造已經(jīng)完成-列表的順序保證了這一點。一旦發(fā)現(xiàn)企業(yè)服務(wù)或其它子項,實例化合適類型的對象,并且將列表和告知從列表中何處開始的指針傳遞到新對象的構(gòu)造函數(shù)。
每個對象基本上包含類似的處理代碼以處理其自身的構(gòu)造,以及將任何子項的構(gòu)造委托給合適的子對象。
通過這種方式,只需進(jìn)行單次目錄搜索,并且以高效方式處理結(jié)果列表,其中每個項只被處理一次。如果列表保持任意順序或以某種其它方式排序,則列表必須經(jīng)過多遍處理,以便根據(jù)結(jié)果項正確地構(gòu)造UDDI層次結(jié)構(gòu)。
將構(gòu)造和列表處理委托給層次結(jié)構(gòu)中的不同編程對象使得處理代碼的長度相當(dāng)小,從而更加高效和更加快速。
圖9圖解了編程構(gòu)造(對象),包含排序項列表的表示。確定在項的列表中是否存在任何其它的項。如果沒有額外的項(否,步驟S100),則過程退出(步驟S118)。如果有額外的項(是,步驟S100),則取出列表中的下一項(步驟S102)。接著確定該項是否具有這個對象類型。如果該項具有這個對象類型(是,步驟S104),則根據(jù)該項設(shè)置對象屬性(步驟S106),并且過程返回到步驟S100。如果不具有這個對象類型(否,步驟S104),則確定是否已經(jīng)處理過具有這個對象類型的項(步驟S108)。如果尚未處理過具有這個對象類型的項(否,步驟S108),則過程返回到步驟S100。如果已經(jīng)處理過具有這個對象類型的項(是,步驟S108),則確定該項是否這個對象的固有部件(例如名字,描述等等)。如果是固有部件(是,步驟S110),則該項被加到對象屬性中,并且可以執(zhí)行額外的處理(步驟S112),過程返回到步驟S100。如果不是固有部件(否,步驟S110),則確定該項是否這個對象的子對象(例如BusinessService是BusinessEntity的子對象)。如果是子對象(是,步驟S114),則系統(tǒng)實例化正確類型的對象,并且將項的列表傳遞到構(gòu)造函數(shù)(步驟S116),過程返回到步驟S100。如果不是子對象(否,步驟S114),則過程返回到步驟S100。
以下的‘實字’例子演示了LDAP目錄可能預(yù)計返回的任意順序的種類。
SearchResultEntryobjectNamebusinessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntitytypebusinessKeyvalue1ba3034aeef738da00eef78599fe0004SearchResultEntryobjectNamedescriptionKey=1ba3034aeef738da00eef786302b0008,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvalueuddiDescription
SearchResultEntryobjectNameserviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceSearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef78970da000d,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceNameSearchResultEntryobjectNamebindingKey=1ba3034aeef738da00eef7899fb7000e,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebindingTemplateSearchResultEntryobjectName
nameKey=1ba3034aeef738da00eef7862fe50007,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntityName列表1-以粗體突出的名字項是位于列表頂端的企業(yè)實體項的葉節(jié)點,并且如果在企業(yè)服務(wù)項和企業(yè)實體的其它分支子節(jié)點之前出現(xiàn),則會有利。然而,它出現(xiàn)在列表的末端,迫使任何處理代碼搜索整個列表以確保已經(jīng)處理企業(yè)實體的所有直接子節(jié)點。
因此,按照根據(jù)本發(fā)明實施例制定的規(guī)則而排序的相同數(shù)據(jù)的一個版本SearchResultEntryobjectNamebusinessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntitytypebusinessKeyvalue1ba3034aeef738da00eef78599fe0004SearchResultEntryobjectNamedescriptionKey=1ba3034aeef738da00eef786302b0008,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributes
typeobjectClassvalueuddiDescriptionSearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef7862fe50007,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntityNameSearchResultEntryobjectNameserviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceSearchResultEntryobjectNamebindingKey=1ba3034aeef738da00eef7899fb7000e,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebindingTemplate
SearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef78970da000d,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceName列表2-以粗體突出的項出現(xiàn)在列表中更合邏輯的位置,并且現(xiàn)在能夠編寫處理代碼以對此加以利用。當(dāng)項的數(shù)量增加到實際服務(wù)器負(fù)載的程度時,處理時間的節(jié)省是顯著的。
以下是本發(fā)明的另一個實施例。
#表示目錄中UDDI數(shù)據(jù)和/或關(guān)系的模式……表達(dá)式100#Computer Associates eTrust UDDI Configuration Schema#Copyright(c)2002 Computer Associates Incset oid-prefix uddiAttributeType=(1.3.6.1.4.1.3327.80.1);set oid-prefix uddiObjectClass=(1.3.6.1.4.1.3327.80.2);set oid-prefix uddiBinding=(1.3.6.1.4.1.3327.80.3);#--------------------#Key attributesset attribute uddiAttributeType201={#在KeyedReference及其所有導(dǎo)出類中使用name=euKeyedReferenceKeysyntax=caselgnoreString
single-valued};set attribute uddiAttributeType202={#在UserAccount中使用name=euUserKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType203={#在BusinessEntity,TModel,可能的其它類中使用name=euParentUserKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType204={#在BusinessEntity中使用name=euBusinessEntityKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType205={#在BusinessService,可能的其它類中使用name=euParentBusinessKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType206={#在BusinessService中使用name=euBusinessServiceKey
syntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType207={#在BindingTemplate,可能的其它類中使用name=euParentServiceKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType208={#在BindingTemplate中使用name=euBindingTemplateKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType209={#在TModel中使用name=euTModelKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType210={#在PublisherAssertion中使用name=euPublisherAssertionKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType211={#在PublisherAssertion中使用
name=euFromBusinessKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType212={#在PublisherAssertion中使用name=euFromUserKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType213={#在PublisherAssertion中使用name=euToBusinessKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType214={#在PublisherAssertion中使用name=euToUserKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType216={#在DiscoveryURL中使用name=euDiscoveryURLKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType217=
{#在Contact中使用name=euContactKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType218={#在Address中使用name=euAddressKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType219={#在Address中使用name=euAddressTModelKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType220={#在AddressLine中使用name=euAddressLineKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType221={#在Phone中使用name=euPhoneKeysyntax=caselgnoreStringsingle-valued};
set attribute uddiAttributeType222={#在Email中使用name=euEmailKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType223={#在Tmodellnstancelnfo中使用name=eulnstanceTModelKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType224={#在Name,和所有導(dǎo)出類中使用name=euNameKeysyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType225={#在Decription,和所有導(dǎo)出類中使用name=euDescriptionKeysyntax=caselgnoreStringsingle-valued};#-----------------------#鍵值標(biāo)識引用中使用的屬性set attribute uddiAttributeType301=
{#在BusinessEntityCategory中使用name=euBusinessEntityCategoryKRTModelsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType302={#在BusinessEntityCategory中使用name=euBusinessEntityCategoryKRKeyNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType303={#在BusinessEntityCategory中使用name=euBusinessEntityCategoryKRKeyValuesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType304={#在BusinessEntityidentifier中使用name=euBusinessEntityldentifierKRTModelsyntax=caseglnoreStringsingle-valued};set attribute uddiAttributeType305={#在BusinessEntityldentifier中使用name=euBusinessEntityidentifierKRKeyNamesyntax=caselgnoreStringsingle-valued};
set attribute uddiAttributeType306={#在BusinessEntityldentifier中使用name=euBusinessEntityldentifierKRKeyValuesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType307={#在BusinessServiceCategory中使用name=euBusinessServiceCategoryKRTModelsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType308={#在BusinessServiceCategory中使用name=euBusinessServiceCategoryKRKeyNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType309={#在BusinessServiceCategory中使用name=euBusinessServiceCategoryKRKeyValuesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType310={#在TModelCategory中使用name=euTModelCategoryKRTModelsyntax=caselgnoreStringsingle-valued
};set attribute uddiAttributeType311={#在TModelCategory中使用name=euTModelCategoryKRKeyNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType312={#在TModelCategory中使用name=euTModelCategoryKRKeyValuesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType313={#在TModelldentifier中使用name=euTModelidentifierKRTModelsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType314={#在TModelidentifier中使用name=euTModelidentifierKRKeyNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType315={#在TModelidentifier中使用name=euTModelidentfiferKRKeyValuesyntax=caselgnoreString
single-valued};set attribute uddiAttributeType316={#在PublisherAssertion中使用name=euPublisherAssertionKRTModelsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType317={#在PublisherAssertion中使用name=euPublisherAssertionKRKeyNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType318={#在PublisherAssertion中使用name=euPublisherAssertionKRKeyValuesyntax=caselgnoreStringsingle-valued};#------------------------#在名字和描述中使用的屬性set attribute uddiAttributeType361={#在企業(yè)實體名字中使用name=euBusinessEntityNameValuesyntax=CaseExactStringsingle-valued
};set attribute uddiAttributeType381={#在企業(yè)實體名字中使用name=euBusinessEntityNameValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType362={#在企業(yè)服務(wù)名字中使用name=euBusinessServiceNameValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType382={#在企業(yè)服務(wù)名字中使用name=euBusinessServiceNameValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType363={#在企業(yè)實體描述中使用name=euBusinessEntityDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType383={#在企業(yè)實體描述中使用name=euBusinessEntityDescriptionValuelCsyntax=caselgnoreString
single-valued};set attribute uddiAttributeType364={#在企業(yè)服務(wù)描述中使用name=euBusinessServiceDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType384={#在企業(yè)服務(wù)描述中使用name=euBusinessServiceDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType365={#在tmodel描述中使用name=euTModelDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType385={#在tmodel描述中使用name=euTModelDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType366={#在tmodel實例信息描述中使用name=eu TModellnstancelnfoDescriptionValuesyntax=CaseExactStringsingle-valued
};set attribute uddiAttributeType386={#在tmodel實例信息描述中使用name=euTModellnstancelnfoDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType367={#在tmodel實例細(xì)節(jié)描述中使用name=euTModeIInstanceDetailsDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType387={#在tmodel實例細(xì)節(jié)描述中使用name=euTModelinstanceDetailsDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType368={#在概述文檔描述中使用name=euOverviewDocDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType388={#在概述文檔描述中使用name=euOverviewDocDescriptionValueiCsyntax=caselgnoreString
single-valued};set attribute uddiAttributeType369={#在綁定模板描述中使用name=euBindingTemplateDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType389={#在綁定模板描述中使用name=euBindingTemplateDescriptionValueICsyntax=caselgnoreStringsingle-valued}-set attribute uddiAttributeType370={#在Contact描述中使用name=euContactDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType390={#在Contact描述中使用name=euContactDescriptionValuelCsyntax=caselgnoreStringsingle-valued};#--------------------#其它屬性
set attribute uddiAttributeType400={#在名字和描述中使用name=euLanguagesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType401={#在數(shù)據(jù)庫中使用name=euRepositoryNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType402={#在UserAccount中使用name=euUserNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType403={#在UserAccount中使用name=euCredentialssyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType404={#在UserAccount中使用name=euAuthorizedNamesyntax=caselgnoreStringsingle-valued
};set attribute uddiAttributeType405={#在UserAccount和TModel中使用name=euHiddensyntax=booleansingle-valued};set attribute uddiAttributeType406={#在企業(yè)實體和tmodel中使用name=euOperatorsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType407={#在Contact中使用name=euContactNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType408={#在discoveryURL,contact,address,phone,email中使用name=euUseTypesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType409={#在phone中使用name=euPhoneNumbersyntax=caselgnoreString
single-valued};set attribute uddiAttributeType419={#在email中使用name=euEmailAddresssyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType411={#在address中使用name=euSortCodesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType412={#在綁定模板中使用name=euHostingRedirectorsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType413={#在綁定模板中使用name=euAccessPointsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType414={#在綁定模板中使用name=euAccessPointType
syntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType415={#在tmodel中使用name=euTModelNamesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType416={#在tmodel中使用name=euOverviewURLsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType417={#在address line中使用name=euAddressLineValuesyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType418={#在tmodel實例信息中使用name=eulnstanceParmssyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType420={#在PublisherAssertion中使用
name=euPublisherAssertionStatussyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType421={#在discovery URL中使用name=euDiscoveryURLValuesyntax=caselgnoreStringsingle-valued};#----------------------#抽象類-不要試圖在目錄中存儲它們!set object-class uddiObjectClass201={#作為所有鍵值標(biāo)識引用的父節(jié)點的抽象類name=euKeyedReferencesubclass-of top kind=abstractmust-containeuKeyedReferenceKey#注意帶索引的引用也應(yīng)包含TModel關(guān)鍵字,關(guān)鍵字名,和關(guān)鍵字#值,每個導(dǎo)出類增加這些,使得它們能夠均具有不同的名字,#以利于搜索這些屬性的標(biāo)準(zhǔn)名字#euXXXTModel#euXXXKeyName#euXXXKeyValue#其中XXX是對象的名字和鍵值標(biāo)識引用的目的};
set object-class uddiObjectClass202={#作為所有名字的父節(jié)點的抽象類name=euNamesubclass-of top kind=abstractmust-containeuNameKeymay-containeuLanguage#注意名字也應(yīng)具有包含名字所有者的串,該串通常#具有euXXXNameValue模式的名字,其中XXX是父對象的名字#這使搜索的效率最大#存在屬性的第二拷貝,其附有IC-這是忽略大小寫的版本};set object-classuddiObjectCalss203={#作為所有描述的父節(jié)點的抽象類name=euDescriptionsubclass-of topkind=abstractmust-containeuDescriptionKeymay-containeuLanguage#注意描述也應(yīng)具有包含描述所有者的串。
#該串通常具有euXXXDescriptionValue模式的名字,#其中XXX是父對象的名字#這使搜索的效率最大#存在屬性的第二拷貝,其附有IC-這是忽略大小寫的版本
};#----------------------#鍵值標(biāo)識引用類型set object-class uddiObjectClass301={#企業(yè)實體類別鍵值標(biāo)識引用-集合構(gòu)成類別包name=euBusinessEntityCategoryKRsubclass-of euKeyedReferencemust-containeuBusinessEntityCategoryKRKeyValuemay-containeuBusinessEntityCategoryKRTModel,euBusinessEntityCategoryKRKeyName};set object-class uddiObjectClass302={#企業(yè)實體標(biāo)識鍵值標(biāo)識引用-集合構(gòu)成標(biāo)識包name=euBusinessEntityidentifierKRsubclass-of euKeyedReferencemust-containeuBusinessEntityldentifierKRKeyValuemay-containeuBusinessEntityldentifierKRTModel,euBusinessEntityldentifierKRKeyName};set object-class uddiObjectClass303={#服務(wù)類別鍵值標(biāo)識引用-集合構(gòu)成類別包name=euBusinessServiceCategoryKRsubclass-of euKeyedReference
must-containeuBusinessServiceCategoryKRKeyValuemay-containeuBusinessServiceCategoryKRTModel,euBusinessServiceCategoryKRKeyName};set object-class uddiObjectClass304={#tmodel類別鍵值標(biāo)識引用-集合構(gòu)成類別包name=euTModelCategoryKRsubclass-of euKeyedReferencemust-containeuTModelCategoryKRKeyValuemay-containeuTModelCategoryKRTModel,euTModelCategoryKRKeyName};set object-class uddiObjectClass305={#tmodel標(biāo)識鍵值標(biāo)識引用-集合構(gòu)成標(biāo)識包name=euTModelidentifierKRsubclass-of euKeyedReferencemust-containeuTModelldentifierKRKeyValuemay-containeuTModelIdentifierKRTModel,euTModelIdentifierKRKeyName};set object-class uddiObj ctClass306={#發(fā)布者聲明鍵值標(biāo)識引用-用作輔助類以提供關(guān)系name=euPublisherAssertionKR
subclass-of euKeyedReferencekind=auxiliarymust-containeuPublisherAssertionKRKeyValuemay-containeuPublisherAssertionKRTModel,euPublisherAssertionKRKeyName};#-----------------------#名字和描述類型set object-class uddiObjectClass331={#企業(yè)實體的名字name=euBusinessEntityNamesubclass-of euNamemust-containeuBusinessEntityNameValue,euBusinessEntityNameValuelC#從euName繼承euNameKey和euLanguage};set object-class uddiObjectClass332={#企業(yè)服務(wù)的名字name=euBusinessServiceNamesubclass-of euNamemust-containeuBusinessServiceNameValue,euBusinessServiceNameValuelC#從euName繼承euNameKey和euLanguage
};set object-class uddiObjectClass341={#企業(yè)實體的描述name=euBusinessEntityDescriptionsubclass-of euDescriptionmay-containeuBusinessEntityDescriptionValue,euBusinessEntityDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass342={#企業(yè)服務(wù)的描述name=euBusinessServiceDescriptionsubclass-of euDescriptionmay-containeu BusinessServiceDescri ptionValue,euBusinessServiceDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass343={#tmodel的描述name=euTModelDescriptionsubclass-of euDescriptionmay-containeuTModel DescriptionValue,euTModelDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass344=
{#tmodel實例信息對象的描述name=euTModelInstancelnfoDescriptionsubclass-of euDescriptionmay-containeuTModellnstancelnfoDescriptionValue,euTModellnstancelnfoDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass345={#tmodel實例細(xì)節(jié)對象的描述name=euTModeIInstanceDetaiisDescriptionsubclass-of euDescriptionmay-containeuTModellnstanceDetailsDescriptionValue,euTModeIInstanceDetaiIsDescriptionValueIC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass346={#概述文檔對象的描述name=euOverviewDocDescriptionsubclass-of euDescriptionmay-containeu OverviewDocDescriptionValue,eu OverviewDocDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass347={#contact的描述
name=euContactDescription.
subclass-of euDescriptionmay-containeuContactDescriptionValue,euContactDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObj ectClass348={#綁定模板的描述name=euBindingTemplateDescriptionsubclass-of euDescriptionmay-containeuBindingTemplateDescriptionValue,euBindingTemplateDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};#---------------------------#主要對象set object-class uddiObjectClass400={#數(shù)據(jù)庫-可以用于將用戶分成組name=euRepositorysubclass-of topmust-containeuRepositoryName};set object-class uddiObjectClass401={#用戶帳戶-其中隱藏我們有關(guān)用戶的知識
name=euUserAccountsubclass-of topmust-containeu UserKey,eu UserName,euCredentialsmay-containeuAuthorizedName,euHidden#注意這個用戶發(fā)布的所有企業(yè)實體和TModel均被發(fā)現(xiàn)為這個對象的子對象};set object-class uddiObjectClass402={#企業(yè)對象-提供服務(wù)的實體的細(xì)節(jié)name=euBusinessEntitysubclass-of topmust-containeuBusinessEntityKeymay-containeuParentUserKey,euAuthorizedName,euOperator#注意在這個對象的子對象中保存企業(yè)實體的許多屬性,#尤其是可能不止一次出現(xiàn)的屬性};set object-class uddiObjectClass403={#企業(yè)服務(wù)-企業(yè)實體提供的服務(wù)的細(xì)節(jié)name=euBusinessServicesubclass-of top
must-containeuBusinessServiceKeymay-containeuParentBusinessKey#注意這個服務(wù)的所有綁定模板會被發(fā)現(xiàn)為這個服務(wù)的子服務(wù)};set object-class uddiObjectClass404={#綁定模板-如何訪問特定企業(yè)的細(xì)節(jié)name=euBindingTemplatesubclass-of topmust-containeuBindingTemplateKeymay-containeuParentServiceKey,euHostingRedirector,euAccessPoint,euAccessPointType#注意應(yīng)當(dāng)具有駐留重定向器或接入點之一};set object-class uddiObjectClass405={#tmodel-對概念的引用??梢允欠诸惸J剑梢灾皇菍?biāo)準(zhǔn)的引用name=euTModelsubclass-of topmust-containeuTModelKey,euTModeiNamemay-containeuAuthorizedName,
euOperator,euOverviewURL,euParentUserKey,euHidden#注意當(dāng)“刪除”TModel時使用Hidden};set object-class uddiObjectClass406={#發(fā)布者聲明-作出有關(guān)兩個企業(yè)之間的關(guān)系的聲明name=euPublisherAssertionsubclass-of topmust-containeuPublisherAssertionKey,euFromBusinessKey,euFromUserKey,euToBusinessKey,euToUserKey,euPublisherAssertionStatus#注意關(guān)系將被存儲為類型euPublisherAssertionKeyedReference的輔助類#這允許直接搜索輔助類的元素};#------------------#次要對象-多數(shù)為主要對象的子對象,保存重復(fù)數(shù)據(jù)set object-class uddiObjectClass501={#discoveryURL-在企業(yè)實體下面發(fā)現(xiàn)name=euDiscoveryURLsubclass-of top
must-containeuDiscoveryURLKey,euDiscoveryURLValue,euUseType};set object-class uddiObjectClass502={#contact-在企業(yè)實體下面發(fā)現(xiàn)-相當(dāng)復(fù)雜,可能具有許多子對象name=euContactsubclass-of topmust-containeuContactKey,euContactNamemay-containeuUseType};set object-class uddiObjectClass503={#address-在contact下面發(fā)現(xiàn)name=euAddresssubclass-of topmust-containeuAddressKeymay-containeuSortCode,euAddressTModelKey,euUseType};set object-class uddiObjectClass504={#address line-在address下面發(fā)現(xiàn),構(gòu)成各行地址
name=euAddressLinesubclass-oftopmust-containeuAddressLineKey,euAddressLineValue};set object-class uddiObjectClass505={#phone-在contact下面發(fā)現(xiàn)name=euPhonesubclass-oftopmust-containeuPhoneKey,euPhoneNumbermay-containeuUseType};set object-class uddiObjectClass506={#email-在contact下面發(fā)現(xiàn)name=euEmailsubclass-of topmust-containeuEmailKey,euEmailAddressmay-containeuUseType};set object-class uddiObjectClass507={#tmodel實例信息-在綁定模板下面發(fā)現(xiàn)name=euTModellnstancelnfo
subclass-of topmust-containeulnstanceTModelKeymay-containeulnstanceParms,eu OverviewU RL};#-------------------#名字綁定schema set name-binding uddiBinding101={#綁定到最高層子對象name=euRepository-topeuRepository allowable-parent topnamed-by euRepositoryName};schema set name-binding uddiBinding102={{#綁定到最高層子對象name=euUserAccount-topeuUserAccount allowable-parenttop named-by euUserKey};schema set name-binding uddiBinding103={#綁定到euRepositoryname=euUserAccount-euRepositoryeuUserAccount allowable-parent euRepositorynamed-by euUserKey
};schema set name-binding uddiBinding104={#綁定TModel到″頂端″-用于標(biāo)準(zhǔn)TModels(非由用戶發(fā)布)name=euTModel-euRepositoryeuTModel allowable-parent euRepositorynamed-by euTModelKey};schema set name-binding uddiBinding105={#綁定到組織最高層子對象name=euRepository-organizationeuRepository allowable-parent organizationnamed-by euRepositoryName};schema set name-binding uddiBinding106={#綁定發(fā)布者聲明到數(shù)據(jù)庫以允許可選配置name=euPublisherAssertion-euRepositoryeuPublisherAssertion allowable-parent euRepositorynamed-by euPublisherAssertionKey};schema set name-binding uddiBinding107={#綁定數(shù)據(jù)庫層-允許多層數(shù)據(jù)庫結(jié)構(gòu)name=euRepository-euRepositoryeuRepository allowable-parenteuRepositorynamed-by euRepositoryName};schema set name-binding uddiBinding201={#綁定企業(yè)實體到用戶帳戶-第二層name=euBusinessEntity-euUserAccount
euBusinessEntity allowable-parent euUserAccountnamed-by euBusinessEntityKey};schema set name-binding uddibinding202={#綁定tmodel到用戶帳戶-第二層name=euTModel-euUserAccounteuTModel allowable-parent euUserAccountnamed-by euTModelKey};schema set name-binding uddiBinding301={#綁定服務(wù)到企業(yè)-第三層name=euBusinessService-euBusinessEntityeuBusinessService allowable-parent euBusinessEntitynamed-by euBusinessServiceKey};schema set name-binding uddiBinding302={#綁定聯(lián)系到企業(yè)-第三層name=euContact-euBusinessEntityeuContact allowable-parent euBusinessEntitynamed-by euContactKey};schema set name-binding uddiBinding303={#綁定企業(yè)下面的discoveryURLname=euDiscoveryURL-euBusinessEntityeuDiscoveryURL allowable-parenteuBusinessEntitynamed-by euDiscoveryURLKey};schema set name-binding uddiBinding304={#企業(yè)下面的名字
name=euBusinessEntityName-euBusinessEntityeuBusinessEntityName allowable-parent euBusinessEntitynamed-by euNameKey};schema set name-binding uddiBinding305={#企業(yè)下面的描述name=euBusinessEntityDescription-euBusinessEntityeuBusinessEntityDescription allowable-parent euBusinessEntitynamed-by euDescriptionKey};schema set name-binding uddiBinding306={#企業(yè)下面的發(fā)布者聲明name=euPublisherAssertion-euBusinessEntityeuPublisherAssertion allowable-parent euBusinessEntitynamed-by euPu blisherAssertionKey};schema set name-binding uddiBinding307={#企業(yè)實體下面的標(biāo)識name=euBusinessEntityidentifierKR-euBusinessEntityeuBusinessEntityldentifierKRallowable-parenteuBusinessEntitynamed-by euKeyedReferenceKey};schema set name-binding uddiBinding308={#企業(yè)實體下面的類別name=euBusinessEntityCategoryKR-euBusinessEntityeuBusinessEntityCategoryKR allowable-parenteuBusinessEntitynamed-by euKeyedReferenceKey
};schema set name-binding uddiBinding310={#TModel下面的描述name=euTModelDescription-euTModeleuTModel Description allowable-parent euTModelnamed-by euDescriptionKey};schema set name-binding uddiBinding311={#TModel下面的概述URL的描述name=euOverviewDocDescription-euTModeleuOverviewDocDescription allowable-parent euTModelnamed-by euDescriptionKey};schema set name-binding uddiBinding312={#tmodel下面的標(biāo)識name=euTModelIdentifierKR-euTModeleuTModelIdentifierKR allowable-parent euTModelnamed-by euKeyedReferenceKey};schema set name-binding uddiBinding313={#TModel下面的類別name=euTModelCategoryKR-euTModeleuTModelCategoryKR allowable-parent euTModelnamed-by euKeyedReferenceKey};schema set name-binding uddiBinding401={#聯(lián)系下面的地址name=euAddress-euContacteuAddress allowable-parent euContact
named-by euAddressKey};schema set name-binding uddiBinding402={#聯(lián)系下面的電話號name=euPhone-euContacteuPhone allowable-parent euContactnamed-by euPhoneKey};schema set name-binding uddiBinding403={#聯(lián)系下面的emailname=euEmail-euContacteuEmail allowable-parent euContactnamed-by euEmailKey};schema set name-binding uddiBinding404={#聯(lián)系下面的描述name=euContactDescription-euContacteuContactDescription allowable-parent euContactnamed-by euDescriptionKey};schema set name-binding uddiBinding409={#服務(wù)下面的名字name=euBusinessServiceName-euBusinessServiceeuBusinessServiceName allowable-parent euBusinessServicenamed-by euNameKey};schema set name-binding uddiBinding410={#服務(wù)下面的描述name=euBusinessServiceDescription-euBusinessService
euBusinessServiceDescriptionallowable-parenteuBusinessServicenamed-by euDescriptionKey};schema set name-binding uddiBinding411={#服務(wù)下面的類別name=euBusinessServiceCategoryKR-euBusinessServiceeuBusinessServiceCategoryKR allowable-parenteuBusinessServicenamed-by euKeyedReferenceKey};schema set name-binding uddiBinding412={#綁定服務(wù)下面的模板name=euBindingTemplate-euBusinessServiceeuBindingTemplate allowable-parent euBusinessServicenamed-by euBindingTemplateKey};schema set name-binding uddiBinding501={#地址下面的行name=euAddressLine-euAddresseuAddressLine allowable-parent euAddressnamed-by euAddressLineKey};schema set name-binding uddiBinding502={#綁定模板下面的描述name=euBindingTempiateDescription-euBindingTemplateeuBindingTemplateDescriptionallowable-parenteuBindingTemplatenamed-by euDescriptionKey
};schema set name-binding uddiBinding510={#綁定模板下面的tmodel實例信息name=euTModellnstancelnfo-euBindingTemplateeuTModellnstancelnfo allowable-parent euBindingTemplatenamed-by eulnstanceTModelkey};schema set name-binding uddiBinding601={#tmodel實例信息下面的描述name=euTModellnstancelnfoDescription-euTModellnstancelnfoeuTModellnstancelnfoDescriptionallowable-parenteuTModellnstancelnfonamed-by euDescriptionKey};schema set name-binding uddiBinding602={#tmodel實例信息下面的實例細(xì)節(jié)描述name=euTmodellnstanceDetailsDescription-euTModellnstancelnfoeuTmodellnstanceDetailsDescriptionallowable-parenteuTModel Instancel nfonamed-by euDescriptionKey};schema set name-binding uddiBinding603={#tmodel實例信息下面的概述文檔描述name=euOverviewDocDescription-euTModellnstancelnfoeuOverviewDocDescription allowable-parenteuTModelinstanceinfonamed-by euDescriptionKey};
由于能夠在不偏離本發(fā)明的必要特征的實質(zhì)的前提下以各種形式實施本發(fā)明,應(yīng)當(dāng)理解,上述實施例不是為了限制本發(fā)明(除非專門指出),而是應(yīng)當(dāng)在所附權(quán)利要求限定的公開內(nèi)容的實質(zhì)和范圍內(nèi)進(jìn)行廣義的解釋。各種修改和等同方案均應(yīng)被包含在本公開和所附權(quán)利要求的實質(zhì)和范圍內(nèi)。
權(quán)利要求
1.一種為WEB服務(wù)結(jié)構(gòu)中的對象產(chǎn)生關(guān)鍵字的方法,包括確定對象是否具有定義的第一關(guān)鍵字;如果對象具有定義的第一關(guān)鍵字,則為該對象提供定義的第一關(guān)鍵字,并且如果對象不具有定義的第一關(guān)鍵字,則為該對象提供第二關(guān)鍵字。
2.如權(quán)利要求1所述的方法,其中UUID(全局唯一標(biāo)識)算法被用來為對象提供第二關(guān)鍵字。
3.如權(quán)利要求1所述的方法,其中每個關(guān)鍵字是唯一的。
4.如權(quán)利要求1所述的方法,其中所提供的第二關(guān)鍵字是單調(diào)增加的。
5.如權(quán)利要求1所述的方法,其中每個對象具有定義的關(guān)鍵字和第二關(guān)鍵字中的至少一個。
6.一種包含計算機可執(zhí)行代碼的計算機記錄介質(zhì),所述計算機可執(zhí)行代碼用于為WEB服務(wù)結(jié)構(gòu)中的對象產(chǎn)生關(guān)鍵字,包括用于確定對象是否具有定義的第一關(guān)鍵字的代碼;用于在對象具有定義的第一關(guān)鍵字的情況下為該對象提供定義的第一關(guān)鍵字的代碼;和用于在對象不具有定義的第一關(guān)鍵字的情況下為該對象提供第二關(guān)鍵字的代碼。
7.如權(quán)利要求6所述的計算機記錄介質(zhì),其中UUID(全局唯一標(biāo)識)算法被用來為對象提供第二關(guān)鍵字。
8.如權(quán)利要求6所述的計算機記錄介質(zhì),其中每個關(guān)鍵字是唯一的。
9.如權(quán)利要求6所述的計算機記錄介質(zhì),其中所提供的第二關(guān)鍵字是單調(diào)增加的。
10.如權(quán)利要求6所述的計算機記錄介質(zhì),其中每個對象具有定義的關(guān)鍵字和第二關(guān)鍵字中的至少一個。
全文摘要
一種產(chǎn)生WEB服務(wù)方案中對象的關(guān)鍵字的方法包含確定對象是否具有定義的第一關(guān)鍵字,以及如果對象具有定義的第一關(guān)鍵字,則為該對象提供定義的第一關(guān)鍵字,并且如果對象不具有定義的第一關(guān)鍵字,則為該對象提供第二關(guān)鍵字。
文檔編號H04L29/06GK1678993SQ03820308
公開日2005年10月5日 申請日期2003年8月25日 優(yōu)先權(quán)日2002年8月26日
發(fā)明者理查德·哈維, 蒂莫西·本特利 申請人:計算機聯(lián)合思想公司