亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

Web服務(wù)設(shè)備和方法

文檔序號(hào):7866836閱讀:216來(lái)源:國(guó)知局
專利名稱:Web服務(wù)設(shè)備和方法
技術(shù)領(lǐng)域
本發(fā)明通常涉及UDDI注冊(cè)中心和WEB服務(wù),尤其涉及在這樣的服務(wù)的實(shí)際實(shí)施中使用的方法,設(shè)備和系統(tǒng)。
背景技術(shù)
UDDI(統(tǒng)一描述,發(fā)現(xiàn)和集成(Universal Description,Discoveryand Integration))是一組標(biāo)準(zhǔn),其被定義以允許使用WEB服務(wù)的應(yīng)用迅速、容易和動(dòng)態(tài)地彼此交互。UDDI被用來(lái)建立平臺(tái)無(wú)關(guān)的開(kāi)放式框架,用于描述服務(wù),發(fā)現(xiàn)企業(yè)和集成使用因特網(wǎng)的系統(tǒng)服務(wù),并且用于描述工作注冊(cè)中心。參照WEB站點(diǎn)www.uddi.org以了解詳情。
UDDI注冊(cè)中心(UDDI registry)對(duì)利用WEB服務(wù)構(gòu)造的系統(tǒng)提供有價(jià)值的支持。圖1a示意性圖解了基本W(wǎng)EB服務(wù)和UDDI概念。圖1b示意性圖解了WEB服務(wù)環(huán)境的簡(jiǎn)化協(xié)議堆棧。UDDI提供WEB服務(wù)信息的數(shù)據(jù)庫(kù)(repository),并且自身通過(guò)WEB服務(wù)來(lái)提供。
UDDI允許應(yīng)用公開(kāi)其希望如何在WEB上進(jìn)行交互。每個(gè)′WEB服務(wù)′是自描述的、自包含的應(yīng)用邏輯模塊單元,其通過(guò)因特網(wǎng)連接為其它應(yīng)用提供某個(gè)系統(tǒng)功能。應(yīng)用通過(guò)通用的Web協(xié)議和數(shù)據(jù)格式訪問(wèn)WEB服務(wù),但不必關(guān)心如何實(shí)現(xiàn)每個(gè)WEB服務(wù)。WEB服務(wù)能夠與其它WEB服務(wù)混合和匹配以執(zhí)行較大的工作流程或企業(yè)事務(wù)。
UDDI標(biāo)準(zhǔn)描述了被用來(lái)管理WEB服務(wù)類型的說(shuō)明,企業(yè)組織和關(guān)于如何調(diào)用WEB服務(wù)的細(xì)節(jié)的專用數(shù)據(jù)庫(kù)。標(biāo)準(zhǔn)不必規(guī)定應(yīng)當(dāng)如何實(shí)現(xiàn)標(biāo)準(zhǔn),也不必規(guī)定實(shí)現(xiàn)是否應(yīng)當(dāng)包含利用數(shù)據(jù)庫(kù),目錄或任何其他介質(zhì)的存儲(chǔ)。
在負(fù)責(zé)UDDI標(biāo)準(zhǔn)的組織托管的WEB站點(diǎn)(http//www.uddi.org/faqs.html)上有一些常見(jiàn)問(wèn)題解答(FAQ)。這些問(wèn)題之一是″UDDI注冊(cè)中心能夠被建立在LDAP上或基于LDAP嗎?″作為回答,這個(gè)WEB站點(diǎn)公開(kāi)道在UDDI和目錄之間沒(méi)有正式的關(guān)系?!錟DDI規(guī)范沒(méi)有規(guī)定注冊(cè)中心實(shí)現(xiàn)細(xì)節(jié)。UDDI規(guī)范定義了基于XML的數(shù)據(jù)模型和一組SOAP API,以訪問(wèn)和操作該數(shù)據(jù)模型。SOAP API定義了UDDI數(shù)據(jù)庫(kù)所表現(xiàn)出的特性。UDDI實(shí)現(xiàn)能夠建立在LDAP目錄上,只要它符合規(guī)定的特性。到目前為止,所有UDDI實(shí)現(xiàn)均建立在關(guān)系數(shù)據(jù)庫(kù)上?!鍛?yīng)當(dāng)注意,例如X.500和LDAP的目錄技術(shù)是可擴(kuò)展的通用數(shù)據(jù)存儲(chǔ),并且其相關(guān)語(yǔ)言經(jīng)常被用來(lái)管理用戶和資源。它們是非常精心設(shè)計(jì)的技術(shù),得到廣泛采用,并且被認(rèn)為是非常穩(wěn)定和可靠的。
然而,在目錄上實(shí)現(xiàn)UDDI標(biāo)準(zhǔn)(可從www.uddi.org得到)需要解決若干問(wèn)題。UDDI標(biāo)準(zhǔn)留下許多重要的問(wèn)題有待解決,例如●UDDI標(biāo)準(zhǔn)定義了若干對(duì)象,其中一些對(duì)象通過(guò)層次結(jié)構(gòu)相關(guān),但是UDDI沒(méi)有定義全包括的層次結(jié)構(gòu)。例如,企業(yè)服務(wù)對(duì)象會(huì)處于企業(yè)實(shí)體對(duì)象下面,而綁定模板對(duì)象會(huì)處于企業(yè)服務(wù)下面。圖2圖解了這個(gè)層次結(jié)構(gòu)的例子。企業(yè)實(shí)體對(duì)象被表示為21,企業(yè)服務(wù)對(duì)象被表示為22,綁定模板對(duì)象被表示為23。還應(yīng)當(dāng)注意,例如表示為24的TModel對(duì)象在層次上與這些對(duì)象無(wú)關(guān)。還存在例如發(fā)布者聲明(Publisher Assertion)、在層次上沒(méi)有定義的其它概念。
●建立滿足只允許用戶改變?cè)谄淇刂葡碌哪切?duì)象的要求的高效實(shí)現(xiàn),●建立允許UDDI注冊(cè)中心為分布式的高效實(shí)現(xiàn),●建立增強(qiáng)管理特性和搜索與更新的性能的高效實(shí)現(xiàn)。
●如何以相對(duì)高效的方式表示復(fù)雜UDDI對(duì)象。例如,企業(yè)實(shí)體,企業(yè)服務(wù),綁定模板和/或TModel具有復(fù)合的重復(fù)單元。于是這些重復(fù)單元能夠包含進(jìn)一步的重復(fù)單元。例如,企業(yè)實(shí)體可以包含聯(lián)系(contacts),而聯(lián)系可以包含地址。地址可以包含地址行(address line)和電話號(hào)碼。圖13示意性圖解了企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的UDDI概念。企業(yè)實(shí)體對(duì)象131例如包含若干屬性132,例如授權(quán)名字(AuthorizedName),企業(yè)關(guān)鍵字(BusinessKey)和名字(Name)。名字具有一或多個(gè)名字字段133,例如′文本′,或者這可以隱含在′名字′自身中。還有′語(yǔ)言′??梢源嬖谶@些字段133的一或多個(gè)。
●如何對(duì)重復(fù)單元中包含的特定項(xiàng)提供相對(duì)快速的搜索。
●如何在目錄對(duì)象層次結(jié)構(gòu)中表示UDDI信息和要求,●如何以高效方式管理UDDI對(duì)象和所有其相關(guān)信息的刪除,以及●考慮到目錄存儲(chǔ)介質(zhì)的限制,如何優(yōu)化搜索操作期間中間搜索結(jié)果集合的構(gòu)造,使得目錄訪問(wèn)和迭代存儲(chǔ)器內(nèi)(in-memory)操作最小化。實(shí)際上,可以以任意順序存儲(chǔ)和返回目錄項(xiàng),并且目錄結(jié)果可能過(guò)大以致不能排序。
●如何以高效方式表示涉及發(fā)布者聲明的數(shù)據(jù),●如何建立發(fā)布者聲明的高效實(shí)現(xiàn),尤其是對(duì)于findrelatedBusiness方法的實(shí)現(xiàn),●如何通過(guò)關(guān)系實(shí)現(xiàn)發(fā)布者聲明的高效搜索,●如何管理發(fā)布者聲明的有效性,●如何約束由企業(yè)實(shí)體的所有者針對(duì)企業(yè)實(shí)體建立和刪除的聲明。
●如何高效管理UDDI標(biāo)準(zhǔn)中定義的相關(guān)屬性集合,●如何定義屬性和對(duì)象以增強(qiáng)搜索性能。
已經(jīng)提出各種UDDI模式(UDDI Schema)。然而沒(méi)有任何UDDI模式被認(rèn)為解決了至少上述問(wèn)題。例如,一個(gè)模式提供了相對(duì)簡(jiǎn)單的UDDI對(duì)象到目錄對(duì)象的映射,而不必涉及到產(chǎn)生高效商用實(shí)現(xiàn)的復(fù)雜度和優(yōu)化。同樣不清楚在這樣的模式中如何能夠高效實(shí)現(xiàn)若干UDDI服務(wù)(尤其是find_系列的服務(wù))。
例如,圖14示意性圖解了企業(yè)實(shí)體中的相對(duì)復(fù)雜對(duì)象的Novell表示。企業(yè)實(shí)體對(duì)象141包含例如若干屬性142,每個(gè)屬性具有′類型′和′值′。如圖所示,存在具有值′Bill′的授權(quán)名字,具有值′890.obale.890......′的企業(yè)關(guān)鍵字,和具有多值143,144,即en#CAIN#CATS的名字。
UDDI(圖13)和Novell(圖14)的示例性表示不被認(rèn)為是對(duì)于WEB服務(wù)的高效表示。
于是,需要解決上述一般性問(wèn)題以及其它問(wèn)題,以提供一種基于目錄的UDDI的可擴(kuò)展、高效和可靠的實(shí)現(xiàn)。

發(fā)明內(nèi)容
一種用于具有復(fù)雜UDDI對(duì)象的WEB服務(wù)系統(tǒng)的方法,所述復(fù)雜UDDI對(duì)象具有至少一個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)和至少一個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu),每個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu)具有至少一個(gè)值,每個(gè)值具有多個(gè)字段。該方法包括在目錄父對(duì)象中提供表示每個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)的屬性,和為每個(gè)至少一個(gè)值提供具有表示復(fù)合數(shù)據(jù)結(jié)構(gòu)的每個(gè)字段的屬性的目錄子對(duì)象。
一種使WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)扁平化的方法,該方法包括確定WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)或關(guān)系的任何部分是否具有對(duì)象之間的′一對(duì)一′關(guān)系,和通過(guò)將屬性的內(nèi)容移動(dòng)到層次結(jié)構(gòu)的至少一個(gè)子部分中,清除層次結(jié)構(gòu)中被確定為具有一對(duì)一關(guān)系的該部分。


參照以下結(jié)合附圖對(duì)優(yōu)選實(shí)施例進(jìn)行的說(shuō)明可更好地理解本發(fā)明的其它目的,優(yōu)點(diǎn)和方面,其中圖1a示意性圖解了某些WEB服務(wù)和UDDI概念;圖1b示意性圖解了WEB服務(wù)環(huán)境的簡(jiǎn)化協(xié)議堆棧;圖2示意性圖解了現(xiàn)有技術(shù)的層次結(jié)構(gòu);圖3示意性圖解了現(xiàn)有技術(shù)的目錄服務(wù)模型;圖4根據(jù)本發(fā)明實(shí)施例示意性圖解了利用X.500目錄技術(shù)實(shí)現(xiàn)的UDDI服務(wù)模型的基礎(chǔ)部件;圖5根據(jù)本發(fā)明實(shí)施例示意性圖解了服務(wù)投影(ServiceProjection);圖6根據(jù)本發(fā)明實(shí)施例示意性圖解了綁定模板和TModel之間的關(guān)系;圖7根據(jù)本發(fā)明實(shí)施例示意性圖解了TModel如何建立2個(gè)實(shí)體之間的關(guān)系;圖8根據(jù)本發(fā)明實(shí)施例圖解了增加發(fā)布者聲明的請(qǐng)求的邏輯表示;圖9根據(jù)本發(fā)明實(shí)施例圖解了UDDI數(shù)據(jù)對(duì)象的構(gòu)造函數(shù)(constructor)的邏輯表示;圖10示意性圖解了將企業(yè)實(shí)體對(duì)象放在用戶對(duì)象下面的情況;圖11示意性圖解了將域?qū)ο蠓旁谟脩魧?duì)象下面的情況;圖12根據(jù)本發(fā)明實(shí)施例示意性圖解了模式的概況;圖13根據(jù)現(xiàn)有技術(shù)示意性圖解了企業(yè)實(shí)體中的相對(duì)復(fù)雜對(duì)象的UDDI概念;圖14示意性圖解了企業(yè)實(shí)體中的相對(duì)復(fù)雜對(duì)象的Novell表示;圖15根據(jù)本發(fā)明實(shí)施例示意性圖解了引入層次結(jié)構(gòu)以表示企業(yè)實(shí)體中的相對(duì)復(fù)雜對(duì)象的情況;圖16根據(jù)本發(fā)明實(shí)施例示意性圖解了綁定模板層次子結(jié)構(gòu);圖17示意性圖解了扁平化和/或合并的綁定模板子結(jié)構(gòu);而圖18是能夠?qū)崿F(xiàn)本發(fā)明各個(gè)方面的計(jì)算機(jī)系統(tǒng)的模塊圖。
具體實(shí)施例方式
在描述附圖中圖解的本發(fā)明的優(yōu)選實(shí)施例時(shí),為了清楚而使用特定的術(shù)語(yǔ)。然而本發(fā)明不限于選擇的特定術(shù)語(yǔ),應(yīng)當(dāng)理解,各個(gè)特定單元包含所有以類似方式工作的技術(shù)等價(jià)特征。
圖18示出了可以實(shí)現(xiàn)本發(fā)明的方法和系統(tǒng)的計(jì)算機(jī)系統(tǒng)的例子??梢砸栽诶绱笮蜋C(jī),個(gè)人計(jì)算機(jī)(PC),手持計(jì)算機(jī),服務(wù)器等等的計(jì)算機(jī)系統(tǒng)上運(yùn)行的軟件應(yīng)用的形式實(shí)現(xiàn)本發(fā)明的系統(tǒng)和方法。軟件應(yīng)用可以存儲(chǔ)在計(jì)算機(jī)系統(tǒng)本地可訪問(wèn)的記錄介質(zhì),例如軟盤(pán),光盤(pán),硬盤(pán)等等中,或者可以遠(yuǎn)離計(jì)算機(jī)系統(tǒng)并且可通過(guò)針對(duì)例如局域網(wǎng)或因特網(wǎng)的網(wǎng)絡(luò)的硬連線或無(wú)線連接來(lái)訪問(wèn)。
圖18示出了能夠?qū)崿F(xiàn)本發(fā)明的方法和系統(tǒng)的計(jì)算機(jī)系統(tǒng)的例子。通常稱為系統(tǒng)180的計(jì)算機(jī)系統(tǒng)可以包含中央處理單元(CPU)182,例如隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)的存儲(chǔ)器184,打印機(jī)接口186,顯示單元188,(LAN)局域網(wǎng)數(shù)據(jù)傳輸控制器190,LAN接口192,網(wǎng)絡(luò)控制器194,內(nèi)部總線196和一或多個(gè)輸入設(shè)備198,例如鍵盤(pán),鼠標(biāo)等等。如圖所示,系統(tǒng)180可以通過(guò)鏈路202連接到例如硬盤(pán)的數(shù)據(jù)存儲(chǔ)設(shè)備200。
下面總結(jié)了本發(fā)明實(shí)施例的一些顯著特征,以及因而提供的一些優(yōu)點(diǎn)。
根據(jù)本發(fā)明的實(shí)施例,在用戶之上建立數(shù)據(jù)庫(kù)層,因而每個(gè)數(shù)據(jù)庫(kù)能夠被放到不同的服務(wù)器上。這個(gè)數(shù)據(jù)庫(kù)層包含共同形成目錄前綴(Directory pre-fix)的一或多個(gè)目錄節(jié)點(diǎn)。這也可以被稱作數(shù)據(jù)庫(kù)的′域′或′名字′。其優(yōu)點(diǎn)在于提供單獨(dú)位置以保存關(guān)于域的信息。這個(gè)節(jié)點(diǎn)的名字表示目錄前綴。
可以建立用戶對(duì)象以保存表示UDDI帳戶的數(shù)據(jù)。其優(yōu)點(diǎn)在于提供單獨(dú)位置以保存關(guān)于用戶/帳戶的信息。
企業(yè)實(shí)體對(duì)象可以被排列在用戶對(duì)象下面,企業(yè)服務(wù)對(duì)象可以被排列在企業(yè)實(shí)體對(duì)象下面,綁定模板對(duì)象可以被排列在企業(yè)服務(wù)對(duì)象下面。其優(yōu)點(diǎn)在于用戶對(duì)象層之上的數(shù)據(jù)庫(kù)或′域′層允許將若干數(shù)據(jù)庫(kù)布置或邏輯連接在一起。域?qū)涌梢园慈舾蓪哟闻帕校缡共煌瑖?guó)家,即AU,US,EP等等按大陸組織。
另一個(gè)優(yōu)點(diǎn)在于通過(guò)使用X.500目錄的分布特性可以為這個(gè)特征提供效果。例如,為實(shí)現(xiàn)這個(gè),′世界′或′公司′節(jié)點(diǎn)被放在虛擬目錄樹(shù)的頂端,并且唯一命名的節(jié)點(diǎn)被放在每個(gè)UDDI子樹(shù)(UDDI名字空間)的頂端。雖然對(duì)用戶不可見(jiàn),然而這些′節(jié)點(diǎn)′前綴允許UDDI數(shù)據(jù)庫(kù)影響到(leverage)目錄分布。
根據(jù)本發(fā)明的實(shí)施例,可以使企業(yè)實(shí)體對(duì)象作為用戶對(duì)象的子節(jié)點(diǎn)。使用戶/帳戶在企業(yè)實(shí)體,企業(yè)服務(wù)和綁定模板層次上,提供了使每個(gè)用戶具有其自身的子樹(shù)的效果。這增強(qiáng)了可管理性和安全性。用戶被容易地限制于只修改和/或控制其自身的子樹(shù)。這也通過(guò)利用目錄子樹(shù)搜索操作增強(qiáng)了性能。
根據(jù)實(shí)施例,用戶定義的TModel可以作為用戶對(duì)象的子節(jié)點(diǎn),于是使得安全性易于實(shí)現(xiàn)。由于用戶只能修改和/或控制其自身的子樹(shù),這增強(qiáng)了可管理性和安全性。這也通過(guò)利用目錄子樹(shù)搜索操作增強(qiáng)了性能。
本發(fā)明的實(shí)施例表示利用X.500/LDAP目錄技術(shù)的UDDI環(huán)境的′映射′。尤其是,已經(jīng)發(fā)現(xiàn)X.500和LDAP目錄技術(shù)的層次結(jié)構(gòu)適用于UDDI環(huán)境。附加單元(例如用戶對(duì)象)的精心設(shè)計(jì)使得層次結(jié)構(gòu)更加適合UDDI環(huán)境的需要。
在本發(fā)明中,術(shù)語(yǔ)目錄要包含X.500,LDAP和類似技術(shù);術(shù)語(yǔ)′用戶′被理解為也包含′帳戶′,并且反之亦然;而術(shù)語(yǔ)′數(shù)據(jù)庫(kù)′被理解為也包含′目錄前綴′,′域′和/或′節(jié)點(diǎn)′,并且反之亦然。
WEB服務(wù)最初被認(rèn)為是例如企業(yè),伙伴,客戶,供應(yīng)商的組織之間的服務(wù)。在這個(gè)環(huán)境中,UDDI被考慮為這些組織提供的服務(wù)的單獨(dú)數(shù)據(jù)庫(kù)。
現(xiàn)在顯然WEB服務(wù)和UDDI可用于企業(yè)內(nèi)以在組織內(nèi)集成應(yīng)用。也顯然WEB服務(wù)和UDDI可用于在來(lái)自指定廠商的產(chǎn)品集合內(nèi)集成產(chǎn)品。這同樣適用于商用環(huán)境以外的領(lǐng)域,例如政府部門(mén),大型教育機(jī)構(gòu),和許多其它非商用實(shí)體的實(shí)例。
盡管針對(duì)的是企業(yè),然而以下說(shuō)明同樣適用于任何類型的環(huán)境,尤其適用于上述類型的環(huán)境。
企業(yè)UDDI注冊(cè)中心可以是這樣的服務(wù),其能夠部署在企業(yè)內(nèi)以發(fā)布供內(nèi)部使用的信息和服務(wù)。另外,企業(yè)UDDI服務(wù)可以受到影響以提供其它功能,例如用于分布式應(yīng)用的配置發(fā)現(xiàn)。
希望WEB服務(wù)能夠迅速和容易地在內(nèi)部和與伙伴集成企業(yè)過(guò)程。有效利用WEB服務(wù)的一個(gè)部件是公共UDDI注冊(cè)中心,其允許軟件部件動(dòng)態(tài)發(fā)現(xiàn)和連接到因特網(wǎng)上的適當(dāng)服務(wù)。WEB服務(wù)也提供能夠集成企業(yè)內(nèi)的業(yè)務(wù)過(guò)程的承諾。在這種情況下,UDDI注冊(cè)中心可以變成組織的基礎(chǔ)設(shè)施的一部分(例如重要企業(yè)應(yīng)用),因此提供最高等級(jí)的安全性,性能,可靠性和可管理性。目錄技術(shù)提供理想基礎(chǔ)以支持企業(yè)UDDI注冊(cè)中心的嚴(yán)格要求。
企業(yè)UDDI注冊(cè)中心可以被定義成提供對(duì)UDDI的符合標(biāo)準(zhǔn)的支持,但是又進(jìn)行超越以解決有關(guān)部署的4方面問(wèn)題。這些方面包含將訪問(wèn)僅限于授權(quán)用戶的安全性,支持大型部署的分布,用于真實(shí)生產(chǎn)系統(tǒng)的可管理性,和滿足服務(wù)等級(jí)協(xié)議的可用性。
強(qiáng)安全性可以是某些企業(yè)部署的重要要求。公共UDDI注冊(cè)中心的存在完全是為了幫助任一方發(fā)現(xiàn)可用服務(wù)。UDDI注冊(cè)中心的存在完全是為了使正確的人們發(fā)現(xiàn)這些服務(wù)。這是重要的區(qū)別。
因特網(wǎng)UDDI注冊(cè)中心被認(rèn)為對(duì)于在企業(yè)中部署WEB服務(wù)是不適當(dāng)?shù)摹@?,接口到薪水系統(tǒng)或雇員收益管理應(yīng)用的WEB服務(wù)的定義不會(huì)發(fā)布到因特網(wǎng)UDDI注冊(cè)中心上。
安全性要求也可以意味著甚至內(nèi)部部署的UDDI注冊(cè)中心也要提供強(qiáng)訪問(wèn)控制。這是由于UDDI注冊(cè)中心基本上提供關(guān)于能夠做什么和如何做的指導(dǎo)。UDDI注冊(cè)中心提供任何可用WEB服務(wù)的企業(yè)級(jí)的描述,并且對(duì)完全定義那些服務(wù)的編程接口的WSDL提供指示。這為應(yīng)用開(kāi)發(fā)人員以及黑客提供高生產(chǎn)率工具。
因此,期望限制對(duì)財(cái)務(wù)敏感或機(jī)密(例如醫(yī)藥記錄)系統(tǒng)的接口定義的訪問(wèn)。甚至在開(kāi)發(fā)組織內(nèi)部,最好限制對(duì)關(guān)于授權(quán)的特定WEB服務(wù)的信息的訪問(wèn)。
在企業(yè)內(nèi),或由選定企業(yè)成員通過(guò)企業(yè)外部互聯(lián)網(wǎng)使用非安全UDDI注冊(cè)中心是非常危險(xiǎn)的。借助可自由下載的工具,技能水平相對(duì)較低的人們能夠訪問(wèn)和使用WEB服務(wù)。任何真正的企業(yè)解決方案均能夠以透明控制對(duì)有關(guān)WEB服務(wù)的信息的訪問(wèn)的能力,實(shí)現(xiàn)標(biāo)準(zhǔn)UDDI服務(wù)。
對(duì)于分布,在許多情況下,UDDI注冊(cè)中心的初始部署將具有較小規(guī)模。然而隨著WEB服務(wù)需求的增長(zhǎng),通常會(huì)變成大型部署。另外,注冊(cè)中心的應(yīng)用和部署會(huì)隨著UDDI注冊(cè)中心的新功能的發(fā)現(xiàn)而得到加速。
更大型的實(shí)現(xiàn)和地理上分布的組織內(nèi)的使用會(huì)促使在單獨(dú)組織內(nèi)實(shí)現(xiàn)多個(gè)UDDI注冊(cè)中心。向分布式注冊(cè)中心的演變使得任何個(gè)體注冊(cè)中心能夠與其它注冊(cè)中心動(dòng)態(tài)交互以服務(wù)于其請(qǐng)求的能力變得重要。一旦被建立,注冊(cè)中心間的通信能夠擴(kuò)展超出防火墻,以包含受信企業(yè)伙伴的注冊(cè)中心,或甚至與因特網(wǎng)UDDI注冊(cè)中心通信。
考慮有2個(gè)基本方案以滿足注冊(cè)中心間通信的需要。一個(gè)方案是復(fù)制,其中多個(gè)服務(wù)器上存在相同的名字空間項(xiàng)。另一個(gè)方案是分布,其中互連服務(wù)器具有不同的名字空間項(xiàng),然而它們提供一個(gè)邏輯服務(wù)。
盡管這2個(gè)方案經(jīng)常被混淆為類似的,然而它們有相當(dāng)?shù)牟煌?br> 在復(fù)制方案中,在可能需要查找信息的每個(gè)服務(wù)器中復(fù)制信息。這是相對(duì)簡(jiǎn)單的,甚至過(guò)分簡(jiǎn)單的解決方案,但是它引入了同步更新的需求,并且根據(jù)定義,它會(huì)隨著注冊(cè)中心數(shù)量和其內(nèi)容量的增長(zhǎng)而增加網(wǎng)絡(luò)阻塞。復(fù)制技術(shù)最適于服務(wù)器數(shù)量較少,信息量較低并且很少改變的環(huán)境。對(duì)于企業(yè)部署,復(fù)制經(jīng)常用于在故障恢復(fù)環(huán)境中維護(hù)備份數(shù)據(jù)庫(kù)。使用復(fù)制技術(shù)非常難以保持地理上或功能上分布的服務(wù)器的同步。
在分布方案中,在每個(gè)參與的服務(wù)器上邏輯表示信息,但是信息只存儲(chǔ)在單個(gè)注冊(cè)中心中。僅在需要時(shí)查詢才被分布到其它注冊(cè)中心。于是保證返回的信息是最新的。這提供了單點(diǎn)更新,并且消除了復(fù)制技術(shù)固有的同步和帶寬消耗問(wèn)題。真正分布被認(rèn)為是服務(wù)器之間可伸縮連通性的一個(gè)解決辦法。
對(duì)于企業(yè)UDDI注冊(cè)中心,存在2種通常會(huì)使用分布的情況。第一種情況用于具有地理上分隔的辦公室的組織,其中每個(gè)辦公室產(chǎn)生新的UDDI項(xiàng)并且使用UDDI服務(wù)。雖然可能能夠運(yùn)行單個(gè)的集中式UDDI注冊(cè)中心,然而帶寬約束和時(shí)差經(jīng)常使得難以運(yùn)行,以致不可工作。
分布式注冊(cè)中心提供靈活、可伸縮的解決方案。在這種情況下,每個(gè)參與的辦公室具有分立的注冊(cè)中心,并且每個(gè)注冊(cè)中心將其它注冊(cè)中心視為其自身內(nèi)容的邏輯部分。注冊(cè)中心服務(wù)負(fù)責(zé)所有的連通細(xì)節(jié),并且客戶不必關(guān)心地理問(wèn)題。
第二種情景出現(xiàn)在企業(yè)需要將其內(nèi)部UDDI系統(tǒng)連接到受信伙伴的UDDI系統(tǒng)或公共因特網(wǎng)注冊(cè)中心時(shí)。尤其在公共注冊(cè)中心的情況下,復(fù)制是有問(wèn)題的。因特網(wǎng)注冊(cè)中心操作人員可能不希望將其注冊(cè)中心的部分復(fù)制到企業(yè)的內(nèi)部注冊(cè)中心。于是,分布式方案是一個(gè)辦法。當(dāng)前,沒(méi)有針對(duì)分布的UDDI標(biāo)準(zhǔn),并且關(guān)于復(fù)制的建議被認(rèn)為是復(fù)雜的。一個(gè)解決方案會(huì)提供UDDI分布式方案的益處,而無(wú)需修改標(biāo)準(zhǔn)。
對(duì)于可管理性,作為執(zhí)行企業(yè)內(nèi)的任務(wù)關(guān)鍵功能的部件,UDDI應(yīng)當(dāng)滿足性能和可靠性要求。它不應(yīng)只是作為開(kāi)發(fā)人員的方便實(shí)用程序而存在??蛻舳说淖x取訪問(wèn)將是對(duì)UDDI注冊(cè)中心的最頻繁和時(shí)間要求最嚴(yán)格的應(yīng)用。為最大吞吐率而優(yōu)化性能,并且查找查詢的響應(yīng)時(shí)間不應(yīng)受更復(fù)雜搜索的影響。隨著注冊(cè)中心的規(guī)模和復(fù)雜度的增長(zhǎng),性能不應(yīng)受影響。支持UDDI注冊(cè)中心的數(shù)據(jù)存儲(chǔ)應(yīng)當(dāng)是工業(yè)級(jí)的,并且完全支持事務(wù)和自動(dòng)恢復(fù)。另外,UDDI服務(wù)器應(yīng)當(dāng)具有高度可用性,并且支持例如網(wǎng)絡(luò)故障恢復(fù)和熱后備的特性。系統(tǒng)管理員應(yīng)當(dāng)有能力使得UDDI注冊(cè)中心易于維護(hù),監(jiān)視和控制。這些能力包含無(wú)需使服務(wù)脫機(jī)而改變控制,規(guī)則和設(shè)置的動(dòng)態(tài)配置,用于高可用性的在線備份和調(diào)整,停止注冊(cè)中心″搜索″和防止拒絕服務(wù)攻擊的管理控制,經(jīng)由SNMP或其它類型的提醒機(jī)構(gòu)的監(jiān)視,利用針對(duì)安全,統(tǒng)計(jì),查詢和更新信息的分立日志文件的審計(jì)和診斷,以及支持復(fù)制,分布和路由的部署選項(xiàng)。
已經(jīng)引入了許多以開(kāi)發(fā)人員為焦點(diǎn)的UDDI注冊(cè)中心。這些為小型開(kāi)發(fā)團(tuán)隊(duì)提供了有用的能力,但不是真正的生產(chǎn)級(jí)的系統(tǒng)。WEB服務(wù)部署正迅速增長(zhǎng),并且對(duì)能夠迅速升級(jí)以支持正在進(jìn)行的WEB服務(wù)部署的企業(yè)級(jí)注冊(cè)中心存在相應(yīng)的需求。
UDDI注冊(cè)中心提供服務(wù)。許多應(yīng)用會(huì)依賴此服務(wù)。在在線企業(yè)的情況下,一起提供這個(gè)服務(wù)可能是重要的。例如,可能需要UDDI注冊(cè)中心提供99.99%可用性的服務(wù)等級(jí)協(xié)議。為了利于這個(gè)可用性水平,UDDI注冊(cè)中心可以復(fù)制在兩個(gè)或更多機(jī)器上,并且提供機(jī)制以確保機(jī)器保持同步,并且確保在任何機(jī)器變得不可用的情況下,任何傳入查詢被自動(dòng)路由到可用機(jī)器。
如已經(jīng)指出的,UDDI可以被看作類似于電話目錄服務(wù)。于是,最好基于信息存儲(chǔ)的目錄模型建立UDDI注冊(cè)中心服務(wù)。已經(jīng)針對(duì)基于目錄的服務(wù)的特定需求演變和開(kāi)發(fā)了目錄模型,其具有企業(yè)級(jí)部署所需的安全性,可伸縮性和可靠性。
在應(yīng)用體系結(jié)構(gòu)中,如上所述的大部分項(xiàng)目被實(shí)現(xiàn)在服務(wù)級(jí),而不是數(shù)據(jù)存儲(chǔ)級(jí)。關(guān)系數(shù)據(jù)庫(kù)(RDBMS)是能夠借以建立許多不同類型的應(yīng)用的通用工具包。RDBMS實(shí)現(xiàn)側(cè)重于提供堅(jiān)實(shí)的數(shù)據(jù)訪問(wèn)功能,而不是終端應(yīng)用中需要的額外服務(wù)功能。
圖3示出的目錄服務(wù)體系結(jié)構(gòu)圖解了服務(wù)層31與其它部件的分離。將接口功能封裝到服務(wù)層31中,產(chǎn)生了可重用服務(wù)基礎(chǔ)設(shè)施部件。其一個(gè)極好的例子是Web服務(wù)器。Web服務(wù)器提供一個(gè)功能集合(HTTP訪問(wèn),CGI處理等等),其共同構(gòu)成足夠可用于建立到獨(dú)立部件中的服務(wù)。以相同方式,已經(jīng)開(kāi)發(fā)了目錄服務(wù)模型以提供特定類型的應(yīng)用所需的功能。目錄技術(shù)提供對(duì)認(rèn)證和授權(quán)領(lǐng)域的許多任務(wù)關(guān)鍵應(yīng)用的支持。
UDDI可被視作類似于另一個(gè)類型的目錄服務(wù)。于是可以發(fā)現(xiàn),通過(guò)使用目錄技術(shù)能夠解決UDDI產(chǎn)生的許多實(shí)現(xiàn)問(wèn)題。例如,針對(duì)對(duì)于UDDI電話目錄操作而言非常普遍的非常高效的發(fā)現(xiàn)和搜索操作而優(yōu)化目錄。
已經(jīng)注意到,UDDI服務(wù)應(yīng)當(dāng)提供強(qiáng)安全性,分布和可管理性能力,如果它要成功部署在企業(yè)中的話。這些是已經(jīng)建立到企業(yè)級(jí)目錄服務(wù)解決方案中的非常相同的屬性。
一個(gè)構(gòu)造企業(yè)UDDI注冊(cè)中心的方式是擴(kuò)展現(xiàn)有的目錄基礎(chǔ)設(shè)施,這種現(xiàn)有的目錄基礎(chǔ)設(shè)施已經(jīng)在高性能真實(shí)世界應(yīng)用中得到嘗試和測(cè)試。
目錄服務(wù)體系結(jié)構(gòu)提供優(yōu)化的工具以實(shí)現(xiàn)企業(yè)UDDI注冊(cè)中心。這種組合支持為成功而需要的能力。圖4示意性示出的UDDI服務(wù)標(biāo)識(shí)出可以針對(duì)這個(gè)基礎(chǔ)設(shè)施實(shí)現(xiàn)的部件。UDDI語(yǔ)義橋41是介于UDDI的SOAP實(shí)現(xiàn)42和目錄44支持的LADP接口43之間的服務(wù)部件。目錄44傳送其中支持安全控制,分布機(jī)制和管理能力的信息訪問(wèn)。RDBMS45提供基礎(chǔ)物理數(shù)據(jù)管理,事務(wù)完整性和備份與恢復(fù)機(jī)制。
UDDI注冊(cè)中心產(chǎn)品可以直接建立在RDBMS技術(shù)上。盡管在許多方面都是非常有用和強(qiáng)大的,然而關(guān)系數(shù)據(jù)庫(kù)自身不滿足目錄處理所特有的要求。
使用RDBMS或下面的其它數(shù)據(jù)存儲(chǔ)系統(tǒng)能夠初步建立目錄型應(yīng)用。然而這不可能是最高效的方案。
一個(gè)替代方案是應(yīng)用目錄服務(wù)模型來(lái)建立UDDI注冊(cè)中心,并且提供這個(gè)特定類型的應(yīng)用所需的功能。通過(guò)現(xiàn)代的工業(yè)級(jí)目錄服務(wù)甚至能夠提供更多UDDI注冊(cè)中心所需的功能。UDDI注冊(cè)中心可被視作具有專用通信和API的目錄服務(wù)。在目錄上建立UDDI服務(wù)能夠提供必備的安全性,分布和管理能力,而無(wú)需修改UDDI標(biāo)準(zhǔn)以獲得益處。
精心設(shè)計(jì)的數(shù)據(jù)表示會(huì)有利于提供UDDI數(shù)據(jù)庫(kù)所需的功能和性能。
以下描述涉及各個(gè)UDDI概念。參照UDDI規(guī)范(http//www.uddi.org/specification.html)可獲得這些UDDI概念的更加詳細(xì)的描述。
在目錄用語(yǔ)中,模式是有關(guān)目錄中能夠存儲(chǔ)的數(shù)據(jù)單元和那些單元如何可以被連接在一起的描述。這包含每個(gè)可能屬性(屬性保存單段數(shù)據(jù))的描述,各個(gè)對(duì)象(對(duì)象是屬性的集合)的描述,和可能對(duì)象層次結(jié)構(gòu)的說(shuō)明。本說(shuō)明書(shū)中使用的特定模式符號(hào)是eTrust目錄,即Computer Associates International公司的產(chǎn)品所使用的符號(hào)。′eTrust′是Computer Associates International公司的產(chǎn)品名稱和商標(biāo)。當(dāng)然,可以使用其它模式符號(hào)。
本發(fā)明描述用來(lái)通過(guò)使用目錄作為數(shù)據(jù)存儲(chǔ)來(lái)實(shí)現(xiàn)UDDI數(shù)據(jù)庫(kù)的模式。存在與這個(gè)模式有關(guān)的若干概念。也存在用來(lái)增強(qiáng)UDDI實(shí)現(xiàn)的操作的若干技術(shù)。以下是對(duì)這些概念中的一些的簡(jiǎn)要描述。后面當(dāng)描述本發(fā)明的實(shí)施例時(shí)會(huì)提供這些概念和技術(shù)的更加詳細(xì)的描述。
本發(fā)明的模式被設(shè)計(jì)成提供優(yōu)化操作。以增強(qiáng)操作的方式實(shí)施本發(fā)明的模式設(shè)計(jì),其包含屬性,對(duì)象類,項(xiàng)(entry)和層次結(jié)構(gòu)的定義。本發(fā)明的模式設(shè)計(jì)至少在安全性,性能,可管理性和分布方面提供顯著的優(yōu)點(diǎn)。
現(xiàn)在描述系統(tǒng)的層次結(jié)構(gòu)。X.500目錄在內(nèi)部支持分布,從而在無(wú)需UDDI層次的任何編碼的情況下提供分布式UDDI數(shù)據(jù)庫(kù)。層次分割數(shù)據(jù)庫(kù)的內(nèi)容。這個(gè)模式的(可選)域?qū)哟渭俣ㄔ搶哟危總€(gè)域項(xiàng)和在其下面的全部項(xiàng)均能夠?qū)DDI層次編程透明地被放到分立目錄服務(wù)器上。圖11圖解了本發(fā)明這個(gè)方面的實(shí)施例。下面會(huì)更詳細(xì)地對(duì)此進(jìn)行描述。
根據(jù)本發(fā)明的實(shí)施例,用戶對(duì)象被放置在企業(yè)和TModel對(duì)象之上。用戶對(duì)象提供用于存儲(chǔ)涉及用戶的信息的位置。它也提供針對(duì)用戶發(fā)布的全部數(shù)據(jù)的錨標(biāo)點(diǎn)(anchor point)。圖10圖解了本發(fā)明這個(gè)方面的實(shí)施例。下面會(huì)更詳細(xì)地對(duì)此進(jìn)行描述。
這個(gè)域/用戶層次系統(tǒng)有利于安全性。UDDI實(shí)現(xiàn)能夠保證用戶具有對(duì)其數(shù)據(jù)對(duì)象子樹(shù)的控制。
提供對(duì)用戶控制的項(xiàng)的搜索。通過(guò)在用戶對(duì)象下面使用子樹(shù)搜索,能夠增強(qiáng)對(duì)這個(gè)用戶控制的數(shù)據(jù)的搜索。
通過(guò)例如指定在綁定模板中出現(xiàn)的TModel,可以發(fā)現(xiàn)企業(yè)。這等同于″通過(guò)發(fā)現(xiàn)一個(gè)(或更多)其子節(jié)點(diǎn)來(lái)發(fā)現(xiàn)x″。換言之,查詢可以是″發(fā)現(xiàn)具有一服務(wù)的所有企業(yè),該服務(wù)具有引用這個(gè)模型的綁定模板″。通過(guò)發(fā)現(xiàn)派生對(duì)象的DN(區(qū)別名字)并且丟棄不期望的層次以產(chǎn)生企業(yè)實(shí)體的DN,進(jìn)行這樣的查詢。
也可以通過(guò)這種方式進(jìn)行復(fù)制消除。這個(gè)發(fā)現(xiàn)特性源于本發(fā)明的結(jié)構(gòu)的層次性質(zhì)。
可以使用對(duì)對(duì)象類唯一的屬性來(lái)執(zhí)行搜索。這是具有2個(gè)優(yōu)點(diǎn)的優(yōu)化。這通過(guò)消除′弱′子句簡(jiǎn)化了搜索的編寫(xiě),并且產(chǎn)生出眾的性能?!淙酢渥泳涫沁^(guò)濾器的一部分,其返回大量的項(xiàng),或者是指作為許多項(xiàng)的一部分的屬性。對(duì)每個(gè)名字使用相同屬性名字的設(shè)計(jì)在按照名字對(duì)企業(yè)實(shí)體進(jìn)行搜索時(shí)會(huì)具有2個(gè)選擇它在搜索中包含對(duì)象類,或過(guò)濾搜索結(jié)果。前者只在企業(yè)名字具有唯一對(duì)象類的情況下才可能出現(xiàn),并且即使如此,對(duì)象類仍是弱子句,從而導(dǎo)致更多開(kāi)銷(xiāo)。后者意味著額外的代碼,和返回遠(yuǎn)大于期望結(jié)果的結(jié)果列表的可能性。
例如,考慮稱作″McKenna的測(cè)試服務(wù)″的公司,其提供各式各樣的WEB服務(wù),所有的WEB服務(wù)均在其名字中包含″McKenna的″-以在其名字中具有″McKenna的″為條件對(duì)企業(yè)實(shí)體進(jìn)行的搜索會(huì)返回全部服務(wù)的中間結(jié)果。這些中間結(jié)果可以被消除,但是處理它們降低了性能。
最好能夠在搜索中指定屬性名字,并且使該屬性名字唯一標(biāo)識(shí)正搜索的對(duì)象類。繼續(xù)上述例子,如果我們能夠進(jìn)行以下指定,則搜索會(huì)更加簡(jiǎn)單(euBusinessEntityName=McKenna′s*)這樣的設(shè)計(jì)產(chǎn)生強(qiáng)搜索,由于它們單純搜索期望區(qū)域,因而是高效的。強(qiáng)搜索包含返回少量項(xiàng)的搜索。目錄能夠索引euBusinessEntityName屬性,并且根據(jù)該索引返回結(jié)果-這產(chǎn)生良好的性能,并且避免處理不必要的中間結(jié)果。
對(duì)于簡(jiǎn)單查詢,這樣的設(shè)計(jì)意味著針對(duì)企業(yè)實(shí)體名字的搜索是單個(gè)子句,而不是在另一個(gè)設(shè)計(jì)中可能必要的復(fù)合子句。想象如果名字屬性被稱作euName,并且企業(yè)實(shí)體名字對(duì)象被稱作euBusinessEntityName。這會(huì)產(chǎn)生以下搜索
(&(euName=McKenna′s*)(oc=euBusinessEntityName))存在甚至更加簡(jiǎn)單的設(shè)計(jì),其中所有名字被存儲(chǔ)在相同對(duì)象類中。這意味著搜索再次縮減到(euName=McKenna′s*),但是現(xiàn)在我們遍歷所有名字的結(jié)果,以嘗試找到那些具有作為企業(yè)實(shí)體的父對(duì)象的結(jié)果-這個(gè)最后設(shè)計(jì)可能會(huì)產(chǎn)生不良性能,和更加復(fù)雜的編程。
影像屬性(shadow attribute)可以被用于大小寫(xiě)敏感(case-sensitivity)。使用單個(gè)索引提供大小寫(xiě)敏感和大小寫(xiě)不敏感的搜索完全不是無(wú)效的。一個(gè)選擇是大小寫(xiě)不敏感地進(jìn)行索引,接著大小寫(xiě)敏感地掃描結(jié)果。另一個(gè)解決方案是大小寫(xiě)敏感地索引原始數(shù)據(jù),并且增加大小寫(xiě)不敏感地被索引的第二屬性(其中存儲(chǔ)相同數(shù)據(jù))。于是需要做的只是選擇適當(dāng)屬性以根據(jù)發(fā)現(xiàn)限定條件進(jìn)行搜索。
這個(gè)設(shè)計(jì)中的每個(gè)屬性可以是單值的。這允許高效索引,更高性能和更強(qiáng)搜索。
使用多值屬性使得能夠進(jìn)行模糊搜索。也就是說(shuō),可以得到不直觀和不期望的搜索結(jié)果。假定一個(gè)稱作′n′的多值數(shù)字屬性,并且包含這個(gè)屬性的項(xiàng)具有值2和5;這個(gè)項(xiàng)會(huì)響應(yīng)搜索(&(n<3)(n>4))而被返回,這不是容易預(yù)測(cè)的。
單值屬性是用于強(qiáng)搜索的技術(shù)之一。強(qiáng)搜索是能夠通過(guò)索引消除大多數(shù)候選結(jié)果的搜索。強(qiáng)搜索是改進(jìn)性能的關(guān)鍵。
別名可以被用于服務(wù)投影。這是使用X.500目錄作為數(shù)據(jù)存儲(chǔ)的顯著益處。能夠使用X.500別名巧妙地表示服務(wù)投影。這是保證數(shù)據(jù)完整性的主要優(yōu)點(diǎn)。別名訪問(wèn)原始數(shù)據(jù),所以通過(guò)別名立即反映對(duì)原始數(shù)據(jù)的任何改變。如果目錄實(shí)現(xiàn)支持別名完整性,則當(dāng)原始項(xiàng)被刪除時(shí),別名無(wú)需附加工作便會(huì)消失。
發(fā)布者聲明是UDDI標(biāo)準(zhǔn)中定義最不清楚的元素之一,它們需要精心的設(shè)計(jì)。不適當(dāng)?shù)膶?shí)現(xiàn)能夠容易地產(chǎn)生不良的性能。
由于發(fā)布者聲明的最通常的使用是搜索涉及指定企業(yè)實(shí)體的所有完整發(fā)布者聲明的find_relatedBusiness API,將每個(gè)聲明放置在其所針對(duì)的企業(yè)實(shí)體下面會(huì)是良好的設(shè)計(jì)。
通過(guò)計(jì)算聲明的狀態(tài)并且在聲明對(duì)象中存儲(chǔ)該狀態(tài),可以將搜索限于完整發(fā)布者聲明。這意味著返回的結(jié)果不會(huì)包含要清除的虛假引用。
將關(guān)系對(duì)象存儲(chǔ)為輔助類允許搜索消除具有不期望關(guān)系的任何聲明。如果關(guān)系被存儲(chǔ)為子對(duì)象,則不能編寫(xiě)出訪問(wèn)到關(guān)系和聲明完成狀態(tài)的單個(gè)搜索。
UDDI關(guān)鍵字可以被用于對(duì)存在的目標(biāo)進(jìn)行命名。UDDI對(duì)許多重要對(duì)象類定義了關(guān)鍵字,并且這些關(guān)鍵字被指定為保證唯一。這意味著關(guān)鍵字能夠被用作對(duì)象的名字屬性。使用UDDI關(guān)鍵字作為名字屬性意味著不必嘗試消除命名沖突-而在例如缺省名字被用作企業(yè)實(shí)體的名字屬性的情況下會(huì)需要消除命名沖突。
可以提供關(guān)鍵字以對(duì)不存在的目標(biāo)進(jìn)行命名。也就是說(shuō),不是所有的UDDI對(duì)象都具有定義的關(guān)鍵字。一個(gè)例子是發(fā)布者聲明。對(duì)于這些,本系統(tǒng)使用與UDDI定義的關(guān)鍵字相同的算法提供關(guān)鍵字。這個(gè)思路的重用意味著能夠重用針對(duì)其它對(duì)象編寫(xiě)的代碼和結(jié)構(gòu)。
在一系列UDDI對(duì)象是另一個(gè)對(duì)象的子對(duì)象并且子對(duì)象的順序是重要的(例如地址行(address lines))的情況下,分配給子對(duì)象的關(guān)鍵字被構(gòu)造成其值單調(diào)增加,使得對(duì)關(guān)鍵字的排序產(chǎn)生期望的順序。這簡(jiǎn)化了保證期望順序的處理。
實(shí)際上,期望關(guān)鍵字按照由小到大(little-endian)的方式發(fā)生改變。也就是說(shuō),關(guān)鍵字的最左字節(jié)改變最迅速,因?yàn)檫@在被用作數(shù)據(jù)存儲(chǔ)的X.500目錄中產(chǎn)生最優(yōu)的索引性能。
UDDI標(biāo)準(zhǔn)在一些主對(duì)象類型內(nèi)定義若干子結(jié)構(gòu)。在許多情況下,這些子結(jié)構(gòu)是可選的,并且可以重復(fù)(它們?cè)谙嗤瑢?duì)象中可以出現(xiàn)零次,一次或不止一次)。一個(gè)簡(jiǎn)單例子是名字子結(jié)構(gòu),包含串(名字)和語(yǔ)言標(biāo)識(shí)符。X.500模式定義不支持結(jié)構(gòu)化屬性的使用,所以不存在現(xiàn)成的、清楚的子結(jié)構(gòu)映射。
存在一些能夠在X.500模式中實(shí)現(xiàn)這些子結(jié)構(gòu)的方式。
一種方式是通過(guò)使用某種分隔符分割各個(gè)元素,從而將子結(jié)構(gòu)的成分串聯(lián)成單個(gè)屬性。這可能是最優(yōu)的設(shè)計(jì)選擇,因?yàn)樗シ謩e索引或搜索成分的能力,并且增加了處理復(fù)雜度以處理數(shù)據(jù)。
在本系統(tǒng)中,選擇用來(lái)表示子結(jié)構(gòu)的特定設(shè)計(jì)以使性能和可管理性最大化。所公開(kāi)的設(shè)計(jì)可以使用各種技術(shù)中的一或多個(gè)表示目錄中的子結(jié)構(gòu)。這些技術(shù)可以被概括為3個(gè)類別。
一個(gè)技術(shù)是將許多子結(jié)構(gòu)處理為子對(duì)象。名字是良好的例子企業(yè)實(shí)體名字被存儲(chǔ)為企業(yè)實(shí)體的子對(duì)象。另一個(gè)例子是描述,其中單獨(dú)的企業(yè)描述對(duì)象是企業(yè)實(shí)體對(duì)象的子對(duì)象。圖15提供了關(guān)于本發(fā)明這個(gè)方面的實(shí)施例的說(shuō)明,并且會(huì)在下面更詳細(xì)地加以描述。
另一個(gè)技術(shù)是扁平化/合并。在可能最多存在一個(gè)針對(duì)另一個(gè)對(duì)象的關(guān)系的情況下,屬性可以被合并成一個(gè)單獨(dú)的對(duì)象。在這種情況下,層次結(jié)構(gòu)被稱作是扁平化的,因?yàn)?個(gè)對(duì)象已經(jīng)合并成一個(gè)對(duì)象。新對(duì)象被稱作是合并的,因?yàn)樾聦?duì)象包含來(lái)自組合對(duì)象的屬性的組合。關(guān)系對(duì)象的內(nèi)容最好被提升到父對(duì)象。
例如,圖16示意性圖解了UDDI關(guān)系圖的表示。圖17示意性圖解了目錄層次結(jié)構(gòu)圖,其中通過(guò)UDDI對(duì)象的扁平化形成了目錄層次結(jié)構(gòu)。
通過(guò)說(shuō)明,圖16圖解了具有針對(duì)對(duì)象163的關(guān)系對(duì)象162的對(duì)象161。
根據(jù)本發(fā)明的實(shí)施例(其中存在一對(duì)一關(guān)系),′子對(duì)象′能夠得到提升。換言之,該部分層次結(jié)構(gòu)能夠被縮減或扁平化,并且對(duì)象被合并。圖17示意性圖解了結(jié)果。父對(duì)象171具有內(nèi)容A1,A2,An,并且具有一或多個(gè)子對(duì)象,即子對(duì)象9n,其具有內(nèi)容B1,B2,Bn,C1,C2和Cn。
另一個(gè)技術(shù)是分割。例如,在一個(gè)特定情況(OverviewDoc子結(jié)構(gòu))中,子結(jié)構(gòu)包含非重復(fù)單元和重復(fù)單元。非重復(fù)單元(OverviewURL)能夠移入父對(duì)象,而重復(fù)單元可以成為子對(duì)象。
本發(fā)明的另一個(gè)方面是管理。刪除TModel使得將其從find_TModel隱藏掉,但是不將其從數(shù)據(jù)庫(kù)中清除。因此,為實(shí)現(xiàn)正確的TModel處理,可以實(shí)現(xiàn)隱藏標(biāo)記。這個(gè)標(biāo)記的存在指示TModel(或用戶對(duì)象)被隱藏。標(biāo)記的不存在指示它沒(méi)有被隱藏。對(duì)于絕大多數(shù)TModel均是如此,所以這個(gè)方案是高效的。非隱藏對(duì)象中沒(méi)有占用空間,并且也不使用索引。目錄會(huì)只索引那些具有隱藏屬性的項(xiàng)。這也意味著對(duì)非隱藏TModel的搜索會(huì)是快速和高效的。
被用作數(shù)據(jù)存儲(chǔ)的X.500目錄促使產(chǎn)生不存儲(chǔ)空值的設(shè)計(jì)。例如,對(duì)象中不存在的(可選)值不存儲(chǔ)在目錄中。這使得高效使用存儲(chǔ)空間,并且得到更強(qiáng)搜索。任何對(duì)屬性的搜索只需要考慮那些具有該屬性的數(shù)據(jù)的對(duì)象。
本系統(tǒng)的數(shù)據(jù)層次結(jié)構(gòu)很好地與UDDI標(biāo)準(zhǔn)的意圖相匹配。當(dāng)請(qǐng)求到達(dá)以刪除UDDI對(duì)象時(shí),它直接映射到目錄中子樹(shù)的刪除。例如,刪除服務(wù)包含刪除其名字和描述,以及全部其綁定模板。所有這些均是目錄中的服務(wù)項(xiàng)的子對(duì)象。因此,本系統(tǒng)自服務(wù)項(xiàng)向下刪除子樹(shù)。這容易實(shí)現(xiàn)并且高效。
域是表示層次子樹(shù)的基部的名字。在X.500術(shù)語(yǔ)中,域被稱作上下文前綴。在LDAP術(shù)語(yǔ)中,它被稱作后綴。為UDDI數(shù)據(jù)庫(kù)提供域名允許在數(shù)據(jù)庫(kù)中使用數(shù)據(jù)的真正分布(就X.500而言)。UDDI標(biāo)準(zhǔn)僅支持復(fù)制。通過(guò)本系統(tǒng)能夠?qū)?yīng)用透明地使用目錄分布設(shè)備。
例如,假定企業(yè)內(nèi)部部署UDDI,但是具有2個(gè)開(kāi)發(fā)位置。對(duì)于此設(shè)施,它們能夠在每個(gè)位置部署UDDI服務(wù)器,其中分布允許每個(gè)位置透明地觀看兩個(gè)注冊(cè)中心上發(fā)布的項(xiàng)目。
其優(yōu)點(diǎn)是允許分布′免費(fèi)(for free)′。例如,UDDI服務(wù)器不必進(jìn)行任何額外工作,并且目錄系統(tǒng)有效地將信息島鏈接在一起。
UDDI標(biāo)準(zhǔn)中沒(méi)有規(guī)定如何存儲(chǔ)用戶信息。通過(guò)建立用戶對(duì)象,涉及用戶的全部信息能夠被存儲(chǔ)在一個(gè)單獨(dú)的對(duì)象中,并且該對(duì)象能夠被用作保存用戶發(fā)布的全部對(duì)象的子樹(shù)的根。這使得安全性的定義更加簡(jiǎn)單。例如,如果所考慮的對(duì)象(企業(yè),服務(wù)或甚至TModel)在用戶的用戶對(duì)象下面,則用戶控制它。
UDDI定義包含重復(fù)單元的對(duì)象。對(duì)于例如性能,可搜索性和可管理性的益處,這些重復(fù)單元能夠被表示成子對(duì)象。
將重復(fù)的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)為子對(duì)象允許在目錄中高效地表示數(shù)據(jù),其中每個(gè)字段分別可用于搜索(和為搜索而索引)。
例如,企業(yè)實(shí)體名字能夠被存儲(chǔ)為企業(yè)實(shí)體對(duì)象的子對(duì)象。另一個(gè)例子是能夠被存儲(chǔ)為企業(yè)實(shí)體對(duì)象下面的子對(duì)象的企業(yè)描述。
這類系統(tǒng)的優(yōu)點(diǎn)是允許搜索名字(是常見(jiàn)的UDDI搜索),并且該項(xiàng)的DN提供名字屬于的對(duì)象的DN。
UDDI定義冗余′容器′節(jié)點(diǎn)(只包含子對(duì)象子結(jié)構(gòu)而不是屬性的UDDI結(jié)構(gòu))。這些可以被從查詢結(jié)果中清除,因?yàn)樗鼈兡軌蛞韵鄬?duì)較低的成本構(gòu)造。在某些情況下,屬性能夠被從子節(jié)點(diǎn)提升到其父節(jié)點(diǎn),以從目錄表示中清除現(xiàn)在冗余的子節(jié)點(diǎn)。
例如,由于不包含屬性,在目錄模式中不表示tModelInstanceDetails。象其子對(duì)象OverviewDoc的屬性那樣,由于其屬性被提升到tModellnstancelnfo父對(duì)象,在目錄模式中不表示instanceDetails。在目錄中不表示類別和標(biāo)識(shí)符包(bag),使其內(nèi)容作為包的所有者的子對(duì)象。
其優(yōu)點(diǎn)是減少了目錄中項(xiàng)的數(shù)量。尤其是,它使DIT的深度最小,從而能夠改進(jìn)性能。
圖12根據(jù)本發(fā)明實(shí)施例示意性圖解了層次結(jié)構(gòu)。提供一或多個(gè)域或前綴121。在每個(gè)域121下面,可以有一或多個(gè)用戶122。在每個(gè)用戶122下面,可以有一或多個(gè)TModel 123和一或多個(gè)企業(yè)實(shí)體(BE)124。在每個(gè)企業(yè)實(shí)體124下面,可以有一或多個(gè)發(fā)布者聲明(PA)125,一或多個(gè)企業(yè)服務(wù)(BS)126和一或多個(gè)服務(wù)投影(SP)127。在每個(gè)企業(yè)服務(wù)(BS)126下面,可以有一或多個(gè)綁定模板(BT)128。通過(guò)特定實(shí)現(xiàn),能夠根據(jù)需要放置別名。例如,服務(wù)投影對(duì)象(如圖12中三角所示)可以從企業(yè)實(shí)體對(duì)象生出以作為別名。
通過(guò)讀取整個(gè)公開(kāi)內(nèi)容可理解如圖12所示的這個(gè)模式設(shè)計(jì)的優(yōu)點(diǎn)。
發(fā)布者聲明被放置在它們所針對(duì)的企業(yè)實(shí)體下面,因?yàn)樗鼈冊(cè)趂ind_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)點(diǎn)是允許快速和高效的搜索。它也允許容易地維護(hù)數(shù)據(jù)完整性。例如,當(dāng)刪除企業(yè)時(shí),任何發(fā)布者聲明也被自動(dòng)刪除。
發(fā)布它們的用戶能夠改變(或撤消/隱藏)TModel。將它們放置在表示用戶的項(xiàng)下面使得安全性變得簡(jiǎn)單。例如,如果TModel位于用戶項(xiàng)下面的子樹(shù)中,則能夠修改它。如果不是這樣,則不能修改。
更詳細(xì)地,如果嘗試進(jìn)行改變的用戶的DN(區(qū)別名字)與TModel的DN的前綴匹配,則該用戶能夠修改該項(xiàng),否則不能。目錄能夠被用來(lái)進(jìn)行這個(gè)確定(如果DN不存在,則發(fā)生命名異常),UDDI服務(wù)器也能夠進(jìn)行這個(gè)確定。
當(dāng)從數(shù)據(jù)庫(kù)中刪除對(duì)象時(shí),與該對(duì)象相關(guān)的信息也可以被刪除。通過(guò)根據(jù)本模式的實(shí)施例使用的層次設(shè)計(jì)可對(duì)此進(jìn)行大大簡(jiǎn)化。當(dāng)刪除對(duì)象時(shí),能夠刪除以其為根的整個(gè)子樹(shù),并且這個(gè)處理能夠刪除所有相關(guān)信息(并且通常只刪除該相關(guān)信息)。能夠自底向上地刪除子樹(shù)。當(dāng)刪除所有其子對(duì)象時(shí),只能刪除每個(gè)項(xiàng)。通過(guò)按照相反DN順序列出所有子對(duì)象來(lái)對(duì)此進(jìn)行管理。這保證刪除在其父對(duì)象之前的子對(duì)象。
其優(yōu)點(diǎn)是排序列表方法是更加復(fù)雜的遞歸使用的替代。此外,它相對(duì)簡(jiǎn)單和存儲(chǔ)器高效。當(dāng)按照DN對(duì)子樹(shù)中的所有項(xiàng)進(jìn)行排序并且以相反順序執(zhí)行刪除時(shí),這保證在其父對(duì)象之前刪除所有子對(duì)象。
例如,當(dāng)刪除企業(yè)服務(wù)時(shí),系統(tǒng)刪除與之相關(guān)的所有綁定模板,其TModel實(shí)例信息,和各種相關(guān)類別信息。通過(guò)刪除以企業(yè)服務(wù)為根的子樹(shù),可以刪除所有這些。
由于這個(gè)模式的設(shè)計(jì)中使用的層次結(jié)構(gòu),對(duì)象的DN揭示了所有關(guān)系鏈和對(duì)象的控制。注意,推論也取決于名字屬性的精心選擇。
其優(yōu)點(diǎn)是能夠減少用來(lái)收集信息的搜索或讀取的數(shù)量。例如,對(duì)于作為子對(duì)象(例如名字)的搜索結(jié)果,每個(gè)項(xiàng)的DN揭示出父對(duì)象(例如企業(yè)實(shí)體)和所有者帳戶。
例如,企業(yè)服務(wù)的DN揭示出它屬于的企業(yè),以及控制它的用戶。
目錄不保證結(jié)果的任何順序。當(dāng)處理復(fù)雜結(jié)果(例如企業(yè)實(shí)體及其企業(yè)服務(wù),以及其適當(dāng)名字和描述)時(shí),通過(guò)得到搜索結(jié)果并按DN對(duì)其排序,能夠簡(jiǎn)化輸出的構(gòu)造。這對(duì)它們進(jìn)行組織,使得結(jié)果的構(gòu)造變得相對(duì)簡(jiǎn)單。在其子對(duì)象之前構(gòu)造每個(gè)對(duì)象,所以易于將子對(duì)象放置在其父對(duì)象下面,使得在其服務(wù)之前組織企業(yè)的結(jié)果。對(duì)象的所有子對(duì)象出現(xiàn)在相同類型的下一對(duì)象之前,一個(gè)企業(yè)的全部服務(wù)在下一企業(yè)出現(xiàn)之前。這也允許簡(jiǎn)單的遞歸構(gòu)造,因?yàn)橄嗤牡览磉m用于每個(gè)層次。
其優(yōu)點(diǎn)是使構(gòu)造UDDI結(jié)構(gòu)所需的遍歷原始項(xiàng)列表的次數(shù)最小。
例如,在排序之后,企業(yè)A的結(jié)果后面跟有其第一服務(wù)AA的結(jié)果,該服務(wù)的名字,A的第二服務(wù)AB,及其名字,接著是第二企業(yè)B。
也可以對(duì)子對(duì)象執(zhí)行搜索。例如,頻繁搜索請(qǐng)求可以是″通過(guò)發(fā)現(xiàn)一個(gè)(或更多)其子對(duì)象來(lái)發(fā)現(xiàn)x″。通過(guò)搜索能夠發(fā)現(xiàn)企業(yè)的一個(gè)方式是指定例如綁定模板中出現(xiàn)的TModel。換言之,查詢是″發(fā)現(xiàn)具有一服務(wù)的所有企業(yè),該服務(wù)具有引用這個(gè)模型的綁定模板″。通過(guò)發(fā)現(xiàn)派生對(duì)象的DN并且丟棄不期望的層次以產(chǎn)生企業(yè)實(shí)體的DN,能夠進(jìn)行這些查詢。有利的是,這也消除了復(fù)制。這個(gè)搜索方法部分源于本發(fā)明實(shí)施例的層次結(jié)構(gòu)。
保證唯一的關(guān)鍵字的使用簡(jiǎn)化了工作。能夠針對(duì)單個(gè)關(guān)鍵字搜索整個(gè)數(shù)據(jù)庫(kù),并且唯一性保證或者沒(méi)有結(jié)果(如果不存在該關(guān)鍵字),或者有一個(gè)結(jié)果(如果它存在)。不必費(fèi)心將搜索限制在父對(duì)象的范圍內(nèi)。這由目錄產(chǎn)生增強(qiáng)的性能,因?yàn)樗軌蚴褂脭?shù)據(jù)庫(kù)索引進(jìn)行優(yōu)化。
其優(yōu)點(diǎn)是利用了最快速類型的目錄查詢。另一個(gè)優(yōu)點(diǎn)是在從另一個(gè)對(duì)象引用指定對(duì)象的情況下,保證唯一的名字是重要的。
多數(shù)索引系統(tǒng)的特性在于它們是數(shù)據(jù)相關(guān)的。如果數(shù)據(jù)是″從小到大的″(最左部分最迅速地改變),則該數(shù)據(jù)往往被擴(kuò)展,所以索引能夠提供最大性能。反之,如果數(shù)據(jù)是重復(fù)的,則索引不能非常有效。能夠使用UUID(全局唯一標(biāo)識(shí)符)算法,其表現(xiàn)出″從小到大″特性。其優(yōu)點(diǎn)是使目錄性能最大。
關(guān)鍵字可以被加到導(dǎo)出對(duì)象上。在重復(fù)數(shù)據(jù)單元被加到子對(duì)象的情況下,需要增加名字屬性,這會(huì)形成其DN的最后的弧。在目錄中,名字屬性不同于其兄弟對(duì)象,因?yàn)橄嗤笇?duì)象的任意2個(gè)子對(duì)象均不會(huì)具有相同名字。
可以使用兩種關(guān)鍵字。對(duì)于不要求順序的子對(duì)象,使用UUID,因?yàn)檫@些被保證是唯一的。如果順序是重要的,則具有單調(diào)增加特性的關(guān)鍵字被用來(lái)保證順序。
在UDDI標(biāo)準(zhǔn)中,企業(yè)實(shí)體能夠提供兩種服務(wù)它控制的服務(wù)(在數(shù)據(jù)庫(kù)中通過(guò)子對(duì)象表示),和它對(duì)其提供接口的服務(wù),盡管它們由另一個(gè)企業(yè)實(shí)體提供。在公開(kāi)的UDDI數(shù)據(jù)庫(kù)中通過(guò)別名表示后者。別名確切地提供正確的特性。例如,如果其所有者以某種方式改變初始對(duì)象(服務(wù))(或許增加另一個(gè)綁定模板),則通過(guò)別名引用的對(duì)象也″改變″。此外,在企業(yè)實(shí)體下面對(duì)服務(wù)的任何搜索會(huì)產(chǎn)生真實(shí)和帶別名的服務(wù)。
例如,別名能夠被用于服務(wù)投影,其中企業(yè)能夠指向另一個(gè)企業(yè)下面定義的服務(wù)。
其優(yōu)點(diǎn)是起作用的別名允許基本上涉及要自動(dòng)提供的″替代名字″的功能。此外,如果目錄支持別名完整性,則如果刪除原始服務(wù),那么任何投影會(huì)被自動(dòng)清除。
在UDDI標(biāo)準(zhǔn)中,存在若干地方,其中我們不希望直接引用到另一個(gè)對(duì)象,而是希望引用到中間步驟-例如在TModel實(shí)例信息的情況下,或是引用到發(fā)布者聲明中的企業(yè)實(shí)體。在這些情況下,別名會(huì)使代碼復(fù)雜。因此,本系統(tǒng)可以使用對(duì)對(duì)象的引用。因?yàn)楦鶕?jù)實(shí)施例的本系統(tǒng)保證每個(gè)對(duì)象具有唯一關(guān)鍵字,則該關(guān)鍵字確切充當(dāng)引用,有時(shí)被稱為″外″鍵。
能夠使用輔助對(duì)象類執(zhí)行屬性分組。在處理發(fā)布者聲明時(shí),需要使用唯一標(biāo)識(shí)發(fā)布者聲明的3個(gè)屬性2個(gè)企業(yè)實(shí)體關(guān)鍵字,和其間的關(guān)系找到發(fā)布者聲明的能力。
然而,關(guān)系被指定為鍵值標(biāo)識(shí)引用(keyed reference),其自身是3個(gè)不同屬性TModel關(guān)鍵字,鍵名和鍵值。一種方式是將這個(gè)關(guān)系存儲(chǔ)為發(fā)布者聲明的子對(duì)象。然而這不允許對(duì)特定發(fā)布者聲明進(jìn)行最高效的搜索。通過(guò)使關(guān)系鍵值標(biāo)識(shí)引用(relationship keyed reference)作為發(fā)布者聲明項(xiàng)的輔助類,可以在單個(gè)搜索中搜索所有5個(gè)屬性,于是確切隔離出所需的發(fā)布者聲明對(duì)象。
這個(gè)模式的一個(gè)設(shè)計(jì)可以使用普通面向?qū)ο笤O(shè)計(jì)技術(shù),并且產(chǎn)生例如具有相同屬性名字的所有鍵值標(biāo)識(shí)引用。然而,這個(gè)設(shè)計(jì)會(huì)使得更加難以隔離例如企業(yè)實(shí)體類別鍵值標(biāo)識(shí)引用和避免使其與TModel類別鍵值標(biāo)識(shí)引用的混淆,并且使之成本更高。也會(huì)使得有必要在過(guò)濾器中包含對(duì)象類項(xiàng),并且這樣的項(xiàng)是弱的(在數(shù)據(jù)庫(kù)中高度重復(fù))。
例如為每個(gè)不同類型的鍵值標(biāo)識(shí)引用提供不同對(duì)象類和不同屬性名字意味著對(duì)特定屬性名字的任何搜索有必要隱含對(duì)象類。也意味著目錄服務(wù)器能夠構(gòu)造這樣的索引,該索引只在其中具有針對(duì)特定類型的期望項(xiàng)的項(xiàng)。這種索引會(huì)更小并且因此更快速。
例如,類似″e(cuò)uBusinessEntityName=Smith*′的搜索會(huì)查詢針對(duì)euBusinessEntityName的索引,所以不能與在稱作euTModeIName的屬性中包含Smith的項(xiàng)混淆。
這需要UDDI標(biāo)準(zhǔn)范圍以外的工具。這種工具可能需要提供進(jìn)行超出UDDI標(biāo)準(zhǔn)中指定的范圍的訪問(wèn)的手段。為允許這種工具,本發(fā)明定義抽象類,抽象類綁定表示單個(gè)UDDI概念的所有對(duì)象類。這允許定義能夠查看例如所有名字或所有鍵值標(biāo)識(shí)引用的搜索。
例如,存在抽象類euName,它是包含euBusinessEntityName和euTModeIName的所有名字型對(duì)象類的超類。
UDDI標(biāo)準(zhǔn)規(guī)定可以以例如大小寫(xiě)敏感和大小寫(xiě)不敏感的方式搜索名字。這可以通過(guò)大小寫(xiě)不敏感地進(jìn)行索引,并且接著檢索各個(gè)項(xiàng)并且大小寫(xiě)敏感地對(duì)其進(jìn)行檢查來(lái)實(shí)現(xiàn),但是這種方案以性能為代價(jià)。在這些情況下最好定義包含相同數(shù)據(jù)但是被不同索引的影像字段。類似地,影像屬性能夠被用于語(yǔ)言中的變化,例如可區(qū)別標(biāo)記。
例如,euBusinessEntityName對(duì)象類包含每個(gè)名字的2個(gè)拷貝。大小寫(xiě)不敏感地索引第一版本,大小寫(xiě)敏感地索引第二版本。這允許構(gòu)造無(wú)論請(qǐng)求何行為均最優(yōu)執(zhí)行的搜索過(guò)濾器。
這個(gè)數(shù)據(jù)庫(kù)中的每個(gè)屬性(對(duì)象類之外)可以是單值的。這使得目錄能夠構(gòu)造更加高效的索引,并且提供更好的搜索性能。
這也排除了搜索中產(chǎn)生虛假肯定結(jié)果的可能性。例如,考慮尋找以″Fr″為開(kāi)始并且以″nk″為結(jié)束的名字的搜索。可能預(yù)計(jì)這個(gè)搜索會(huì)產(chǎn)生具有類似″Frank″的名字的(有效)項(xiàng)。然而如果名字為多值屬性,則會(huì)得到具有類似″Fred″和″Tink″的2個(gè)名字的無(wú)效項(xiàng),因?yàn)檫@一個(gè)項(xiàng)與兩個(gè)規(guī)定的準(zhǔn)則匹配。通過(guò)使用單值名字(其每個(gè)是項(xiàng)的子對(duì)象),可排除″Fred″和″Tink″的虛假匹配。
操作屬性是由UDDI應(yīng)用管理但是用戶不可見(jiàn)的特殊屬性。
在UDDI數(shù)據(jù)的存儲(chǔ)中,應(yīng)當(dāng)能夠具有將使用中的TModel與已經(jīng)″撤消″的TModel區(qū)別開(kāi)的方式。當(dāng)TModel被刪除時(shí),它仍然會(huì)被通過(guò)許多使用,所以它不能被真正刪除。而是將其隱藏,這意味著它不會(huì)作為find TModel調(diào)用的結(jié)果的一部分被返回,而是仍然能夠通過(guò)get TModelDetal調(diào)用來(lái)查詢。這通過(guò)使用稱作euHidden的屬性來(lái)實(shí)現(xiàn),該屬性被加到被隱藏的TModel中。向搜索TModel的任何過(guò)濾器中增加排除包含euHidden屬性的任何項(xiàng)的搜索步驟是有好處和高效的。
在目錄實(shí)現(xiàn)中,具有主要為一個(gè)值的屬性通常被認(rèn)為是非常低效的。例如,99%的項(xiàng)具有被設(shè)置成假的隱藏屬性會(huì)產(chǎn)生不良性能-索引會(huì)相當(dāng)多地不可用。
被認(rèn)為是更多有效的方式是沒(méi)有隱藏屬性地存儲(chǔ)大多數(shù)項(xiàng),并且只向要隱藏的那些項(xiàng)增加屬性。這具有不需要存儲(chǔ)空間保存所有那些″假″值的附加好處?,F(xiàn)在,用于發(fā)現(xiàn)所有那些不被隱藏的TModel的過(guò)濾器變成″(!(euTModei=*))″-這是存在測(cè)試的否定,并且存在測(cè)試是快速的,尤其是當(dāng)屬性只存在于小部分的項(xiàng)中時(shí)。
現(xiàn)在描述用于解決在目錄環(huán)境中的實(shí)現(xiàn)和UDDI標(biāo)準(zhǔn)的問(wèn)題的本發(fā)明實(shí)施例。存在若干針對(duì)X.500模式的元素。這些元素包含屬性定義,對(duì)象類定義和名字綁定定義。屬性定義規(guī)定單個(gè)數(shù)據(jù)單元,從而為其指定唯一標(biāo)識(shí)符(OID),名字和數(shù)據(jù)類型。對(duì)象類定義規(guī)定作為整體操作的屬性集合。它指定唯一標(biāo)識(shí)符(OID),名字和屬性列表;屬性可以是所需的或可選的。名字綁定規(guī)定可能的層次結(jié)構(gòu)的部分。名字綁定規(guī)定可以存儲(chǔ)在另一個(gè)對(duì)象類下面的一個(gè)對(duì)象類,并且規(guī)定子對(duì)象的屬性(多個(gè)屬性),它在這個(gè)上下文中命名該子對(duì)象。
存在若干提出附加設(shè)計(jì)要求的發(fā)現(xiàn)限定符。一個(gè)發(fā)現(xiàn)限定符是大小寫(xiě)敏感性,用于提供以大小寫(xiě)敏感和大小寫(xiě)不敏感的方式高效搜索文本數(shù)據(jù)的能力。
根據(jù)本發(fā)明的實(shí)施例,通過(guò)在對(duì)象中提供不同索引的附加字段能夠解決大小寫(xiě)敏感問(wèn)題。根據(jù)這個(gè)實(shí)施例,文本數(shù)據(jù)在類型caseExactString的屬性和類型caseIgnoreString的屬性中被存儲(chǔ)兩次。發(fā)現(xiàn)限定符確定搜索的字段,從而產(chǎn)生最大性能。
例如,如果企業(yè)實(shí)體具有類似″McKenna′s Iron FoundryServices″的名字,則該串會(huì)被存儲(chǔ)兩次,一次是在大小寫(xiě)敏感地索引的字段中,一次是在大小寫(xiě)不敏感地索引的字段中-存儲(chǔ)的數(shù)據(jù)相同,但是基礎(chǔ)目錄所產(chǎn)生的索引不同。
另一個(gè)問(wèn)題涉及高效實(shí)現(xiàn)服務(wù)投影。根據(jù)本發(fā)明的實(shí)施例,可以使用X.500別名設(shè)施解決這個(gè)問(wèn)題。存在若干能夠處理服務(wù)投影的方式。本發(fā)明的這個(gè)實(shí)施例通過(guò)目錄別名處理它們。這是實(shí)現(xiàn)它們的特別高效的方式。它保證投影與基服務(wù)的一致性,因?yàn)橥ㄟ^(guò)別名直接訪問(wèn)基服務(wù)。它也保證投影會(huì)在刪除基服務(wù)時(shí)消失,于是保證一致性。
例如,如果稱作Williams會(huì)計(jì)服務(wù)的企業(yè)實(shí)體發(fā)布稱作總帳交叉核對(duì)的WEB服務(wù),并且希望在稱作Williams審計(jì)服務(wù)的第二企業(yè)實(shí)體下面提供這個(gè)相同服務(wù),這可以通過(guò)將別名項(xiàng)放置在第二企業(yè)實(shí)體下面來(lái)實(shí)現(xiàn)。列舉Williams審計(jì)服務(wù)提供的服務(wù)的查詢方會(huì)發(fā)現(xiàn)總帳交叉核對(duì)服務(wù),就象其會(huì)發(fā)現(xiàn)Williams審計(jì)服務(wù)直接提供的任何服務(wù)那樣。
另一個(gè)問(wèn)題涉及高效實(shí)現(xiàn)關(guān)鍵字。根據(jù)本發(fā)明的實(shí)施例,這通過(guò)使用外部關(guān)鍵字和其中順序不重要的關(guān)鍵字的UUID來(lái)解決。在順序很重要的情況下可以使用序號(hào)。盡管關(guān)鍵字被表示成串,然而它們不是真正的文本數(shù)據(jù)。在對(duì)大小寫(xiě)或可區(qū)別標(biāo)記不敏感的情況下對(duì)其進(jìn)行比較。
外部可見(jiàn)的關(guān)鍵字遵循一組規(guī)則。當(dāng)實(shí)現(xiàn)符合UDDI規(guī)范的版本2的數(shù)據(jù)庫(kù)時(shí),它們保存符合ISO-11578的UUID。當(dāng)實(shí)現(xiàn)符合UDDI規(guī)范的版本3的數(shù)據(jù)庫(kù)時(shí),它們保存遵循該版本規(guī)范中設(shè)定的規(guī)則的鍵串。
注意,內(nèi)部用來(lái)將單元鏈接在一起的關(guān)鍵字遵循另一個(gè)組規(guī)則。那些順序不重要的關(guān)鍵字使用UUID。在順序很重要的情況下使用序號(hào)。
例如,表示稱作Williams審計(jì)服務(wù)的企業(yè)實(shí)體的類別包的單元的鍵值標(biāo)識(shí)引用可以引用具有關(guān)鍵字12345678-1234-1234-1234-1234567890ab(UDDIv2)的TModel。類別包中鍵值標(biāo)識(shí)引用的順序不重要,但是鍵值標(biāo)識(shí)引用需要充當(dāng)對(duì)象的名字屬性的關(guān)鍵字。于是我們可以產(chǎn)生這個(gè)對(duì)象的有些類似于87654321-4321-4321-4321-ba0123456789的UUID關(guān)鍵字,并且使用其作為這個(gè)對(duì)象在目錄中的名字屬性。
另一個(gè)問(wèn)題是在期望X.500分布的情況下,數(shù)據(jù)可以被組織到域中。根據(jù)本發(fā)明的實(shí)施例,這通過(guò)在用戶之上建立數(shù)據(jù)庫(kù)層來(lái)解決,因而每個(gè)數(shù)據(jù)庫(kù)能夠被放到不同的服務(wù)器上。
UDDI標(biāo)準(zhǔn)不允許名字空間是分布式的。這意味著通過(guò)復(fù)制或通過(guò)透明地具有管理分布式名字空間的后臺(tái)數(shù)據(jù)存儲(chǔ),多個(gè)UDDI注冊(cè)中心能夠彼此配合操作。
具有名字前綴的每個(gè)數(shù)據(jù)庫(kù)能夠利于分布式名字空間。這個(gè)前綴是定義域的一組節(jié)點(diǎn)。這些節(jié)點(diǎn)能夠被認(rèn)為是每個(gè)UDDI注冊(cè)中心之上的數(shù)據(jù)庫(kù)層。這些節(jié)點(diǎn)被放置在用戶層之上。
圖11圖解了稱作″域″110的這種節(jié)點(diǎn)的例子。域110是目錄前綴,并且可以包含直至根的一或多個(gè)節(jié)點(diǎn)。在域110下面,這個(gè)例子圖解了例如若干用戶112,113和114的排列。根據(jù)本系統(tǒng)的特定配置和/或用途,可以改變域110下面排列的用戶的數(shù)量。也可以存在根據(jù)本系統(tǒng)的特定配置和/或用途而排列的若干個(gè)域。在下面的例子中,它們被稱為數(shù)據(jù)庫(kù)對(duì)象,表明它們表示分立的物理數(shù)據(jù)庫(kù)。當(dāng)然,根據(jù)本系統(tǒng)的配置和/或用途,也可以不必如此。
數(shù)據(jù)庫(kù)對(duì)象需要名字屬性,但僅此而已。
set object-class uddiObjectClass400={#數(shù)據(jù)庫(kù)-可以用于將用戶分成組name=euRepositorysubclass-of topmust-containeuRepositoryName};分布是大規(guī)模目錄部署中的重要概念,因?yàn)樗试S多個(gè)節(jié)點(diǎn)共享數(shù)據(jù),但沒(méi)有巨大的帶寬開(kāi)銷(xiāo)和復(fù)制的同步問(wèn)題。
在一個(gè)實(shí)施例中,′eTrust′UDDI支持使用基礎(chǔ)eTrust目錄服務(wù)器的能力的分布,并且為此相應(yīng)構(gòu)造了模式,其中允許在樹(shù)層次結(jié)構(gòu)的頂端有虛擬′域′節(jié)點(diǎn),并且在每個(gè)節(jié)點(diǎn)子樹(shù)的頂端有唯一節(jié)點(diǎn)標(biāo)識(shí)符或名字(參見(jiàn)下面的UDDI模式描述)。
此外,通過(guò)配置可以使eTrust UDDI服務(wù)器′了解分布′。能夠指定2個(gè)分立的目錄前綴-一個(gè)用于搜索和讀取,另一個(gè)用于增加項(xiàng)。為部署分布式服務(wù)器,按照eTrust目錄管理指南為分布而構(gòu)造基礎(chǔ)eTrust目錄服務(wù)器代理。每個(gè)分立eTrust UDDI節(jié)點(diǎn)配有唯一節(jié)點(diǎn)名字。每個(gè)節(jié)點(diǎn)的搜索/讀取前綴被設(shè)置成′世界′或′公司′節(jié)點(diǎn)名字。每個(gè)節(jié)點(diǎn)的增加前綴被設(shè)置成該節(jié)點(diǎn)的唯一名字。
通過(guò)這種方式,每個(gè)節(jié)點(diǎn)向其自身的目錄數(shù)據(jù)庫(kù)增加項(xiàng),但是通過(guò)X.500目錄的分布特性在所有節(jié)點(diǎn)上搜索項(xiàng)。
數(shù)據(jù)庫(kù)對(duì)象的例子可以是euRepositoryName=Melbourne另一個(gè)問(wèn)題涉及組織所保存的有關(guān)用戶的數(shù)據(jù)。這可以通過(guò)建立用戶對(duì)象以保存數(shù)據(jù)來(lái)解決。
盡管UDDI規(guī)范中沒(méi)有規(guī)定用戶對(duì)象,然而可以根據(jù)本發(fā)明的實(shí)施例使用這種對(duì)象。例如,除其它以外,用戶對(duì)象可以是用戶證書(shū)的存儲(chǔ)點(diǎn),和用于發(fā)布的錨標(biāo)點(diǎn)。
圖10圖解了稱作′用戶′101的這種結(jié)構(gòu)的例子。在用戶101下面,這個(gè)例子圖解了其它對(duì)象,例如企業(yè)實(shí)體對(duì)象102,企業(yè)服務(wù)對(duì)象103和綁定模板對(duì)象104的結(jié)構(gòu)。根據(jù)本系統(tǒng)的特定配置和/或用途可以改變用戶101下面排列的企業(yè)實(shí)體對(duì)象的數(shù)量。也可以存在根據(jù)本系統(tǒng)的特定配置和/或用途而排列的若干個(gè)用戶。
用戶對(duì)象中保存的數(shù)據(jù)單元包含用戶關(guān)鍵字(用來(lái)提供這個(gè)用戶帳戶的唯一名字),用戶名稱,和證書(shū)(可以如口令那樣簡(jiǎn)單,或如PKI證書(shū)那樣復(fù)雜)。它也可以包含授權(quán)名字(標(biāo)識(shí)授權(quán)操作用戶帳戶的人員或角色)。它也可以包含在處理用戶帳戶的刪除但不丟失用戶定義的任何TModel時(shí)使用的隱藏標(biāo)記。
set object-class uddiObjectClass401={#用戶帳戶name=euUserAccountsubclass-of topmust-containeuUserKey,euUserName,euCredentialsmay-containeuAuthorizedName,euHidden};
用戶帳戶對(duì)象的例子可以是euUserKey=23456789-2345-2345-2345-234567890abceuUserName=GraceeuCredentials=Amazing76sQ(在這個(gè)例子中假定已經(jīng)實(shí)現(xiàn)簡(jiǎn)單的userid和口令系統(tǒng))另一個(gè)問(wèn)題涉及以高效方式表示涉及企業(yè)實(shí)體(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)將唯一字段表示為對(duì)象的屬性并且將重復(fù)單元表示為子對(duì)象來(lái)解決此問(wèn)題。
企業(yè)實(shí)體對(duì)象是UDDI標(biāo)準(zhǔn)的基本成分。其內(nèi)容由標(biāo)準(zhǔn)定義,但是其許多單元是X.500模式不支持的重復(fù)復(fù)雜對(duì)象。通過(guò)層次結(jié)構(gòu)表示這種單元。
企業(yè)實(shí)體中唯一需要的單元是企業(yè)關(guān)鍵字。可選單元包含授權(quán)名字,操作人員和用戶關(guān)鍵字(這最后會(huì)出現(xiàn)在普通用戶發(fā)布的企業(yè)實(shí)體中)。
set object-class uddiObjectClass402={#企業(yè)實(shí)體-提供服務(wù)的實(shí)體的細(xì)節(jié)name=euBusinessEntitysubclass-of topmust-containeuBusinessEntityKeymay-containeuParentUserKey,euAuthorizedName,};企業(yè)實(shí)體的可能子對(duì)象是名字(為排序而加鍵值標(biāo)識(shí)、包含名字串和語(yǔ)言代碼的對(duì)象);描述(為排序而加鍵值標(biāo)識(shí)、包含描述串和語(yǔ)言代碼的對(duì)象);聯(lián)系(復(fù)雜對(duì)象-以后描述);發(fā)現(xiàn)URL(包含URL串和使用類型的對(duì)象,加鍵值標(biāo)識(shí));通過(guò)選擇對(duì)象類而被標(biāo)記為類別或標(biāo)識(shí)符信息的鍵值標(biāo)識(shí)引用;和企業(yè)服務(wù)(如下所述)。
企業(yè)實(shí)體對(duì)象的例子可以是euBusinessEntityKey=34567890-3456-3456-3456-34567890abcdeuParentUserKey=23456789-2345-2345-2345-234567890abc注意,企業(yè)實(shí)體對(duì)象的大部分明顯內(nèi)容實(shí)際被存儲(chǔ)在作為企業(yè)實(shí)體對(duì)象的直接子對(duì)象的對(duì)象中。
圖15根據(jù)本發(fā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子。在圖15中,多值單元對(duì)于子對(duì)象152語(yǔ)言en名字CA對(duì)于子對(duì)象153語(yǔ)言IN名字CATS被表示成企業(yè)實(shí)體151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)要解決的問(wèn)題涉及以高效方式表示涉及企業(yè)服務(wù)(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。
根據(jù)本發(fā)明的實(shí)施例,通過(guò)將唯一字段表示為對(duì)象的屬性并且將重復(fù)單元表示為子對(duì)象來(lái)解決此問(wèn)題。
可以以至少兩個(gè)方式實(shí)現(xiàn)企業(yè)服務(wù)。第一個(gè)方式是企業(yè)服務(wù)表示企業(yè)實(shí)體提供的、可通過(guò)一或多個(gè)訪問(wèn)路徑得到的單個(gè)概念性服務(wù),其中每個(gè)訪問(wèn)路途由綁定模板表示。第二個(gè)方式是企業(yè)服務(wù)作為服務(wù)的分組機(jī)制,其中在綁定模板層次劃分為各個(gè)服務(wù)。在任一情況下,在UDDI規(guī)范中定義了數(shù)據(jù)字段。
企業(yè)服務(wù)的單元是企業(yè)和服務(wù)關(guān)鍵字。企業(yè)關(guān)鍵字指定擁有服務(wù)的企業(yè)實(shí)體。這不必是在其下進(jìn)行發(fā)現(xiàn)的企業(yè)實(shí)體。通過(guò)服務(wù)投影可以在若干企業(yè)實(shí)體下面發(fā)現(xiàn)單個(gè)服務(wù)。服務(wù)關(guān)鍵字是整個(gè)UDDI數(shù)據(jù)庫(kù)中服務(wù)的唯一標(biāo)識(shí)符。兩個(gè)關(guān)鍵字被表示成串。
set object-class uddiObjectClass403=
{#企業(yè)name=euBusinessServicesubclass-of topmust-containeuBusinessServiceKey,euParentBusinessKey};沒(méi)有企業(yè)服務(wù)對(duì)象的可選內(nèi)容。所有其它內(nèi)容包括可能的重復(fù)單元,所以被表示成子對(duì)象。企業(yè)服務(wù)的潛在子對(duì)象是綁定模板(見(jiàn)下文);名字(為排序而加鍵值標(biāo)識(shí)、包含名字串和語(yǔ)言代碼的對(duì)象);描述(為排序而加鍵值標(biāo)識(shí)、包含描述串和語(yǔ)言代碼的對(duì)象);和標(biāo)記為類別信息的鍵值標(biāo)識(shí)引用。
例如,企業(yè)服務(wù)對(duì)象可以是euBusinessServiceKey=4567890a-4567-4567-4567-4567890abcdeeuParentBusinessKey=34567890-3456-3456-3456-34567890abcd注意,企業(yè)服務(wù)對(duì)象的大部分明顯內(nèi)容實(shí)際被存儲(chǔ)在作為企業(yè)服務(wù)對(duì)象的直接子對(duì)象的對(duì)象中。
盡管圖15根據(jù)本發(fā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子,然而它同樣圖解了根據(jù)本發(fā)明實(shí)施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示企業(yè)服務(wù)中相對(duì)復(fù)雜對(duì)象的例子。圖15的企業(yè)實(shí)體151同樣適用于企業(yè)服務(wù),其中企業(yè)服務(wù)的多值單元被表示成企業(yè)服務(wù)151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)問(wèn)題涉及以高效方式表示涉及綁定模板(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)將唯一字段表示為對(duì)象的屬性并且將重復(fù)單元表示為子對(duì)象來(lái)解決此問(wèn)題。
綁定模板表示可以訪問(wèn)具體服務(wù)的方式。唯一需要的綁定模板的單元是其關(guān)鍵字,和它應(yīng)用到的服務(wù)的關(guān)鍵字??蛇x單元可以包含接入點(diǎn)或駐留重定向器(對(duì)象應(yīng)當(dāng)確切具有其中的一個(gè))。如果提供接入點(diǎn),則也應(yīng)當(dāng)提供接入點(diǎn)類型。
set object-class uddiObjectC1ass404={#綁定模板name=euBindingTemplatesubclass-of topmust-containeuBindingTemplateKeymay-containeuParentServiceKey,euHostingRedirector,euAccessPoint,euAccessPointType};綁定模板的可能子對(duì)象是TModel實(shí)例信息(見(jiàn)下文);和描述(為排序而加鍵值標(biāo)識(shí)、包含描述串和語(yǔ)言代碼的對(duì)象)。
綁定模板的例子可以是euBindingTemplateKey =567890ab-5678-5678-5678-567890abcdefeuParentServiceKey=4567890a-4567-4567-4567-4567890abcdeeuAccessPoint=http//www.rsps.com.au/wsepeuAccessPointType=http.
再次地,盡管圖15根據(jù)本發(fā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子,然而它同樣圖解了根據(jù)本發(fā)明實(shí)施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示綁定模板中相對(duì)復(fù)雜對(duì)象的例子。圖15的企業(yè)實(shí)體151同樣適用于綁定模板,其中綁定模板的多值單元被表示成綁定模板151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)問(wèn)題涉及以高效方式表示涉及TModel(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)將唯一字段表示為對(duì)象的屬性并且將重復(fù)單元表示為子對(duì)象來(lái)解決此問(wèn)題。
TModel表示一個(gè)思路。該思路可以是例如分類系統(tǒng),從而需要指定可以確認(rèn)的值。它也可以是數(shù)據(jù)通信協(xié)議規(guī)范。TModel是靈活和強(qiáng)力的概念,并且以UDDI以能夠精確查詢的方式表示復(fù)雜數(shù)據(jù)的能力為中心。
唯一需要的TModel對(duì)象的單元是TModel關(guān)鍵字和名字。這些被表示成串。
TModel對(duì)象的可選單元是授權(quán)名字,概述URL(概述文檔對(duì)象的部分),用戶關(guān)鍵字和隱藏標(biāo)記。
隱藏標(biāo)記是TModel的處理的單元。隱藏標(biāo)記是如何處理deleteTModel調(diào)用。當(dāng)TModel被″刪除″時(shí),隱藏標(biāo)記被加到對(duì)象中。這意味著不會(huì)向findTModel調(diào)用返回對(duì)象,但是可被getTModel調(diào)用訪問(wèn)。
set object-class uddiObjectClass405={#tmodel-對(duì)概念的引用name=euTModelsubclass-of topmust-containeuTModeIKey,euTModeiNamemay-containeuAuthorizedName,euOperator,euOverviewURL,euParentUserKey,euHidden};可能的子對(duì)象是描述(為排序而加鍵值標(biāo)識(shí)、包含描述串和語(yǔ)言代碼的對(duì)象);標(biāo)記為類別或標(biāo)識(shí)符信息的鍵值標(biāo)識(shí)引用;和概述文檔描述(為排序而加鍵值標(biāo)識(shí)、包含描述串和語(yǔ)言代碼的對(duì)象)。
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ā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子,然而它同樣圖解了根據(jù)本發(fā)明實(shí)施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示TModel中相對(duì)復(fù)雜對(duì)象的例子。圖15的企業(yè)實(shí)體151同樣適用于TModel,其中TModel的多值單元被表示成TModel151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)問(wèn)題涉及以高效方式表示涉及發(fā)布者聲明(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。
根據(jù)本發(fā)明的實(shí)施例,通過(guò)將唯一字段表示為對(duì)象的屬性并且將輔助類用于所需關(guān)系鍵值標(biāo)識(shí)引用來(lái)解決此問(wèn)題。
發(fā)布者聲明是表示2個(gè)企業(yè)實(shí)體之間的關(guān)系的對(duì)象。
發(fā)布者聲明的所需單元是其關(guān)鍵字,到達(dá)和來(lái)自企業(yè)(to andfrom business)和用戶關(guān)鍵字,狀態(tài)和關(guān)系。關(guān)系被指定為鍵值標(biāo)識(shí)引用,并且被存儲(chǔ)為發(fā)布者聲明項(xiàng)的輔助類。狀態(tài)被存儲(chǔ)為串,但是從完成狀態(tài)對(duì)象提出其可能的值。所有關(guān)鍵字被表示成串。
set object-class uddiObjectClass406={#發(fā)布者聲明-兩個(gè)企業(yè)之間的關(guān)系name=euPublisherAssertionsubclass-of topmust-containeuPublisherAssertionKey,euFromBusinessKey,euFromUserKey,euToBusinesKey,
euToUserKey,euPublisherAssertionStatus}在發(fā)布者聲明中沒(méi)有可選內(nèi)容,并且沒(méi)有子對(duì)象。
發(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注意,會(huì)存在與這個(gè)項(xiàng)相關(guān)的輔助類;它會(huì)具有對(duì)象類euPublisherAssertionRelationshipKeyedReference,并且會(huì)指定在所命名的2個(gè)企業(yè)實(shí)體之間聲明的關(guān)系。一個(gè)例子可以是euPublisherAssertionTModel=uuid807A2C6A-EE22-470D-ADC7-E0424A337C03euPublisherAssertionKeyName=wholly-owned subsidiaryeuPublisherAssertionKeyValue=parent-child另一個(gè)問(wèn)題涉及以高效方式表示涉及鍵值標(biāo)識(shí)引用(UDDI標(biāo)準(zhǔn)中描述的對(duì)象類)的數(shù)據(jù)。能夠高效搜索鍵值標(biāo)識(shí)引用的特定集合的需要使得這個(gè)更加復(fù)雜例如企業(yè)實(shí)體上的類別包。
根據(jù)本發(fā)明的實(shí)施例,通過(guò)建立表示鍵值標(biāo)識(shí)引用的抽象基類并且針對(duì)每個(gè)期望集合將分為子類來(lái)解決這個(gè)問(wèn)題。集合在目錄中不具有表示。例如,它們的存在不超過(guò)相同子類的一組鍵值標(biāo)識(shí)引用,從而作為相同對(duì)象的子對(duì)象存在。例如,企業(yè)實(shí)體的類別包是類euBusinessEntityCategoryKeyedReference的對(duì)象,其作為指定企業(yè)實(shí)體的子對(duì)象。注意,企業(yè)實(shí)體對(duì)象能夠具有作為子對(duì)象的若干鍵值標(biāo)識(shí)引用對(duì)象,其中只有其對(duì)象類清楚哪些是類別包的一部分,哪些是標(biāo)識(shí)符包的一部分。
在UDDI數(shù)據(jù)模型內(nèi)的若干位置使用鍵值標(biāo)識(shí)引用。它們包含TModel關(guān)鍵字,鍵名和鍵值。鍵值標(biāo)識(shí)引用的2個(gè)用途是類別包和標(biāo)識(shí)符包。這些包是鍵值標(biāo)識(shí)引用的集合,并且對(duì)于搜索是重要的。如果這些包通過(guò)包含無(wú)差別鍵值標(biāo)識(shí)引用的對(duì)象來(lái)表示,則可能相當(dāng)難以實(shí)現(xiàn)高效搜索。這就是實(shí)現(xiàn)鍵值標(biāo)識(shí)引用的若干子類的原因。通過(guò)類euBusinessEntityCategoryKeyedReference的一或多個(gè)子對(duì)象表示企業(yè)實(shí)體上的類別包。這使得易于用其類別包中的指定鍵值標(biāo)識(shí)引用實(shí)現(xiàn)對(duì)企業(yè)實(shí)體的高效搜索。
下面的例子示出如上所述的抽象類和導(dǎo)出類之一euBusinessEntityCategoryKeyedReference。注意,從抽象類繼承針對(duì)鍵值標(biāo)識(shí)引用的關(guān)鍵字,而TModel關(guān)鍵字,鍵名和鍵值全部在導(dǎo)出類中指定,所以它們可以具有用于搜索的有區(qū)別的名字。
set object-class uddiObjectClass201={#作為所有鍵值標(biāo)識(shí)引用的父節(jié)點(diǎn)的抽象類name=euKeyedReferencesubclass-of topmust-containeuKeyedReferenceKey};set object-class uddiObjectCalss301={#企業(yè)實(shí)體類別鍵值標(biāo)識(shí)引用-集合構(gòu)成類別包name=euBusinessEntityCategoryKeyedReferencesubclass-of euKeyedReferencemust-containeuBusinessEntityCategoryTModel,euBusinessEntityCategoryKeyName,euBusinessEntityCategoryKeyValue};
聯(lián)系是復(fù)雜對(duì)象,表示各種信息。非常類似于企業(yè)實(shí)體,聯(lián)系保存各種復(fù)合重復(fù)單元,從而有必要使用子對(duì)象類。
直接作為聯(lián)系對(duì)象的一部分的僅有數(shù)據(jù)單元是關(guān)鍵字,和聯(lián)系表示的人員或角色的名字。存在可選的使用類型。
所有其它的可能單元是聯(lián)系對(duì)象的子對(duì)象。這些是地址(地址行對(duì)象的排序列表的父對(duì)象,每個(gè)具有關(guān)鍵字,使用類型,排序代碼和TModel關(guān)鍵字);電話(電話號(hào)碼加上使用類型);電子郵件(電子郵件地址加上使用類型);和描述(描述串加上語(yǔ)言代碼)。
再次地,盡管圖15根據(jù)本發(fā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子,然而它同樣圖解了根據(jù)本發(fā)明實(shí)施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示聯(lián)系對(duì)象中相對(duì)復(fù)雜對(duì)象的例子。圖15的企業(yè)實(shí)體151同樣適用于聯(lián)系對(duì)象,其中聯(lián)系對(duì)象的多值單元被表示成聯(lián)系對(duì)象151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)問(wèn)題涉及以高效方式表示名字和描述(UDDI標(biāo)準(zhǔn)中指定),以及允許快速搜索特定類型的名字或描述。
根據(jù)本發(fā)明的實(shí)施例,系統(tǒng)建立抽象基類以表示名字,并且建立另一個(gè)抽象基類以表示描述,而且針對(duì)每個(gè)期望類型將其劃分子類。當(dāng)尋找特定類型的名字(例如企業(yè)實(shí)體名字)時(shí)搜索子類的屬性,并且當(dāng)尋找任何名字時(shí)搜索抽象類。
若干主要對(duì)象(企業(yè)實(shí)體,企業(yè)服務(wù)等等)具有多個(gè)名字和描述的選項(xiàng)。其原因是多重的。通過(guò)多個(gè)名字得知企業(yè)并不是不常見(jiàn)的,其中或許有一個(gè)正式名字,一或多個(gè)非正式名字。此外,企業(yè)可以使用不同語(yǔ)言的不同名字。例如,名字的翻譯不佳并不是不常見(jiàn)的現(xiàn)象。例如,計(jì)算機(jī)公司Fujitsu在說(shuō)英語(yǔ)的國(guó)家使用名字Facom許多年。在具有多字符集的語(yǔ)言中問(wèn)題會(huì)更加惡化。日本公司的名字會(huì)具有一個(gè)片假名版本,和另一個(gè)平假名版本。
基于這些原因和其它原因,對(duì)于一個(gè)單獨(dú)的對(duì)象,名字和描述對(duì)象會(huì)出現(xiàn)多次。每個(gè)實(shí)例被標(biāo)記上語(yǔ)言代碼。在UDDI版本3中可以有具有相同語(yǔ)言代碼的多個(gè)實(shí)例(這在版本2中是不允許的)。
發(fā)現(xiàn)限定符加劇了混亂。如上所述,UDDI搜索需要支持大小寫(xiě)敏感和大小寫(xiě)不敏感搜索,并且這最好通過(guò)在X.500目錄中存儲(chǔ)數(shù)據(jù)兩次來(lái)處理。
下面的例子示出用于企業(yè)實(shí)體的名字集合的抽象類和導(dǎo)出類之一euBusinessEntityNameset object-class uddiObjectClass202={#作為所有名字的父節(jié)點(diǎn)的抽象類name=euNamesubclass-of topmust-containeuNameKeymay-containeuLanguage};set object-class uddiObjectClass331={#企業(yè)實(shí)體的名字name=euBusinessEntityNamesubclass-of euNamemust-containeuBusinessEntityNameValue,euBusinessEntityNameValueiC#從euName繼承euNameKey和euLanguage};注意,euBusinessEntityNameValue是包含名字的大小寫(xiě)敏感版本的屬性;而euBusinessEntityNameValuelC是標(biāo)記為″忽略大小寫(xiě)″的版本,于是是大小寫(xiě)不敏感的。從抽象類繼承的euNameKey字段被用來(lái)控制名字的排序,并且提供唯一名字屬性。
名字對(duì)象的例子可以是
euNameKey=890abcde-890a-890a-890a-890abcdef123euLanguage=ENeuBusinessEntityNameValue=McKenna′s Validation SystemseuBusinessEntityNameValuelC=McKenna′s Validation Systems再次地,盡管圖15根據(jù)本發(fā)明實(shí)施例圖解了引入層次結(jié)構(gòu)到子結(jié)構(gòu)中以表示企業(yè)實(shí)體中相對(duì)復(fù)雜對(duì)象的例子,然而它同樣圖解了根據(jù)本發(fā)明實(shí)施例將層次結(jié)構(gòu)引入到子結(jié)構(gòu)中以表示抽象類中相對(duì)復(fù)雜對(duì)象的例子。圖15的企業(yè)實(shí)體151同樣適用于抽象類,其中綁定模板的多值單元被表示成抽象類151的子對(duì)象152,153??梢詻](méi)有子對(duì)象,也可以有更多的子對(duì)象。
另一個(gè)問(wèn)題涉及建立滿足只允許用戶改變?cè)谄淇刂葡碌哪切┢髽I(yè)實(shí)體的要求的高效實(shí)現(xiàn)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)使受用戶控制的企業(yè)實(shí)體作為用戶對(duì)象的子對(duì)象來(lái)實(shí)現(xiàn)此目的。這使得安全性更加容易實(shí)現(xiàn)。
保證發(fā)布用戶只在其擁有的信息之后才被允許會(huì)是重要的。通過(guò)各種設(shè)計(jì)可以達(dá)到此目的。然而,優(yōu)化設(shè)計(jì)使得立即清楚用戶是否被授權(quán)發(fā)布項(xiàng)目指定用戶控制的所有數(shù)據(jù)均位于該用戶的子樹(shù)中。
這個(gè)設(shè)計(jì)決策對(duì)于方便訪問(wèn)為整體的企業(yè)實(shí)體沒(méi)有影響,因?yàn)槟軌驈膶哟谓Y(jié)構(gòu)中的用戶層之上執(zhí)行對(duì)企業(yè)實(shí)體的所有查詢,而無(wú)需損失一般性或性能。
另一個(gè)問(wèn)題涉及建立發(fā)布者聲明的高效實(shí)現(xiàn),尤其是對(duì)于findRelatedBusiness方法的實(shí)現(xiàn)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)使發(fā)布者聲明與企業(yè)對(duì)象的企業(yè)子對(duì)象相關(guān)來(lái)實(shí)現(xiàn)此目的。這使得不需要針對(duì)該準(zhǔn)則進(jìn)行搜索。
發(fā)布者聲明的一個(gè)主要用途在于find_RelatedBusinesses查詢。這個(gè)查詢指定特定企業(yè)實(shí)體,并且請(qǐng)求有關(guān)通過(guò)完整發(fā)布者聲明與該實(shí)體相關(guān)的所有企業(yè)實(shí)體的信息。通過(guò)將發(fā)布者聲明放置在其關(guān)聯(lián)到的企業(yè)實(shí)體下面的層次結(jié)構(gòu),這個(gè)查詢得到簡(jiǎn)化和加速。這具有增加一致性的額外好處。當(dāng)刪除企業(yè)實(shí)體時(shí),隨之刪除所有相關(guān)發(fā)布者聲明(現(xiàn)在無(wú)關(guān))。
另一個(gè)問(wèn)題涉及建立滿足只允許用戶改變?cè)谄淇刂葡碌哪切㏕Model的要求的高效實(shí)現(xiàn)。根據(jù)本發(fā)明的實(shí)施例,系統(tǒng)使得由用戶定義的TModel作為用戶對(duì)象的子對(duì)象。這使得安全性易于實(shí)現(xiàn)。
出于類似于導(dǎo)致將企業(yè)實(shí)體放置在用戶項(xiàng)下面的原因的原因,將用戶定義的TModel放置在定義它們的用戶的用戶項(xiàng)下面是恰當(dāng)?shù)?。?duì)查找TModel沒(méi)有不利影響,其原因在于,由于所有TModel被唯一命名,能夠通過(guò)單索引訪問(wèn)來(lái)找到它們。
另一個(gè)問(wèn)題涉及通過(guò)關(guān)系實(shí)現(xiàn)發(fā)布者聲明的高效搜索。根據(jù)本發(fā)明的實(shí)施例,通過(guò)使關(guān)系鍵值標(biāo)識(shí)引用作為發(fā)布者聲明項(xiàng)的輔助類來(lái)實(shí)現(xiàn)此目的。如果鍵值標(biāo)識(shí)引用是子對(duì)象(一個(gè)實(shí)現(xiàn)),則不能以同樣的效率對(duì)其進(jìn)行搜索,并且對(duì)關(guān)系的搜索不能與對(duì)發(fā)布者聲明內(nèi)容的搜索,例如關(guān)于狀態(tài)的(關(guān)鍵)過(guò)濾器(僅考慮完整聲明)相結(jié)合。
X.500模式系統(tǒng)可能不支持包含作為數(shù)據(jù)單元的其它對(duì)象類的對(duì)象類的構(gòu)造。例如,鍵值標(biāo)識(shí)引用不能是發(fā)布者聲明的數(shù)據(jù)單元。可以使鍵值標(biāo)識(shí)引用作為發(fā)布者聲明的子對(duì)象,但是這不利于引用鍵值標(biāo)識(shí)引用的內(nèi)容的高效搜索的構(gòu)造。
使鍵值標(biāo)識(shí)引用作為發(fā)布者聲明項(xiàng)的輔助類是此問(wèn)題的高效解決方案。于是能夠?qū)︽I值標(biāo)識(shí)引用的內(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-E0424A337C03euPublisherAssertionKeyName=wholly-owned subsidiaryeuPublisherAssertionKeyValue=parent-child輔助對(duì)象類為euPublisherAssertionKeyReference,并且上面列出的最后三個(gè)屬性是該類的數(shù)據(jù)元素。
根據(jù)本發(fā)明的實(shí)施例,諸如Computer Associates的eTrustTM的目錄可以被用來(lái)實(shí)現(xiàn)理想的企業(yè)UDDI注冊(cè)中心平臺(tái)。作為完全符合LDAPv3,X.500電子目錄的eTrust目錄可以被用來(lái)支持UDDI WEB服務(wù)實(shí)現(xiàn)。‘eTrust’目錄允許UDDI實(shí)現(xiàn)影響到已經(jīng)在大規(guī)模業(yè)務(wù)關(guān)鍵級(jí)目錄服務(wù)應(yīng)用中得到證明的高度成熟的目錄解決方案。
‘ eTrust’有許多獨(dú)特的特性,使得其在作為建立UDDI注冊(cè)中心的平臺(tái)方面極有吸引力。其中一些包含訪問(wèn)控制策略,角色,安全代理,相互認(rèn)證,分布式認(rèn)證,分布式SSL證書(shū)主題驗(yàn)證和網(wǎng)絡(luò)地址確認(rèn);分布和路由能力,包含并行分布式搜索,負(fù)載分擔(dān),查詢流和最短路徑路由;多主復(fù)制模式(multi-master replication scheme),其將基于應(yīng)答的機(jī)制(稱為多寫(xiě)(multi-write))的速度和效率與基于狀態(tài)的恢復(fù)和調(diào)節(jié)技術(shù)結(jié)合起來(lái);可用性特性,包含數(shù)據(jù)庫(kù)熱切換,網(wǎng)絡(luò)故障恢復(fù)和目錄系統(tǒng)代理(DSA)故障恢復(fù);被認(rèn)為是快速的高速緩存設(shè)計(jì);和部署特性,包含動(dòng)態(tài)配置(數(shù)據(jù)類型,模式規(guī)則,安全,知識(shí)等等),無(wú)限制的數(shù)據(jù)長(zhǎng)度,一般信息完整性規(guī)則,廣泛的管理控制和交互式命令控制臺(tái)。
eTrust目錄提供得到證明的X.500目錄解決方案。在其得到證明的基礎(chǔ)上可實(shí)現(xiàn)UDDI語(yǔ)義橋,以允許建立完全符合標(biāo)準(zhǔn)的UDDI注冊(cè)中心。由于基礎(chǔ)目錄解決方案的能力,這里公開(kāi)的實(shí)施例可以實(shí)現(xiàn)靈活的安全性,分布和可管理性,而不必改變或擴(kuò)展現(xiàn)有UDDI標(biāo)準(zhǔn)。
本實(shí)施例的一個(gè)問(wèn)題涉及如何映射在目錄的分離部分中存儲(chǔ)的實(shí)體之間的關(guān)系。
雖然UDDI數(shù)據(jù)結(jié)構(gòu)主要是層次化的,然而在不同對(duì)象的交叉關(guān)系方面會(huì)存在問(wèn)題。
主要有兩類關(guān)系,即替代名字(alternative names)和交叉關(guān)系(cross relationship)。根據(jù)本發(fā)明的實(shí)施例,通過(guò)利用別名的概念來(lái)實(shí)現(xiàn)替代名字,從而解決該問(wèn)題。這基本上具有將外部實(shí)體‘連接’作為主實(shí)體的虛擬子實(shí)體的效果。
本實(shí)施例利用唯一關(guān)鍵字解決交叉關(guān)系的問(wèn)題。這基本上具有建立相當(dāng)類似于RDBMS技術(shù)的主/外鍵系統(tǒng)的‘關(guān)系指針’,以模擬層次目錄系統(tǒng)內(nèi)不相交子樹(shù)之間存在的數(shù)據(jù)實(shí)體之間的關(guān)系的效果。
現(xiàn)在描述基于本發(fā)明實(shí)施例的別名的使用。通過(guò)UDDI企業(yè)服務(wù)投影的實(shí)現(xiàn)可最清楚地說(shuō)明第一種情形。企業(yè)服務(wù)投影實(shí)際上是企業(yè)服務(wù)的替代名字。企業(yè)服務(wù)投影是看上去屬于企業(yè)A,但實(shí)際上由企業(yè)B擁有和定義的企業(yè)服務(wù)。
參照?qǐng)D5,企業(yè)服務(wù)51,即企業(yè)A所擁有的服務(wù)看上去也屬于企業(yè)B。企業(yè)A對(duì)企業(yè)服務(wù)51作出的任何改變均會(huì)反映在企業(yè)B下面出現(xiàn)的投影的服務(wù)中。類似地,如果企業(yè)服務(wù)51被從注冊(cè)中心中刪除,則它不再出現(xiàn)在企業(yè)A和企業(yè)B下面。另外,企業(yè)實(shí)體B不可以編輯或改變企業(yè)服務(wù)51。為了編輯和所有其它發(fā)布目的,只有企業(yè)A必須訪問(wèn)企業(yè)服務(wù)51。
目錄別名系統(tǒng)可以被用來(lái)實(shí)現(xiàn)這個(gè)效果。企業(yè)服務(wù)51的別名被加到企業(yè)實(shí)體B中。該別名對(duì)于目錄服務(wù)器是特殊的標(biāo)記,實(shí)際告知‘當(dāng)某方查看此別名時(shí),向其出示在此的這個(gè)其它項(xiàng)’。
這意味著當(dāng)編輯原始服務(wù)時(shí),改變?cè)谕队爸幸彩强梢?jiàn)的。如果目錄系統(tǒng)支持別名完整性(eTrust目錄便是如此),在服務(wù)被刪除的情況下,投影也會(huì)被自動(dòng)清除。
另外,目錄服務(wù)器可以被配置成當(dāng)其在每個(gè)父對(duì)象下面被搜索一次時(shí),將投影的企業(yè)服務(wù)顯示再次。當(dāng)進(jìn)行需要解析企業(yè)服務(wù)的父對(duì)象的搜索時(shí),這是有用的。
某些情況下需要目錄層次結(jié)構(gòu)的不相交部分中的對(duì)象保持關(guān)系。
這個(gè)的一個(gè)例子是綁定模板和TModel之間。在整個(gè)UDDI中TModel被用于各種目的。它們是分類關(guān)鍵字,搜索標(biāo)識(shí)符,(UDDI)關(guān)系描述符,以及在這個(gè)實(shí)例中的技術(shù)規(guī)范‘指紋(fingerprints)’。‘連接’到綁定模板的TModel描述綁定模板(參見(jiàn)圖8)遵從的技術(shù)規(guī)范。例如,發(fā)布者可以連接一個(gè)聲明其綁定模板遵從SOAP 1.1標(biāo)準(zhǔn)的TModel。
注冊(cè)中心通常包含有限的TModel集合,其中的許多TModel會(huì)被數(shù)百或甚至數(shù)千綁定模板項(xiàng)引用。在某些情況下,注冊(cè)中心會(huì)返回任何‘連接’的TModel的細(xì)節(jié)和綁定模板的細(xì)節(jié)。
根據(jù)本發(fā)明的這個(gè)實(shí)施例,可以適當(dāng)?shù)匦薷暮蛻?yīng)用例如關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中使用的主/外鍵系統(tǒng)。注冊(cè)中心中存儲(chǔ)的每個(gè)TModel具有其自身的唯一(主)鍵。綁定模板通過(guò)增加與所需TModel的唯一鍵匹配的本地(外)鍵來(lái)引用TModel。圖7圖解了這個(gè)的例子。如果需要用綁定模板返回TModel數(shù)據(jù),則服務(wù)器可以查找有關(guān)的TModel。
圖6示出了綁定模板和TModel之間的關(guān)系。
圖7示出了TModel關(guān)鍵字如何建立兩個(gè)實(shí)體之間的關(guān)系。
發(fā)布者聲明是UDDI數(shù)據(jù)庫(kù)的重要元素。如上所述,它為用戶提供發(fā)現(xiàn)與有關(guān)企業(yè)實(shí)體相關(guān)的企業(yè)實(shí)體,以及它們?nèi)绾蜗嚓P(guān)的能力。
發(fā)布者聲明被設(shè)計(jì)成防止濫用,其中僅當(dāng)所涉及的兩個(gè)企業(yè)實(shí)體的所有者已經(jīng)聲明關(guān)系時(shí),所聲明的關(guān)系才變得可見(jiàn)。這種保護(hù)的代價(jià)是使得實(shí)現(xiàn)復(fù)雜,并且需要精心的設(shè)計(jì)以避免性能惡化。
一個(gè)問(wèn)題是完整性。發(fā)布者聲明比任何其它UDDI構(gòu)造具有更加復(fù)雜的生命周期。當(dāng)企業(yè)實(shí)體的所有者作出關(guān)于該企業(yè)及其與另一企業(yè)實(shí)體的關(guān)系的聲明時(shí),發(fā)布者聲明便開(kāi)始存在。另一企業(yè)實(shí)體的所有者可以請(qǐng)求狀態(tài)報(bào)告,并且發(fā)現(xiàn)已經(jīng)作出哪些關(guān)于其企業(yè)的聲明,或者它們被通知排除(out-of-band)。在任一情況下,另一企業(yè)實(shí)體的所有者可以選擇對(duì)兩個(gè)企業(yè)實(shí)體之間的關(guān)系作出匹配的聲明。此時(shí),聲明是完整的,并且對(duì)調(diào)用findRefatedBusinesses的用戶可見(jiàn)??梢孕薷幕騽h除一或兩個(gè)聲明,并且聲明再次變得不完整,而且應(yīng)當(dāng)不再可見(jiàn)。另外,任一企業(yè)實(shí)體的刪除應(yīng)當(dāng)立即清除聲明。
可以通過(guò)保持聲明完整性的方式來(lái)管理發(fā)布者聲明對(duì)象。
期望企業(yè)實(shí)體的所有者能夠作出(或清除)關(guān)于該所有者控制的企業(yè)實(shí)體的聲明。
本發(fā)明的實(shí)施例基于這樣的假設(shè),即UDDI數(shù)據(jù)庫(kù)是“以讀為主”的存儲(chǔ),主要用于X.500目錄。為此,優(yōu)化設(shè)計(jì)以得到更好的讀取性能,甚至以加重寫(xiě)入的負(fù)載為代價(jià)。
被稱作發(fā)布者聲明的對(duì)象類被設(shè)計(jì)成保存超過(guò)UDDI標(biāo)準(zhǔn)所需的數(shù)據(jù),因?yàn)槠谕麅?yōu)化搜索性能。該設(shè)計(jì)引入了操作屬性,其定義了發(fā)布者聲明狀態(tài)。在向目錄寫(xiě)入時(shí)確定聲明的狀態(tài),并且通過(guò)這種方式,不必每當(dāng)執(zhí)行搜索時(shí)確定狀態(tài)。
本實(shí)施例也使用用戶關(guān)鍵字形式的指針。當(dāng)發(fā)布者聲明被寫(xiě)入目錄時(shí),用于“到達(dá)”和“來(lái)自”企業(yè)的用戶關(guān)鍵字被確定和寫(xiě)入對(duì)象中。這簡(jiǎn)化了getAssertionStatusReport查詢,因?yàn)楫a(chǎn)生這樣的報(bào)告只需要搜索包含正產(chǎn)生報(bào)告的人的用戶關(guān)鍵字的發(fā)布者聲明。
相反,如果有必要查詢用戶下面的所有企業(yè)關(guān)鍵字,以查找包含這些企業(yè)關(guān)鍵字的發(fā)布者聲明,則需要大量處理以產(chǎn)生報(bào)告。
發(fā)布者聲明的一個(gè)通常的用途是發(fā)現(xiàn)那些與指定企業(yè)‘有關(guān)’的企業(yè)。為提供該查詢的良好性能,與企業(yè)有關(guān)的發(fā)布者聲明被放置為該企業(yè)的子節(jié)點(diǎn)。
另外,在聲明中將每個(gè)聲明的狀態(tài)記錄為操作屬性。這使得能夠只查詢位于有關(guān)公司下面的具有完整狀態(tài)的發(fā)布者聲明。這簡(jiǎn)化了findRelatedBusinesses的搜索,因?yàn)樗阉鲿?huì)只檢索那些完整的聲明。
為簡(jiǎn)化安全性,用戶控制的所有企業(yè)及其發(fā)布者聲明可以是該用戶的帳戶項(xiàng)下面的子節(jié)點(diǎn)。這種實(shí)現(xiàn)通過(guò)只允許用戶訪問(wèn)該用戶的帳戶項(xiàng)下面的子樹(shù)來(lái)實(shí)施訪問(wèn)控制。
注意,由UDDI實(shí)現(xiàn)管理表示狀態(tài)的操作屬性。當(dāng)用戶發(fā)現(xiàn)已經(jīng)由另一個(gè)已聲明的企業(yè)做出的聲明時(shí),UDDI實(shí)現(xiàn)會(huì)更新其它聲明的狀態(tài),所述其它聲明是由其它企業(yè)的用戶控制的另一個(gè)子樹(shù)。訪問(wèn)控制允許這樣。
作為存儲(chǔ)兩個(gè)發(fā)布者聲明對(duì)象的可選實(shí)施例,在所涉及的兩個(gè)企業(yè)實(shí)體的每個(gè)下面均有一個(gè),在其自身的子樹(shù)中提供單個(gè)發(fā)布者聲明對(duì)象。例如,可以在數(shù)據(jù)庫(kù)對(duì)象下面提供發(fā)布者聲明子樹(shù)。當(dāng)在這種情況下最初存儲(chǔ)聲明時(shí),為其指定不完整狀態(tài)(例如,tokeyincomplete或fromkeyincomplete,這取決于哪一方作出聲明)。如果由互補(bǔ)的用戶作出發(fā)布者聲明,則狀態(tài)被改變?yōu)橥暾?。如果二者之一刪除發(fā)布者聲明,則狀態(tài)被變回為不完整。如果雙方均刪除發(fā)布者聲明,則發(fā)布者聲明對(duì)象被刪除。有利地,這導(dǎo)致只有一個(gè)聲明拷貝,并且多數(shù)維護(hù)工作包括修改保存聲明狀態(tài)的單個(gè)屬性。
圖12示意性圖解了根據(jù)本發(fā)明實(shí)施例的層次結(jié)構(gòu)。該示意解了兩個(gè)可選方式,其中發(fā)布者聲明對(duì)象被放在企業(yè)實(shí)體和/或數(shù)據(jù)庫(kù)對(duì)象下面。
圖8圖解了請(qǐng)求加入發(fā)布者聲明的方法。在步驟S80,確定請(qǐng)求是否有效。如果無(wú)效(否,步驟S80),則請(qǐng)求失敗(步驟S92)。如果請(qǐng)求有效(是,步驟S80),則確定請(qǐng)求是否來(lái)自我們的企業(yè)(步驟S82)。如果不是來(lái)自我們的企業(yè)(否,步驟S82),則確定其是否到達(dá)我們的企業(yè)(步驟S84)。如果不是到達(dá)我們的企業(yè)(否,步驟S84),則請(qǐng)求失敗(步驟S92)。如果是到達(dá)我們的企業(yè)(是,步驟S84),則確定是否從所有者作出聲明(步驟S86)。如果不是從所有者作出聲明(否,步驟S86),則寫(xiě)入不完整聲明(步驟S94)。如果從所有者作出聲明(是,步驟S86),則寫(xiě)入完整聲明(步驟S96)。返回到步驟S82,如果確定請(qǐng)求來(lái)自我們的企業(yè)(是,步驟S82),則確定其是否針對(duì)我們的企業(yè)(步驟S88)。如果不是針對(duì)我們的企業(yè)(否,步驟S88),則確定是否對(duì)所有者作出聲明(步驟S90)。如果不是對(duì)所有者作出聲明(否,步驟S90),則寫(xiě)入不完整聲明(步驟S94)。如果步驟S88的結(jié)果為是(針對(duì)我們的企業(yè)),或步驟S90的結(jié)果為是(對(duì)所有者作出的聲明),則寫(xiě)入完整聲明(步驟S96)。
下一個(gè)問(wèn)題涉及如何在搜索操作期間優(yōu)化中間搜索結(jié)果集合的構(gòu)造,使得考慮到目錄存儲(chǔ)介質(zhì)的限制,目錄訪問(wèn)和迭代存儲(chǔ)器內(nèi)操作最少。實(shí)際上,可以以任意順序存儲(chǔ)和返回目錄項(xiàng),并且目錄結(jié)果可能過(guò)大以致不能排序。
根據(jù)本發(fā)明的實(shí)施例,提供一個(gè)面向?qū)ο蟮拇鎯?chǔ)器內(nèi)數(shù)據(jù)存儲(chǔ)系統(tǒng),該系統(tǒng)與一個(gè)按區(qū)別名字對(duì)中間結(jié)果進(jìn)行排序的唯一結(jié)構(gòu)排序模式相結(jié)合。這允許一個(gè)搜索返回許多不同類型的對(duì)象-企業(yè)實(shí)體(BusinessEntities),企業(yè)服務(wù)(BusinessServices),等等-并且仍然允許系統(tǒng)容易地構(gòu)造正確的XML結(jié)構(gòu)以向用戶返回?cái)?shù)據(jù)。注意,通過(guò)XML進(jìn)行Web服務(wù)交互。
現(xiàn)在說(shuō)明這個(gè)系統(tǒng)的描述。根據(jù)以下層次結(jié)構(gòu)在目錄中提供(部分地)本發(fā)明的UDDI企業(yè)實(shí)體和任何子數(shù)據(jù)元素企業(yè)實(shí)體●企業(yè)服務(wù)○綁定模板○綁定模板○服務(wù)名字○服務(wù)名字●企業(yè)服務(wù)○綁定模板○綁定模板○服務(wù)名字○服務(wù)名字●企業(yè)名字●企業(yè)名字●企業(yè)描述●企業(yè)描述注意,已經(jīng)結(jié)合本發(fā)明涉及子結(jié)構(gòu)和對(duì)象分割的方面說(shuō)明了服務(wù)名字,企業(yè)名字和企業(yè)描述。
企業(yè)實(shí)體檢索代碼根據(jù)所需企業(yè)實(shí)體的唯一關(guān)鍵字執(zhí)行目錄子樹(shù)搜索。這個(gè)搜索將返回找到的項(xiàng)和所有子項(xiàng)。目錄標(biāo)準(zhǔn)不保證返回的項(xiàng)具有任何特定的順序-或者甚至子項(xiàng)緊跟在其父項(xiàng)后面。
因此,檢索代碼接著按照區(qū)別名稱對(duì)返回的項(xiàng)進(jìn)行排序。這保證子項(xiàng)將排列在其父項(xiàng)之后,并且能夠容易地區(qū)分父子關(guān)系。可以使用各種排序算法。所使用的排序算法應(yīng)當(dāng)在各個(gè)項(xiàng)被部分排序的情況下表現(xiàn)出高性能特征。
用于結(jié)構(gòu)構(gòu)造的算法在操作上主要是′深度優(yōu)先、從左到右的樹(shù)遍歷′。這在圖論中也稱為′后序遍歷′。
排序的列表被傳遞到新企業(yè)實(shí)體對(duì)象的構(gòu)造函數(shù)方法。這個(gè)對(duì)象可以是例如被設(shè)計(jì)成表示UDDI企業(yè)實(shí)體的面向?qū)ο缶幊虡?gòu)造。企業(yè)實(shí)體對(duì)象包含根據(jù)最后的項(xiàng)中提供的數(shù)據(jù)′構(gòu)造其自身′的代碼。該代碼迭代地移動(dòng)通過(guò)列表,對(duì)每個(gè)項(xiàng)作出判決??梢岳斫?,列表中的第一項(xiàng)應(yīng)當(dāng)是企業(yè)實(shí)體本身的主項(xiàng),并且一旦發(fā)現(xiàn)另一個(gè)企業(yè)實(shí)體,可以理解,構(gòu)造已經(jīng)完成-列表的順序保證了這一點(diǎn)。一旦發(fā)現(xiàn)企業(yè)服務(wù)或其它子項(xiàng),實(shí)例化合適類型的對(duì)象,并且將列表和告知從列表中何處開(kāi)始的指針傳遞到新對(duì)象的構(gòu)造函數(shù)。
每個(gè)對(duì)象基本上包含類似的處理代碼以處理其自身的構(gòu)造,以及將任何子項(xiàng)的構(gòu)造委托給合適的子對(duì)象。
通過(guò)這種方式,只需進(jìn)行單次目錄搜索,并且以高效方式處理結(jié)果列表,其中每個(gè)項(xiàng)只被處理一次。如果列表保持任意順序或以某種其它方式排序,則列表必須經(jīng)過(guò)多遍處理,以便根據(jù)結(jié)果項(xiàng)正確地構(gòu)造UDDI層次結(jié)構(gòu)。
將構(gòu)造和列表處理委托給層次結(jié)構(gòu)中的不同編程對(duì)象使得處理代碼的長(zhǎng)度相當(dāng)小,從而更加高效和更加快速。
圖9圖解了編程構(gòu)造(對(duì)象),包含排序項(xiàng)列表的表示。確定在項(xiàng)的列表中是否存在任何其它的項(xiàng)。如果沒(méi)有額外的項(xiàng)(否,步驟S100),則過(guò)程退出(步驟S118)。如果有額外的項(xiàng)(是,步驟S100),則取出列表中的下一項(xiàng)(步驟S102)。接著確定該項(xiàng)是否具有這個(gè)對(duì)象類型。如果該項(xiàng)具有這個(gè)對(duì)象類型(是,步驟S104),則根據(jù)該項(xiàng)設(shè)置對(duì)象屬性(步驟S106),并且過(guò)程返回到步驟S100。如果不具有這個(gè)對(duì)象類型(否,步驟S104),則確定是否已經(jīng)處理過(guò)具有這個(gè)對(duì)象類型的項(xiàng)(步驟S108)。如果尚未處理過(guò)具有這個(gè)對(duì)象類型的項(xiàng)(否,步驟S108),則過(guò)程返回到步驟S100。如果已經(jīng)處理過(guò)具有這個(gè)對(duì)象類型的項(xiàng)(是,步驟S108),則確定該項(xiàng)是否這個(gè)對(duì)象的固有部件(例如名字,描述等等)。如果是固有部件(是,步驟S110),則該項(xiàng)被加到對(duì)象屬性中,并且可以執(zhí)行額外的處理(步驟S112),過(guò)程返回到步驟S100。如果不是固有部件(否,步驟S110),則確定該項(xiàng)是否這個(gè)對(duì)象的子對(duì)象(例如BusinessService是BusinessEntity的子對(duì)象)。如果是子對(duì)象(是,步驟S114),則系統(tǒng)實(shí)例化正確類型的對(duì)象,并且將項(xiàng)的列表傳遞到構(gòu)造函數(shù)(步驟S116),過(guò)程返回到步驟S100。如果不是子對(duì)象(否,步驟S114),則過(guò)程返回到步驟S100。
以下的‘實(shí)字’例子演示了LDAP目錄可能預(yù)計(jì)返回的任意順序的種類。
SearchResultEntryobjectNamebusinessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntitytypebusinessKeyvalue1ba3034aeef738da00eef78599fe0004SearchResultEntryobjectNamedescriptionKey=1ba3034aeef738da00eef786302b0008,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvalueuddiDescription
SearchResultEntryobjectNameserviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,0=CAattributestypeobjectClassvaluebusinessServiceSearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef78970da000d,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceNameSearchResultEntryobjectNamebindingKey=1ba3034aeef738da00eef7899fb7000e,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebindingTemplateSearchResultEntry
objectNamenameKey=1ba3034aeef738da00eef7862fe50007,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntityName列表1-以粗體突出的名字項(xiàng)是位于列表頂端的企業(yè)實(shí)體項(xiàng)的葉節(jié)點(diǎn),并且如果在企業(yè)服務(wù)項(xiàng)和企業(yè)實(shí)體的其它分支子節(jié)點(diǎn)之前出現(xiàn),則會(huì)有利。然而,它出現(xiàn)在列表的末端,迫使任何處理代碼搜索整個(gè)列表以確保已經(jīng)處理企業(yè)實(shí)體的所有直接子節(jié)點(diǎn)。
因此,按照根據(jù)本發(fā)明實(shí)施例制定的規(guī)則而排序的相同數(shù)據(jù)的一個(gè)版本SearchResultEntryobjectNamebusinessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntitytypebusinessKeyvalue1ba3034aeef738da00eef78599fe0004SearchResultEntryobjectNamedescriptionKey=1ba3034aeef738da00eef786302b0008,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CA
attributestypeobjectClassvalueuddiDescriptionSearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef7862fe50007,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessEntityNameSearchResultEntryobjectNameserviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceSearchResultEntryobjectNamebindingKey=1ba3034aeef738da00eef7899fb7000e,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClass
valuebindingTemplateSearchResultEntryobjectNamenameKey=1ba3034aeef738da00eef78970da000d,serviceKey=1ba3034aeef738da00eef789707f000c,businessKey=1ba3034aeef738da00eef78599fe0004,userKey=1ba3034aedb9154900edb915491c0001,o=CAattributestypeobjectClassvaluebusinessServiceName列表2-以粗體突出的項(xiàng)出現(xiàn)在列表中更合邏輯的位置,并且現(xiàn)在能夠編寫(xiě)處理代碼以對(duì)此加以利用。當(dāng)項(xiàng)的數(shù)量增加到實(shí)際服務(wù)器負(fù)載的程度時(shí),處理時(shí)間的節(jié)省是顯著的。
以下是本發(fā)明的另一個(gè)實(shí)施例。
#表示目錄中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=euKeyedReferenceKey
syntax=caselgnoreStringsingle-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=euBusinessServiceKeysyntax=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)識(shí)引用中使用的屬性
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=caselgnoreStringsingle-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=caselgnoreString
single-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=euTModelidentifierKRKeyValue
syntax=caselgnoreStringsingle-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è)實(shí)體名字中使用name=euBusinessEntityNameValuesyntax=CaseExactString
single-valued};set attribute uddiAttributeType381={#在企業(yè)實(shí)體名字中使用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è)實(shí)體描述中使用name=euBusinessEntityDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType383={#在企業(yè)實(shí)體描述中使用name=euBusinessEntityDescriptionValuelC
syntax=caselgnoreStringsingle-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實(shí)例信息描述中使用name=euTModellnstancelnfoDescriptionValuesyntax=CaseExactString
single-valued};set attribute uddiAttributeType386={#在tmodel實(shí)例信息描述中使用name=euTModellnstancelnfoDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType367={#在tmodel實(shí)例細(xì)節(jié)描述中使用name=euTModeIInstanceDetailsDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType387={#在tmodel實(shí)例細(xì)節(jié)描述中使用name=euTModelinstanceDetailsDescriptionValuelCsyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType368={#在概述文檔描述中使用name=euOverviewDocDescriptionValuesyntax=CaseExactStringsingle-valued};set attribute uddiAttributeType388={#在概述文檔描述中使用name=euOverviewDocDescriptionValueiC
syntax=caselgnoreStringsingle-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ù)庫(kù)中使用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=caselgnoreString
single-valued};set attribute uddiAttributeType405={#在UserAccount和TModel中使用name=euHiddensyntax=booleansingle-valued};set attribute uddiAttributeType406={#在企業(yè)實(shí)體和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=euPhoneNumber
syntax=caselgnoreStringsingle-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=euAccessPointTypesyntax=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實(shí)例信息中使用name=eulnstanceParmssyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType420=
{#在PublisherAssertion中使用name=euPublisherAssertionStatussyntax=caselgnoreStringsingle-valued};set attribute uddiAttributeType421={#在discovery URL中使用name=euDiscoveryURLValuesyntax=caselgnoreStringsingle-valued};#------------------------#抽象類-不要試圖在目錄中存儲(chǔ)它們!set object-class uddiObjectClass201={#作為所有鍵值標(biāo)識(shí)引用的父節(jié)點(diǎn)的抽象類name=ehKeyedReferencesubclass-of top kind=abstractmust-containeuKeyedReferenceKey#注意帶索引的引用也應(yīng)包含TModel關(guān)鍵字,關(guān)鍵字名,和關(guān)鍵字#值,每個(gè)導(dǎo)出類增加這些,使得它們能夠均具有不同的名字,#以利于搜索這些屬性的標(biāo)準(zhǔn)名字#euXXXTModel#euXXXKeyName#euXXXKeyValue#其中XXX是對(duì)象的名字和鍵值標(biāo)識(shí)引用的目的
};set object-class uddiObjectClass202={#作為所有名字的父節(jié)點(diǎn)的抽象類name=euNamesubclass-of top kind=abstractmust-containeuNameKeymay-containeuLanguage#注意名字也應(yīng)具有包含名字所有者的串,該串通常#具有euXXXNameValue模式的名字,其中XXX是父對(duì)象的名字#這使搜索的效率最大#存在屬性的第二拷貝,其附有IC-這是忽略大小寫(xiě)的版本};set object-classuddiObjectCalss203={#作為所有描述的父節(jié)點(diǎn)的抽象類name=euDescriptionsubclass-of topkind=abstractmust-containeuDescriptionKeymay-containeuLanguage#注意描述也應(yīng)具有包含描述所有者的串。
#該串通常具有euXXXDescriptionValue模式的名字,#其中XXX是父對(duì)象的名字#這使搜索的效率最大
#存在屬性的第二拷貝,其附有IC-這是忽略大小寫(xiě)的版本};#------------------------#鍵值標(biāo)識(shí)引用類型set object-class uddiObjectClass301={#企業(yè)實(shí)體類別鍵值標(biāo)識(shí)引用-集合構(gòu)成類別包name=euBusinessEntityCategoryKRsubclass-of euKeyedReferencemust-containeuBusinessEntityCategoryKRKeyValuemay-containeuBusinessEntityCategoryKRTModel,euBusinessEntityCategoryKRKeyName};set object-class uddiObjectClass302={#企業(yè)實(shí)體標(biāo)識(shí)鍵值標(biāo)識(shí)引用-集合構(gòu)成標(biāo)識(shí)包name=euBusinessEntityidentifierKRsubclass-of euKeyedReferencemust-containeuBusinessEntityldentifierKRKeyValuemay-containeuBusinessEntityldentifierKRTModel,euBusinessEntityldentifierKRKeyName};set object-class uddiObjectClass303={#服務(wù)類別鍵值標(biāo)識(shí)引用-集合構(gòu)成類別包name=euBusinessServiceCategoryKR
subclass-of euKevedReferencemust-containeuBusinessServiceCategoryKRKeyValuemay-containeuBusinessServiceCategoryKRTModel,euBusinessServiceCategoryKRKeyName};set object-class uddiObjectClass304={#tmodel類別鍵值標(biāo)識(shí)引用-集合構(gòu)成類別包name=euTModelCategoryKRsubclass-of euKeyedReferencemust-containeuTModelCategoryKRKeyValuemay-containeuTModelCategoryKRTModel,euTModelCategoryKRKeyName};set object-class uddiObjectClass305={#tmodel標(biāo)識(shí)鍵值標(biāo)識(shí)引用-集合構(gòu)成標(biāo)識(shí)包name=euTModelidentifierKRsubclass-of euKeyedReferencemust-containeuTModelldentifierKRKeyValuemay-containeuTModelldentifierKRTModel,euTModel IdentifierKRKeyName};set object-class uddiObjectClass306={#發(fā)布者聲明鍵值標(biāo)識(shí)引用-用作輔助類以提供關(guān)系
name=euPublisherAssertionKRsubclass-of euKevedReferencekind=auxiliarymust-containeuPublisherAssertionKRKevValuemay-containeuPublisherAssertionKRTModel,euPublisherAssertionKRKevName};#----------------------#名字和描述類型set object-class uddiObjectClass331={#企業(yè)實(shí)體的名字name=euBusinessEntityNamesubclass-of euNamemust-containeuBusinessEntityNameValue,euBusinessEntitvNameValuelC#從euName繼承euNameKey和euLanguage};set object-class uddiObjectClass332={#企業(yè)服務(wù)的名字name=euBusinessServiceNamesubclass-of euNamemust-containeuBusinessServiceNameValue,euBusinessServiceNameValuelC
#從euName繼承euNameKey和euLanguage};set object-class uddiObjectClass341={#企業(yè)實(shí)體的描述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實(shí)例信息對(duì)象的描述name=euTModelInstancelnfoDeseriptionsubclass-of euDescriptionmay-containeuTModellnstancelnfoDescriptionValue,euTModellnstancelnfoDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass345={#tmodel實(shí)例細(xì)節(jié)對(duì)象的描述name=euTModeIInstanceDetaiisDescriptionsubclass-of euDescriptionmay-containeuTModellnstanceDetailsDescriptionValue,euTModeIInstanceDetaiIsDescriptionValueIC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass346={#概述文檔對(duì)象的描述name=euOverviewDocDescriptionsubclass-of euDescriptionmay-containeu OverviewDocDescriptionValue,euOverviewDocDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass347=
{#contact的描述name=euContactDescription.
subclass-of euDescriptionmay-containeuContactDescriptionValue,euContactDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};set object-class uddiObjectClass348={#綁定模板的描述name=euBindingTemplateDescriptionsubclass-of euDescriptionmay-containeuBindingTemplateDescriptionValue,euBindingTemplateDescriptionValuelC#從euDescription繼承euDescriptionKey和euLanguage};#------------------------------------#主要對(duì)象set object-class uddiObjectClass400={#數(shù)據(jù)庫(kù)-可以用于將用戶分成組name=euRepositorysubclass-of topmust-containeuRepositoryName};set object-class uddiObjectClass401=
{#用戶帳戶-其中隱藏我們有關(guān)用戶的知識(shí)name=euUserAccountsubclass-of topmust-containeuUserKey,euUserName,euCredentialsmay-containeuAuthorizedName,euHidden#注意這個(gè)用戶發(fā)布的所有企業(yè)實(shí)體和TModel均被發(fā)現(xiàn)為這個(gè)對(duì)象的子對(duì)象};set object-class uddiObjectClass402={#企業(yè)對(duì)象-提供服務(wù)的實(shí)體的細(xì)節(jié)name=euBusinessEntitysubclass-of topmust-containeuBusinessEntityKeymay-containeuParentUserKey,euAuthorizedName,euOperator#注意在這個(gè)對(duì)象的子對(duì)象中保存企業(yè)實(shí)體的許多屬性,#尤其是可能不止一次出現(xiàn)的屬性};set object-class uddiObjectClass403={#企業(yè)服務(wù)-企業(yè)實(shí)體提供的服務(wù)的細(xì)節(jié)name=euBusinessService
subclass-of topmust-containeuBusinessServiceKeymay-containeuParentBusinessKey#注意這個(gè)服務(wù)的所有綁定模板會(huì)被發(fā)現(xiàn)為這個(gè)服務(wù)的子服務(wù)};set object-class uddiObjectClass404={#綁定模板-如何訪問(wèn)特定企業(yè)的細(xì)節(jié)name=euBindingTemplatesubclass-of topmust-containeuBindingTemplateKeymay-containeuParentServiceKey,euHostingRedirector,euAccessPoint,euAccessPointType#注意應(yīng)當(dāng)具有駐留重定向器或接入點(diǎn)之一};set object-class uddiObjectClass405={#tmodel-對(duì)概念的引用。可以是分類模式,可以只是對(duì)標(biāo)準(zhǔn)的引用name=euTModelsubclass-of topmust-containeuTModelKey,euTModeiNamemay-contain
euAuthorizedName,euOperator,euOverviewURL,euParentUserKey,euHidden#注意當(dāng)“刪除”TModel時(shí)使用Hidden};set object-class uddiObjectClass406={#發(fā)布者聲明-作出有關(guān)兩個(gè)企業(yè)之間的關(guān)系的聲明name=euPublisherAssertionsubclass-of topmust-containeuPublisherAssertionKey,euFromBusinessKey,euFromUserKey,euToBusinessKey,euToUserKey,euPublisherAssertionStatus#注意關(guān)系將被存儲(chǔ)為類型euPublisherAssertionKeyedReference的輔助類#這允許直接搜索輔助類的元素};#-----------------#次要對(duì)象-多數(shù)為主要對(duì)象的子對(duì)象,保存重復(fù)數(shù)據(jù)set object-class uddiObjectClass501={#discoveryURL-在企業(yè)實(shí)體下面發(fā)現(xiàn)name=euDiseoveryURL
subclass-of topmust-containeuDiscoveryURLKey,euDiscoveryURLValue,euUseType};set object-class uddiObjectClass502={#contact-在企業(yè)實(shí)體下面發(fā)現(xiàn)-相當(dāng)復(fù)雜,可能具有許多子對(duì)象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-of topmust-containeuAddressLineKey,euAddressLineValue};set object-class uddiObjectClass505={#phone-在contact下面發(fā)現(xiàn)name=euPhonesubclass-of topmust-containeuPhoneKey,euPhoneNumbermay-containeuUseType};set object-class uddiObjectClass506={#email-在contact下面發(fā)現(xiàn)name=euEmailsubclass-of topmust-containeuEmailKey,euEmailAddressmay-containeuUseType};set object-class uddiObjectClass507={#tmodel實(shí)例信息-在綁定模板下面發(fā)現(xiàn)
name=euTModellnstancelnfosubclass-of topmust-containeulnstanceTModelKeymay-containeulnstanceParms,euOverviewU RL};#-------------------#名字綁定schema set name-binding uddiBinding101={#綁定到最高層子對(duì)象name=euRepository-topeuRepository allowable-parent topnamed-by euRepositoryName};schema set name-binding uddiBinding102={{#綁定到最高層子對(duì)象name=euUserAccount-topeuUserAccount allowable-parenttop named-by euUserKey};schema set name-binding uddiBinding103={#綁定到euRepositoryname=euUserAccount-euRepositoryeuUserAccount allowable-parent euRepository
named-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={#綁定到組織最高層子對(duì)象name=euRepository-organizationeuRepository allowable-parent organizationnamed-by euRepositoryName};schema set name-binding uddiBinding106={#綁定發(fā)布者聲明到數(shù)據(jù)庫(kù)以允許可選配置name=euPublisherAssertion-euRepositoryeuPublisherAssertion allowable-parent euRepositorynamed-by euPublisherAssertionKey};schema set name-binding uddiBinding107={#綁定數(shù)據(jù)庫(kù)層-允許多層數(shù)據(jù)庫(kù)結(jié)構(gòu)name=euRepository-euRepositoryeuRepository allowable-parenteuRepositorynamed-by euRepositoryName};schema set name-binding uddiBinding201={#綁定企業(yè)實(shí)體到用戶帳戶-第二層
name=euBusinessEntity-euUserAccounteuBusinessEntity 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 euPublisherAssertionKey};schema set name-binding uddiBinding307={#企業(yè)實(shí)體下面的標(biāo)識(shí)name=euBusinessEntityidentifierKR-euBusinessEntityeuBusinessEntityldentifierKR allowable-parenteuBusinessEntitynamed-by euKeyedReferenceKey};schema set name-binding uddiBinding308={#企業(yè)實(shí)體下面的類別name=euBusinessEntityCategoryKR-euBusinessEntityeuBusinessEntityCategoryKR allowable-parenteuBusinessEntity
named-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-euTModeleuOverviewDocDeseription allowable-parent euTModelnamed-by euDescriptionKey};schema set name-binding uddiBinding312={#tmodel下面的標(biāo)識(shí)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-euContact
euAddress allowable-parent euContactnamed-by euAddressKey};schema set name-binding uddiBinding402={#聯(lián)系下面的電話號(hào)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-euBusinessServiceeuBusinessServiceDescription allowable-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-euBindingTemplateeuBindingTemplateDescription allowable-parenteuBindingTemplate
named-by euDescriptionKey};schema set name-binding uddiBinding510={#綁定模板下面的tmodel實(shí)例信息name=euTModellnstancelnfo-euBindingTemplateeuTModellnstancelnfo allowable-parent euBindingTemplatenamed-by eulnstanceTModelkey};schema set name-binding uddiBinding601={#tmodel實(shí)例信息下面的描述name=euTModellnstancelnfoDescription-euTModellnstancelnfoeuTModellnstancelnfoDescription allowable-parenteuTModellnstancelnfonamed-by euDescriptionKey};schema set name-binding uddiBinding602={#tmodel實(shí)例信息下面的實(shí)例細(xì)節(jié)描述name =euTmodellnstanceDetailsDescription-euTModellnstancelnfoeuTmodellnstanceDetailsDescriptionallowable-parenteuTModel Instancel nfonamed-by euDescriptionKey};schema set name-binding uddiBinding603={#tmodel實(shí)例信息下面的概述文檔描述name=euOverviewDocDescription-euTModellnstancelnfoeuOverviewDocDescriptionanowable-parenteuTModelinstanceinfonamed-by euDescriptionKey
};由于能夠在不偏離本發(fā)明的必要特征的實(shí)質(zhì)的前提下以各種形式實(shí)施本發(fā)明,應(yīng)當(dāng)理解,上述實(shí)施例不是為了限制本發(fā)明(除非專門(mén)指出),而是應(yīng)當(dāng)在所附權(quán)利要求限定的公開(kāi)內(nèi)容的實(shí)質(zhì)和范圍內(nèi)進(jìn)行廣義的解釋。各種修改和等同方案均應(yīng)被包含在本公開(kāi)和所附權(quán)利要求的實(shí)質(zhì)和范圍內(nèi)。
權(quán)利要求
1.一種用于具有復(fù)雜UDDI對(duì)象的WEB服務(wù)系統(tǒng)的方法,所述復(fù)雜UDDI對(duì)象具有至少一個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)和至少一個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu),每個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu)具有至少一個(gè)值,每個(gè)值具有多個(gè)字段,該方法包括在目錄父對(duì)象中提供表示每個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)的屬性;和為每個(gè)至少一個(gè)值提供具有表示復(fù)合數(shù)據(jù)結(jié)構(gòu)的每個(gè)字段的屬性的目錄子對(duì)象。
2.如權(quán)利要求1所述的方法,還包括針對(duì)其中字段為復(fù)合的每個(gè)至少一個(gè)值重復(fù)進(jìn)行提供。
3.如權(quán)利要求1所述的方法,其中復(fù)雜UDDI對(duì)象是企業(yè)實(shí)體,企業(yè)服務(wù),綁定模板和TModel中的至少一個(gè)。
4.一種使WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)扁平化的方法,該方法包括確定WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)或關(guān)系的任何部分是否具有對(duì)象之間的′一對(duì)一′關(guān)系;和通過(guò)將屬性的內(nèi)容移動(dòng)到層次結(jié)構(gòu)的至少一個(gè)子部分中,清除層次結(jié)構(gòu)中被確定為具有一對(duì)一關(guān)系的該部分。
5.一種包含用于執(zhí)行WEB服務(wù)方法的計(jì)算機(jī)可執(zhí)行代碼的計(jì)算機(jī)記錄介質(zhì),所述WEB服務(wù)方法用于具有復(fù)雜UDDI對(duì)象的WEB服務(wù)結(jié)構(gòu)中,所述復(fù)雜UDDI對(duì)象具有至少一個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)和至少一個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu),每個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu)具有至少一個(gè)值,每個(gè)值具有多個(gè)字段,所述計(jì)算機(jī)可執(zhí)行代碼包括用于在目錄父對(duì)象中提供表示每個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)的屬性的代碼;和用于為每個(gè)至少一個(gè)值提供具有表示復(fù)合數(shù)據(jù)結(jié)構(gòu)的每個(gè)字段的屬性的目錄子對(duì)象的代碼。
6.如權(quán)利要求5所述的計(jì)算機(jī)記錄介質(zhì),還包括用于針對(duì)其中字段為復(fù)合的每個(gè)至少一個(gè)值重復(fù)進(jìn)行提供的代碼。
7.如權(quán)利要求5所述的計(jì)算機(jī)記錄介質(zhì),其中復(fù)雜UDDI對(duì)象是企業(yè)實(shí)體,企業(yè)服務(wù),綁定模板和TModel中的至少一個(gè)。
8.一種包含計(jì)算機(jī)可執(zhí)行代碼的計(jì)算機(jī)記錄介質(zhì),所述計(jì)算機(jī)可執(zhí)行代碼用于使WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)扁平化,包括用于確定WEB服務(wù)結(jié)構(gòu)中的層次結(jié)構(gòu)或關(guān)系的任何部分是否具有對(duì)象之間的′一對(duì)一′關(guān)系的代碼;和用于通過(guò)將屬性的內(nèi)容移動(dòng)到層次結(jié)構(gòu)的至少一個(gè)子部分中,清除層次結(jié)構(gòu)中被確定為具有一對(duì)一關(guān)系的該部分的代碼。
全文摘要
一種用于具有復(fù)雜UDDI對(duì)象的WEB服務(wù)系統(tǒng)的方法,所述復(fù)雜UDDI對(duì)象具有至少一個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)和至少一個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu),每個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu)具有至少一個(gè)值,每個(gè)值具有多個(gè)字段。該方法在目錄父對(duì)象中提供表示每個(gè)非復(fù)合數(shù)據(jù)結(jié)構(gòu)的屬性,并且為每個(gè)至少一個(gè)值提供具有表示復(fù)合數(shù)據(jù)結(jié)構(gòu)的每個(gè)字段的屬性的目錄子對(duì)象。
文檔編號(hào)H04L9/00GK1678992SQ03820269
公開(kāi)日2005年10月5日 申請(qǐng)日期2003年8月25日 優(yōu)先權(quán)日2002年8月26日
發(fā)明者理查德·哈維, 蒂莫西·本特利 申請(qǐng)人:計(jì)算機(jī)聯(lián)合思想公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1