專利名稱::模糊查詢、查詢結果處理和過濾條件處理的方法及設備的制作方法
技術領域:
:本發(fā)明涉及通信
技術領域:
,尤其涉及一種模糊查詢、查詢結果處理和過濾條件處理的方法及設備。
背景技術:
:NETCONF(網(wǎng)絡配置協(xié)議)是一種網(wǎng)管協(xié)議,使用XML(ExtensibleMarkupLanguage,可擴展標記語言)描述操作請求和網(wǎng)管數(shù)據(jù)。XML是一套語義標記的規(guī)則,將文檔分成許多部件并用標記對這些部件加以標識。這些標記通常采用自然語言,因此具有很高的可讀性。標記看起來如下<age>10</age><namelanguage="English,,><first-name>George</first-name><last-name>Bush</last-name></name><hobby></hobby><hobby/>每一對標記由起始標記(如〈age〉)和結束標i己(如〈/age〉)組成,每一對標記及其內容稱為一個元素(element),在以上例子中就有〈age〉、<name〉元素。元素可以擁有值,如〈age〉的值是10;也可以擁有子元素,如〈name〉擁有子元素〈first-name〉和〈last-name〉;也可以沒有值,如〈hobby〉,這種情況稱為空元素,可縮寫記為〈hobby/〉;元素還可以擁有屬性(attribute),屬性是一個"名字-值"對,如〈name〉擁有屬性language,屬性值是English。元素間的層次嵌套關系經常表達為一個樹型數(shù)據(jù)結構,如圖1所示,因此元素也被稱作節(jié)點。在一對嵌套關系中,外層節(jié)點被稱作內層節(jié)點的父節(jié)點;內層節(jié)點被稱作外層節(jié)點的子節(jié)點。如圖1中,<a>A<bl>、<b2>、<3>的父節(jié)點,<bl>、<b2>、43>是<3>的子節(jié)點。擁有同一父節(jié)點的幾個節(jié)點相互稱為兄弟節(jié)點,如<1)1>、<b2>、〈b3〉彼此是兄弟節(jié)點。在網(wǎng)絡管理中,需要監(jiān)視網(wǎng)絡設備的配置和狀態(tài),為達到此目的,網(wǎng)管設備發(fā)出查詢報文,描述所需要查詢的數(shù)據(jù),被管設備收到查詢報文后,依照查詢報文中的條件執(zhí)行查詢,并向網(wǎng)管設備應答查詢結果。NETCONF協(xié)議擁有兩種查詢操作〈geP和〈get-config〉?!磄eP操作用于查詢當前正在運行的配置和狀態(tài)數(shù)據(jù);〈get-config〉用于查詢不同配置數(shù)據(jù)存儲中的配置數(shù)據(jù)。盡管兩者的查詢對象有所區(qū)別,但擁有相同的查詢條件表達方式,即子樹過濾和XPATH(XML路徑語言)方式?,F(xiàn)有技術一中,子樹過濾使用XML方式描述過濾條件,通過一組簡單的匹配規(guī)則,對符合條件的數(shù)據(jù)元素進行選取。例l是一個子樹查詢的例子,rpO元素表明這是一個網(wǎng)管設備發(fā)出的請求,〈ge^元素表明網(wǎng)管設備請求執(zhí)行查詢操作,〈filter〉元素指明了查詢方式和查詢條件,其屬性type—subtree"指出該查詢釆用子樹過濾方式,〈filter〉包含的子節(jié)點表明該查詢希望查詢命名空間"http:〃example.com/schema/1.2/stats"內的〈top〉元素中的〈interfaces〉元素中的某個〈interface〉元素,并且該〈interface〉元素必須具有ifName屬性,ifName的屬性值是"ethO"。例1:一個^f吏用子樹查詢的〈get〉請求<rpcmessage-id="101"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get><filtertype="subtree,,><t:topxmlns:t="http:〃example.com/schema/l.2/stats"〉<t:interfaces〉<t:interfacet:ifName="eth07></t:interfaces></t:top></filter></get></rpc>其中,〈filter〉元素被稱為過濾器,在子樹過濾中,過濾器由零到多個代表選擇標準的元素子樹構成。在子樹的各層,被管設備對每個兄弟節(jié)點集合進行邏輯判斷,以決定各兄弟節(jié)點所牽頭的子樹是否包含在過濾器的輸出結果中。所有在過濾器子樹中出現(xiàn)的元素,必須與服務器概念數(shù)據(jù)模型中的對應節(jié)點相匹配。過濾器可分為5種組件,每種組件執(zhí)行不同的過濾規(guī)則,包括命名空間選擇、屬性匹配表達式、包含節(jié)點、選擇節(jié)點、內容匹配節(jié)點。命名空間選擇如果使用命名空間,則過濾器的輸出只包含指定的命名空間中的元素。即過濾器中"xmlns"屬性的內容應與被管設備數(shù)據(jù)模型中"xmlns"屬性的內容相同。在例1中<t:topxmlns:t-"http:〃example.com/schema/1.2/stats"〉指出了選擇的命名空間是http:〃example.com/schema/1.2/stats,只有該命名空間中的<top>中的子元素被輸出。屬性匹配表達式出現(xiàn)在過濾器中的屬性是屬性匹配表達式的一部分。被選擇的數(shù)據(jù)除了要與過濾器中的節(jié)點匹配,還必須與過濾器的屬性相匹配。如果一個元素不包含指定的屬性,則該元素將不被選擇。例1中,ifName-"ethO"就是屬性匹配表達式。過濾結果將輸出擁有ifName屬性,并且ifName的屬性值是"ethO"的〈interface〉元素,如例2所示。例2中,〈rpc國reply〉元素表明這是一個應答,^ata〉元素表明應答的數(shù)據(jù),應答數(shù)據(jù)的命名空間、各級子元素和屬性都和過濾器中的對應部分相匹配。例2屬性匹配的查詢結果<rpc-replymessage-id="101"xmlns="urn:ietf:pamms:xml:ns:netconf:base:1.0"><data>〈t:topxmlns:t="http:〃example.com/schema/l.2/stats"〉<t:interfaces><t:interfacet:ifName="ethO"><t:iflnOctets>45621</t:iflnOctets><t:ifOutOctets>774344</t:ifOutOctets></t:interface></t:interfaces〉</t:top></data></rpc-reply>包含節(jié)點過濾器中包含子元素的節(jié)點被稱為包含節(jié)點。包含節(jié)點的子元素也可以是包含節(jié)點,或其他類型的節(jié)點。例1中,々op〉是一個包含節(jié)點,其子元素〈interfaces〉也是一個包含節(jié)點。選擇節(jié)點過濾器中的空節(jié)點被稱為選擇節(jié)點,表示對數(shù)據(jù)模型的一個顯式選擇。如果在數(shù)據(jù)模型的兄弟節(jié)點中出現(xiàn)了選擇節(jié)點,則只有該選擇節(jié)點下的子樹被選擇,該選擇節(jié)點的兄弟節(jié)點不被選擇。如例3中,〈name〉元素是個選擇節(jié)點。在被管設備的數(shù)據(jù)模型中,如果〈user〉除了〈name〉還有其他子節(jié)點,那么只有〈name〉才被選擇,〈name〉的兄弟節(jié)點將不被選擇。例3過濾器中的選擇節(jié)點<filtertype="subtree,,><topxmlns="http:〃example.com/schema/l.2/config"><ussrs><ussr><nams/></user></us6rs></top></filter>內容匹配節(jié)點包含文本值的葉子節(jié)點被稱為內容匹配節(jié)點,表示對父節(jié)點的選擇條件。例4中,〈name〉元素是內容匹配節(jié)點,表示所有〈name〉為"fred"的〈user〉元素(及其子元素)將被選擇輸出。該過濾器的查詢結果如例5所示。多個兄弟內容匹配節(jié)點間執(zhí)行"與,,的邏輯運算;例4過濾器中的內容匹配節(jié)點<filtertype="subtree,,><topxmlns="http:〃example.com/schema/l.2/config"><us6rs><ussr><name>fred</name></user></us6rs></top></filter>例5針對內容匹配節(jié)點的應答輸出〈rpc-replymessage-id="101"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><data><topxmlns="http:〃example.com/schema/l.2/config"><uscrs><user><name>fred</name><typ6>3dmin</typs><fbll-name>FredFlintstone</fUll-name><company-info><dept>2</dept><id>2</id></company-info></user></us6rs></top></data></rpc-reply>綜上所述,子樹過濾的流程可概括如下過濾器的輸出開始是空的。被管設備將它所支持的數(shù)據(jù)模型與過濾器中的每個數(shù)據(jù)分枝進行比較,如果一個節(jié)點所代表的子樹的所有分枝與被管設備的數(shù)據(jù)模型的對應部分實現(xiàn)了完全匹配,則該節(jié)點及其所有子節(jié)點包含在結果數(shù)據(jù)中。被管設備將具有相同父節(jié)點的節(jié)點(即兄弟節(jié)點集合)集中在一起進行處理,從根節(jié)點到葉子節(jié)點。對于每個兄弟節(jié)點集合,被管設備首先確定該集合中出現(xiàn)的節(jié)點類型,根據(jù)不同類型的選擇規(guī)則進行處理。如果集合中有某些節(jié)點被選擇,則該處理過程被疊代應用到每個被選中節(jié)點的下層兄弟集合之中。算法持續(xù)到所有過濾器子樹中的兄弟節(jié)點集合被處理完畢。子樹過濾中過濾條件要求較為嚴格,進行查詢時需要較多的已知條件。協(xié)議中對子樹過濾機制的描述,認為子樹過濾基于簡單的精確匹配,僅包含較少類型的過濾器,以對XML型子樹實現(xiàn)用途廣泛但局限較大的選擇。這種選擇不對數(shù)據(jù)模型做任何預處理,也不使用任何針對數(shù)據(jù)模型的特殊規(guī)范。子樹過濾機制完全采用XML語言定義,并沒有附加任何針對子樹過濾本身的規(guī)范,故而查詢和過濾功能相對較弱,需要較多的已知條件。過濾條件必須是以絕對路徑表達的樹形結構。因而如果對查詢實體或過濾條件的組成實體在數(shù)據(jù)模型中的位置不完全清楚,則無法滿足任何需求。只能舍棄過濾器,返回整個數(shù)據(jù)模型。子樹過濾只能過濾與過濾請求完全吻合的數(shù)據(jù)。所有過濾中節(jié)點名字、節(jié)點值、屬性名字、屬性值、命名空間等字符只能精確匹配,即過濾器中的字符串必須和數(shù)據(jù)模型中的字符串完全相同,否則會認為在數(shù)據(jù)模型中不存在符合過濾條件的節(jié)點。包括數(shù)字、日期等也必須精確匹配,不能實現(xiàn)范圍過濾。比如要查詢一個屬性為name、值為Ethernet2的〈interface〉元素,必須完整給出元素的路徑為/netconf/routing/interface,netconf和routing節(jié)點的命名空1、司為urn:ietf:params:xml:ns:netconf:base:l.O,interface6々命名空1、司為urn:bupt:pris:priser:agent:module:interface:l.O,屬'I"生名為name,屬'l"生<直為Ethemet2,如例6所示,很顯然這個查詢需要太多的已知條件例6查詢屬性name值為Ethemet2的interface元素信息<filtertype="subtree,,>〈netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><routing〉<interfacexmlns="urn:bupt:pris:priser:agent:module:interface:1.0"name="Ethernet27></routing></n6tconf></filter>子樹過濾傾向于向用戶返回所有的可能有需要的管理信息,容易造成冗余和混淆。例如當用戶試圖查詢某個節(jié)點本身的信息時,子樹過濾會將其所有后代一并輸出,因為無法從過濾器定義中判斷出用戶需要的是該節(jié)點本身,還是其屬性抑或是其某一個子孫。這樣可能會造成在網(wǎng)絡中傳輸大量不必要的加密信息以及用戶人工查找信息的困難。比如用戶只想獲得〈nterface〉元素的屬性信息,使用了例7所示的查詢請求,該請求的結果如例8所示例7查詢interface元素的屬性〈filtertype="subtree,,>〈netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><routing><interfacexmlns="urn:bupt:pris:priser:agent:module:interface:1.07></routing></netconf></filter>例8例7的查詢結果〈netconfxmlns-"urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt-"urn:bupt:pris:priser:agent:module:monitor:1.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64.139.65"><../></if:interface><if:interfacename="Ethemet2"ip-address="59.64.139.69"><../></if:interface></routing></netconf>從過濾結果中可以看出,過濾結果不但返回了〈interface〉節(jié)點的全部屬性信息,而且還返回了如〈interface〉的后代節(jié)點等信息(用<.../>表示),對于這個用戶的需求來說,這些信息是冗余的。因此,現(xiàn)有技術一中的子樹過濾缺少對過濾結果的統(tǒng)計和處理機制。除了返回xml語言規(guī)定的實體外,對這些實體的統(tǒng)計信息用戶無法獲得,同時也無法控制這些實體的返回方式,用戶將無法控制返回數(shù)據(jù)量的大小?,F(xiàn)有4支術二中,XPath即XML路徑語言,是W3C關于查詢XML文檔的通用語言標準。從外觀上看,XPath是用文件路徑的形式表示XML文檔查詢條件的方法。例如,例4中的子樹過濾用XPath表達就如例9所示。例中type="xpath"表明使用XPath查詢方法,select屬性的值為一個XPath表達式,指出了查詢的內容和條件。例9:XPath過濾表達式〈filtertype="xpath"select="top/users/user[name="fred,,]7>XPath本質上是與具有層次結構的XML數(shù)據(jù)模型相匹配的查詢語言,可以通過任何方向瀏覽樹來選擇節(jié)點,并根據(jù)節(jié)點的值和位置應用謂詞。XPath遵循文檔對象模型(DocumentObjectModel,DOM)的路徑格式。由于每個XML文檔都可以看成是一棵擁有許多節(jié)點的樹,節(jié)點的類型包括根節(jié)點(root)、元素節(jié)點(element),屬性節(jié)點(attribute)、文本節(jié)點(text)、命名空間節(jié)點(namespace)、處J里才旨令節(jié)點(processinginstruction)和注釋(comment)。XPath的目標是定義一種定位XML文檔各個部分的語言,其功能是在數(shù)據(jù)存儲區(qū)中查詢某一個節(jié)點或節(jié)點集,為了實現(xiàn)這個目標,XPath規(guī)范定義了兩個主要部分一部分是表達式語法,另一部分是一組名為XPath核心庫的基本函數(shù)。XPath的基本語法由表達式構成,在計算表達式的值之后產生一個對象,這種對象有以下四種基本類型節(jié)點集合、布爾型、數(shù)字型和字符串型。XPath基本上和電腦文件系統(tǒng)中的尋找類似,如果路徑是以"/"開頭的,就表明該路徑表示的是一個絕對路徑;以"http://"開頭則表示在文檔中的任意位置查找。通過XPath路徑表達式,可以在XML文檔中輕松地定位數(shù)據(jù)、確定節(jié)點。現(xiàn)有技術二中的XPath機制較為復雜,難于掌握。XPath使用路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集,且含有超過100個內建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值、日期和時間比較、節(jié)點和QName處理、序列處理、邏輯值等。包括各種軸的定義和使用,同時又不具有與XML文檔相關的直觀結構,掌握起來較為困難。XPath需求以非XML結構表述,需提供額外機制進行解析和處理。在子樹過濾中過濾器本身也是XML結構,使用起來相對直觀,處理起來與NETCONF協(xié)議中的管理數(shù)據(jù)模塊方法也基本類似。但是XPath是通過路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集,這樣對其解析還需要另外的解析和處理方法。XPath是通過路徑表達式來選取XML文檔中的節(jié)點或者節(jié)點集,每次只能獲取一條查詢記錄,這樣對于用戶想一次實現(xiàn)多個結果的查詢就無法實現(xiàn),查詢效率比較低。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術至少存在以下缺點現(xiàn)有技術一中的子樹過濾基于精確匹配和絕對路徑,需要用戶提供較多已知條件,缺少對過濾結果的統(tǒng)計和處理機制;而現(xiàn)有技術二中XPath機制較為復雜,難于掌握。
發(fā)明內容本發(fā)明實施例提供了一種模糊查詢、查詢結果處理和過濾條件處理的方法及設備,以解決NETCONF協(xié)議子樹過濾機制僅局限于精確匹配和絕對路徑,數(shù)據(jù)查詢中要求給出較多已知信息帶來的不便;解決NETCONF協(xié)議數(shù)據(jù)模型查詢中,對命名空間查詢、過濾、處理手段匱乏的問題;豐富子樹過濾機制的查詢和過濾手^:,提高子樹過濾的靈活性和功能性;處理子樹過濾得到的XML過濾結果文檔,減少冗余信息的處理和傳輸;修正NETCONF協(xié)議中子樹過濾部分不合理的過濾報文處理方法。本發(fā)明實施例提供了一種基于子樹過濾的模糊查詢方法,包括接收待過濾數(shù)據(jù)流;通過不完全匹配的方式過濾所述數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件本發(fā)明實施例還提供了一種子樹過濾條件的邏輯組合的擴展方法,包括接收待過濾數(shù)據(jù)流;采用多個屬性或多個內容匹配節(jié)點對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾。本發(fā)明實施例還提供了一種子樹過濾查詢結果的處理方法,包括在過濾器中相應節(jié)點處設置第三屬性的值,表明所述節(jié)點處是否顯示節(jié)點后代;所述第三屬性的取值為第一值或者第二值,當所述第三屬性默認為顯示所有在同一命名空間的后代,則第三屬性=第二值;當設置第三屬性=第一值,則過濾結果只輸出該節(jié)點的信息,不輸出所述在同一命名空間的后代節(jié)點。本發(fā)明實施例還提供了一種過濾器,包括接收模塊,用于接收待過濾數(shù)據(jù)流;過濾模塊,用于通過不完全匹配的方式過濾所述數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。本發(fā)明實施例還提供了一種邏輯過濾裝置,包括接收模塊,用于接收待過濾數(shù)據(jù)流;邏輯過濾模塊,用于釆用多個屬性或多個內容匹配節(jié)點對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾。本發(fā)明實施例還提供了一種子樹過濾查詢結果處理裝置,包括設置模塊,用于在過濾器中相應節(jié)點處設置第三屬性的值;確定模塊,用于根據(jù)所述設置模塊設置所述第三屬性的值,表明所述節(jié)點處是否顯示節(jié)點后代。本發(fā)明的實施例中,提供一種基于NETCONF子樹過濾機制,以XML形式表達,對XML網(wǎng)絡管理數(shù)據(jù)進行查詢和過濾,4吏對NETCONF協(xié)議中管理信息的獲取更為方便,也避免了為數(shù)據(jù)查詢和過濾重新定義一套規(guī)范帶來的諸多問題。本發(fā)明實施例提供了一種對XML數(shù)據(jù)過濾條件的細化和組合機制。XML文檔中的節(jié)點有時包含了具體的數(shù)據(jù)信息,類似于關系數(shù)據(jù)庫中一個字段;有時只是封裝數(shù)據(jù)信息的手段,類似于關系數(shù)據(jù)庫中的一條記錄。本發(fā)明實施例中細化了節(jié)點的匹配程度,用戶可以根據(jù)節(jié)點在數(shù)據(jù)存儲中的具體作用選擇相應的查詢方法。另外,屬性、命名空間方式表達的過濾條件可以以邏輯運算方式組合到一起,使查詢更為靈活。本發(fā)明實施例提供一種在過濾條件不完整的情況下,比如不能完整拼寫出數(shù)據(jù)存儲的節(jié)點或屬性名字,或者不能完全給出數(shù)據(jù)在XML文檔中定義的位置,仍可以對XML數(shù)據(jù)進行子樹過濾操作,并得到用戶想要的結果。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單介紹,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖l是現(xiàn)有技術中一種樹型數(shù)據(jù)結構示意圖;圖2是本發(fā)明實施例中NETCONF協(xié)議中子樹過濾系統(tǒng)結構圖;圖3是本發(fā)明實施例中總體流程圖;圖4是本發(fā)明實施例中過濾控制模塊工作流程圖;圖5是本發(fā)明實施例中過濾控制調用名字空間處理組件流程圖;圖6是本發(fā)明實施例中遞歸流程控制流程圖;圖7是本發(fā)明實施例中結果處理實現(xiàn)流程圖;圖8是本發(fā)明實施例二的基于子樹過濾的模糊查詢方法流程圖;圖9是本發(fā)明實施例三的子樹過濾條件的邏輯組合的擴展方法流程圖;圖10是本發(fā)明實施例四的子樹過濾查詢結果的處理方法實現(xiàn)流程圖;圖ll是本發(fā)明實施例五的過濾器結構示意圖;圖12是本發(fā)明實施例六的邏輯過濾裝置結構示意圖;圖13是本發(fā)明實施例七的子樹過濾查詢結果處理裝置結構示意圖。1具體實施例方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施方式,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明實施例提供一套基于NETCONF協(xié)議并對NETCONF協(xié)議中子樹過濾機制加以擴展的,實現(xiàn)對XML語言定義的網(wǎng)絡管理信息模型的數(shù)據(jù)查詢和數(shù)據(jù)過濾功能的定義方法。定義方法包括對于子樹過濾功能的詳細說明和與功能定義相關的關4建字定義。為與NETCONF協(xié)議中子樹過濾機制相區(qū)別,本發(fā)明實施例為〈filter〉節(jié)點的type屬性新增取值advancedSubtree,表示其中可能含有進行子樹過濾機制擴展功能操作的請求。子樹過濾擴展機制主要包括以下功能1.模糊匹配模糊匹配是指在過濾流程中,處理節(jié)點名字、節(jié)點內容、屬性名字、屬性值、命名空間等字符串匹配中,以不完全匹配的方式處理用戶沒有給出完全查詢信息的字符串。由于XML文檔標簽對于字符串有著較為嚴格的限制,所以節(jié)點名、屬性名等標簽內容與節(jié)點內容、屬性值、命名空間等文本內容的模糊匹配手段是不一樣的。對于標簽內容來說,僅可使用字符"」,表示匹配任何字符。對于節(jié)點內容、屬性值、命名空間等帶有雙引號的字符串,則進行字母匹配或者利用"*"匹配所有字符。例10,例11:過濾〈routing〉節(jié)點下具有某屬性值為Ethernetl的〈nterface〉節(jié)點。過濾中找到屬性值Ethernetl對應的屬性和屬性所在節(jié)點,將所在節(jié)點、屬性名字和屬性值均輸出,則過濾結果如例11。例10屬性名字的模糊匹配<filtertype="advancedSubtree,,>〈netconfxmlns="*,,><routing><interface_="Ethernetl7></routing></netconf></filter>例11屬性名字模糊查詢的返回結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0"><routing>〈if:interfacename="Ethemetl"ip-address="59.64.139.65"〉<../></if:interface></routing></netconf>上述實例中,過濾器中的過濾器〈filte^節(jié)點指定了希望選擇的數(shù)據(jù)模型中的〈interface〉節(jié)點的絕對路徑,并通過在過濾器節(jié)點〈nterface〉中設置屬性j"Ethemetr實現(xiàn)了根據(jù)值查詢屬性的模糊查詢功能。另外也可以根據(jù)屬性名字查詢值,只要將該〈interface〉中的屬性改為name="*,,(例如例12),過濾中找到屬性name的值和所在節(jié)點,將所在節(jié)點、屬性名字和屬性值均輸出,則過濾結果與例11一致。例12屬性值的才莫糊匹配<filtertype="advancedSubtree"><netconfxmlns="*"><routing><interfacsnams="*,,/><routing/><netconf/></filter>節(jié)點名字與值的模糊查詢與之類似。如模糊了〈name〉的值和〈name〉自身的查詢可30下所示<interface><name>*</name></interface>或者<interface><—>Ethernet1</—〉〈/interface〉此外,還可以實現(xiàn)對節(jié)點值、屬性值、命名空間內容進行不完全內容匹配的^莫糊過濾。如例13,例14。例13不完全內容匹配<filtertype="advancedSubtree,,>〈netconfxmlns="*,,><routing><interfac6><mac-address>0006G*</mac-address></interface></routing></n6tcon:P></filter>例14不完全內容匹配的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethernetl"ip-address="59.64.139.65"><if:mac-address>0006GG93KAG8</if:mac-address><./></if:interface></routing></netconf>上述實例13、14中,希望從數(shù)據(jù)模型中選擇與過濾器指定路徑相匹配并且其子節(jié)點〈mac-address〉的文本值與0006G部分匹配的〈interface〉節(jié)點。在過濾器中,〈mac-address〉0006G承〈/mac-address〉表示對內容進行非完全匹配。從過濾結果中看到,數(shù)據(jù)模型中存在節(jié)點〈nterface、該節(jié)點的子節(jié)點〈mac-address〉的值可以與過濾器中相應節(jié)點的值非完全匹配。"*,,代表一個非空白字符串,可以出現(xiàn)在節(jié)點值、屬性值、命名空間字符串等以""標記的字符串的開頭、末尾或其他地方。由于XML文檔規(guī)定,屬性名字或者值不能單獨出現(xiàn),例如xml規(guī)定節(jié)點<interfacename〉為非法節(jié)點(此處interface為節(jié)點名字,name為該節(jié)點的屬性名字,屬性值未知)。因此如果只知道屬性名字或屬性值,則在過濾器的節(jié)點中應該給出利用特殊字符匹配屬性名字或屬性值的形式如attrName一'attrValue,,的完整形式,如<interfacename="*"/>或者〈interface—="Ethemetl7>,前者屬性值未知,利用"*"來代^^;后者屬性名字未知,利用,,一"來匹配。除此之外,標簽內的特殊字符是不被允許的,只能使用";&『之類的轉義字符來替換,對于用戶來說非常不友好。因此只允許"—"字符匹配所有可能。凡本文中提到的內置關鍵字及其可能的取值,不能夠使用模糊匹配。2.相對if各徑與跨層次訪問協(xié)議中子樹過濾采用絕對路徑匹配即過濾器、數(shù)據(jù)模型、過濾結果必須有相同的根節(jié)點,其他所有元素必須給出從根節(jié)點開始的所有祖先,過濾結果中只包含在過濾器中的祖先和在數(shù)據(jù)模型中的祖先完全一致的節(jié)點。為了提高過濾的靈活性,特增加相對路徑匹配機制,即過濾器中的子節(jié)點對應的過濾結果節(jié)點未必是過濾器中父節(jié)點對應的過濾結果節(jié)點的子節(jié)點,也可能是其更深層次的后代;過濾器中的根節(jié)點未必是相應過濾結果中的才艮節(jié)點。相對路徑過濾在〈filter〉節(jié)點定義屬性相關關鍵字一nodepath,且該屬性_nodepath只能存在于〈filter〉節(jié)點之中。該屬性的取值只有兩個,一個是absolute,表示過濾器中所有節(jié)點采用絕對路徑過濾,即過濾結果中各個節(jié)點相互之間的關系必須與過濾器中各節(jié)點之間的關系嚴格一致,是該屬性的默認選項(此時可以不使用relative屬性);另一個是relative,表示采用相對路徑過濾,即在過濾器中滿足父子關系的節(jié)點可以在過濾結果中只滿足祖先后代關系。實際處理中當數(shù)據(jù)模型節(jié)點滿足不了絕對路徑關系時,即在數(shù)據(jù)模型對應位置上的兄弟節(jié)點中找不到與過濾器節(jié)點匹配的節(jié)點時,再在兄弟節(jié)點的后代中尋找可以匹配的節(jié)點。如果仍然找不到,那么認為該過濾器節(jié)點不存在匹配節(jié)點。例如例15,例16希望查詢數(shù)據(jù)模型中的〈nterface〉節(jié)點,但不知其在數(shù)據(jù)模型中的具體位置,所以無法在過濾器中給出該節(jié)點的絕對路徑例15相對路徑過濾<filtertype="advancedSubtree,,—nodepath="relative">〈interfac6xmlns31,,815,,/〉</filter>例16相對i各徑過濾的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing>〈if:interfacename="Ethernetl"ip-address=,,59.64.139.65,,><.../></if:interface><if:interfacename="Ethemet2"ip-address="59.64.139.69,,><"/〉</if:interface></routing>22</netconf>上述實例15、16中,過濾器構造了一個過濾器《ilter、該過濾器希望過濾出數(shù)據(jù)模型中所有的〈interface〉節(jié)點。由于過濾器未給定節(jié)點〈interface〉在數(shù)據(jù)模型中的路徑,所以采用相對路徑過濾,需要在過濾器〈filter〉中添加屬'I"生—nodepath="relative"。在相對路徑過濾中,如果有過濾器節(jié)點與數(shù)據(jù)模型節(jié)點不匹配,則并不直接退出對該節(jié)點的進一步處理,而是繼續(xù)尋找數(shù)據(jù)模型中該節(jié)點后代是否有匹配于過濾器節(jié)點的節(jié)點。所以上述實例的過濾結果報文將輸出數(shù)據(jù)模型中所有<interface>節(jié)點的所有父輩節(jié)點直至<netconf>4艮節(jié)點,并輸出〈interface〉節(jié)點的后代節(jié)點。如果已知interface節(jié)點所在數(shù)據(jù)模型的根節(jié)點是netconf,也可以這樣改寫例15為<filtertype="advancedSubtree"—nodepath="relative"><netconf><interface/></netconf></filter>過濾結果與例16完全相同。相對路徑過濾也可以結合模糊匹配,從而能夠對屬性名字或屬性值的直接查詢。如例17和例18查詢具有name屬性的節(jié)點和name屬性可能的值例17查詢屬性name的所有取值<filtertype="advancedSubtree,,—nodepath="relative"><—name="*,,/></filter>例18屬性name的查詢結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64,139.65"></if:interface>〈if:interfacename="Ethernet2"ip-address="59.64.139.69"></if:interface></routing></netconf>這個實例(例17、18)的過濾器構造了一個過濾器〈filter、希望從數(shù)據(jù)模型中過濾出所有擁有屬性名為name、屬性值為任意值的節(jié)點,另外由于需要過濾出所有符合該條件的節(jié)點,所以過濾器無法給出各個節(jié)點的絕對路徑,則需要采用相對路徑過濾,在過濾器〈filter〉中添加屬性—nodepath="relative"。從過濾結果可以看出,數(shù)據(jù)模型中name屬性的值可能為Ethemetl或Ethernet2,而且在數(shù)據(jù)模型中具有name屬性的節(jié)點只有〈nterface〉節(jié)點,由于過濾要求只返回節(jié)點本身的信息,所以不會返回〈interface〉節(jié)點的后代節(jié)點的信息。3.查詢條件細化與組合在子樹過濾中,可以采用多個屬性或多個內容匹配節(jié)點對元素類型節(jié)點進行過濾。過濾條件只能完全符合或者相反,過濾條件之間默認為是"與"且只能是"與"的關系。而對于命名空間,邏輯關系"與"是不存在的。為了提高過濾條件設置的靈活性,特增加其他兩種邏輯關系或、非,并細分以元素節(jié)點方式定義的過濾條件的匹配程度。3.1元素節(jié)點過濾條件的邏輯關系由于xml語言本身具有樹型層次結構,可以較清晰的反應數(shù)據(jù)模型的樹狀層次結構。在不打亂該結構的情況下,通過在每個內容匹配節(jié)點中添加屬性—matchType來表示該節(jié)點的匹配程度,并在一定程度上間接地實現(xiàn)節(jié)點過濾條件之間的邏輯關系組合。注意,由于內容匹配節(jié)點的作用主要是作為從數(shù)據(jù)模型中選擇特定的父節(jié)點的過濾條件,所以屬性—matchType只有出現(xiàn)在內容匹配節(jié)點才有意義,如果過濾器中該屬性出現(xiàn)在選擇節(jié)點或者容器節(jié)點時,則該屬性并無多少意義。屬性—matchType的取值有三個must(屬性—matchType的默認值),may和not。其中,must表示過濾器中內容匹配節(jié)點與數(shù)據(jù)模型中相應的節(jié)點必須完全匹配(即節(jié)點路徑、節(jié)點名字、命名空間、屬性、節(jié)點的文本內容等必須完全匹配)時,才將其父節(jié)點添加到過濾結果中,為默認項;may表示如果過濾器中的某個內容匹配節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配(即節(jié)點路徑、節(jié)點名字、屬性,命名空間、節(jié)點文本內容等完全匹配)時,則將該內容匹配節(jié)點的父節(jié)點添加到過濾結果中;若不匹配,則在過濾該內容匹配節(jié)點的父節(jié)點(假設為節(jié)點">)時忽略該內容匹配節(jié)點,查看過濾器中是否還有其他的內容匹配節(jié)點與節(jié)點〈a〉的子節(jié)點相匹配;not表示如果過濾器中內容匹配節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配(即節(jié)點路徑、節(jié)點名字、命名空間、屬性、節(jié)點的文本內容等必須完全匹配)時,則不添加該內容匹配節(jié)點的父節(jié)點到過濾結果中。例19內容匹配節(jié)點邏輯關系組合的過濾器過濾包含節(jié)點<name>Ethernetl</name>并且包含節(jié)點〈received〉49〈/received〉的節(jié)點〈interface〉,貝'J過濾器如下所示<filtertype="advancedSubtree,,>〈netconfxmlns="*"><routing><interface><name—matchType="must,,>Ethernetl</name><!—<name>Ethemetl</name>—><received_matchType="must,,>49</received><!—<received>49</received>—>25</interface></routing></netconf></filter>在上述實例19中,過濾器〈filter〉指定了節(jié)點〈nterface〉在數(shù)據(jù)模型中的路徑,并且要求只有同時滿足擁有子節(jié)點化ame〉和々eceived〉并且這兩個子節(jié)點與過濾器中相應子節(jié)點的文本內容完全匹配的〈interface〉節(jié)點才會^皮添加到過濾結果中。由于數(shù)據(jù)模型中不存在與過濾器中指定的過濾條件相匹配的〈nterface〉節(jié)點,所以過濾結果返回的4艮文是空。而過濾包含<name>Ethernet1</name>或者<received>49</received>的節(jié)點〈nterface、則過濾器和過濾結果分別如下例20所示例20內容匹配節(jié)點之間"或"邏輯關系的實現(xiàn)<filtertype="advancedSubtree,,><netconfxmlns="*"><routing><interface><name—matchType="may">Ethernet1</name><received_matchType="may">49</received></interface></routing></netconf></filter>例21:例20的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64.139.65"><if:name>Ethemetl</if:name>〈…/〉</if:interface>〈if:interfacename="Ethernet2"ip-address="59.64.139.69"><if:received>49</if:received><"/></if:interface></routing></netconf>在上述實例20中,過濾報文構造了一個過濾器〈filter、首先從數(shù)據(jù)模型中過濾出過濾器指定路徑的〈nterface〉節(jié)點,然后在這些〈nterface〉節(jié)點中,那些擁有子節(jié)點<name>或者<received>或者兩者都有,并且滿足子節(jié)點〈name〉或者<received>的文本內容與過濾器中相應的節(jié)點完全匹配的〈nterface〉節(jié)點才會#:添加到過濾結果中。在本實例21中,過濾結果返回兩個〈interface〉節(jié)點,第一個〈nterface〉節(jié)點由于其子節(jié)點〈name〉與過濾器中指定的內容匹配節(jié)點〈name〉相匹配而被選中;第二個〈nterface〉節(jié)點由于其子節(jié)點々eceived〉與過濾器中指定的內容匹配節(jié)點〈received〉相匹配而^皮選中。例22,例23演示了一matchType一'not"的例子,查詢希望輸出〈name〉節(jié)點的值不是Ethernetl的〈interface〉節(jié)點,因此只有〈name〉值是Ethernet2的〈interface〉節(jié)點被^r出。過濾器和過濾結果分別如下所示例22內容匹配節(jié)點的"非"過濾條件<filtertype="advancedSubtree,,><netconfxmlns="*"><routing><interface><name_matchType="not">Ethernetl</name></interface></routing></netconf></filter>例23例22的過濾結果<netconfxmlns="um:ietf:params:xml:ns:netconf:base:l.0"xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethemet2"ip-address="59.64.139.69"〉<if:name>Ethernet2</if:name><.../></if:interface></routing></netconf>例24,例25顯示了不在同一個層次的節(jié)點的邏輯關系過濾的過濾器和過濾結果例24不同層次內容匹配節(jié)點邏輯關系組合<filtertype="advancedSubtree,,><netconfxmlns="*"><routing><int6rfacc><name—matchType="may">Ethernetl</name><ipv4><address-v4—matchType="may">59.64.139.69</iaddress-v4></ipv4></interface></routing></netconP></filter>例24的結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethernetl"ip-address="59.64.139.65"><if:name>Ethernetl</if:name><.../></if:interface><if:interfacename="Ethernet2"ip-address="59.64.139.69"><if:ipv4><if:address-v4>59.64.139.69</if:address-v4><if:flagsup="false"/〉</if:ipv4></if:interface></routing>上述實例24過濾出了數(shù)據(jù)模型中包含〈if:name〉EthernetK/if:name〉子節(jié)點的〈interface〉節(jié)點以及包含〈if:address-v4〉59.64.139.69〈/if:address-v4〉子節(jié)點的〈pv4〉節(jié)點。如果將〈address-v4〉的—matchType屬性^直i殳置為"must",如下面的例25、例26,則生成的過濾器和過濾結果如下例25內容匹配節(jié)點邏輯關系組合的過濾器<filtertype="advancedSubtree,,>〈netconfxmlns=,,s|s,,〉<routing><interface>29<name_matchType="may">Ethernetl</name><ipv4><address-v4—matchType="must">59.64.139.69</iaddress-v4></ipv4></interface></routing〉</netconfi></filter〉例26例25的過濾結果〈netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64.139.65"><if:name>Ethernetl</if:name><if:mac-address>0006GG93KAG8</if:mac-address><if:received>l9</if:received></if:interface>〈if:interfacename="Ethemet2"ip-address="59.64.139.69"><if:ipv4><if:address-v4>59.64.139.69</if:address-v4>〈if:flagsup="false"/></if:ipv4></if:interface></routing>上述實例25中,從數(shù)據(jù)模型中過濾出兩個〈nterface〉節(jié)點,第一個〈nterface〉節(jié)點包含子節(jié)點〈name〉并且該子節(jié)點與過濾器〈filter〉中的內容匹配節(jié)點〈name〉完全匹配,但是由于它的子節(jié)點〈ipv4〉的子節(jié)點〈address-v4〉與過濾器中響應的內容匹配節(jié)點<address-v4>不匹配而且過濾器中內容匹配節(jié)點〈address-v4〉的—matchType屬性值為must,所以專lr出的〈interface〉后代節(jié)點中沒有〈pv4〉子節(jié)點;另一個〈nterface〉節(jié)點,它的子節(jié)點〈ipv4〉的子節(jié)點<address-v4>與過濾器中相應的內容匹配節(jié)點完全匹配,所以輸出該〈interface〉節(jié)點的子節(jié)點〈ipv4〉的全部信息。另外,允許用戶對容器節(jié)點和選擇節(jié)點應用屬性—matchType,但是在這兩種類型的節(jié)點中該屬性的值只能是"must"。如果用戶在容器節(jié)點或選擇節(jié)點中對一matchType屬性賦予了其他值(如not/may),則過濾機制將對在這兩種類型節(jié)點中出現(xiàn)的一matchType屬性忽略其值,因為其并無意義可用。3.2節(jié)點屬性和命名空間的邏輯關系過濾節(jié)點的多個屬性間的邏輯關系可以通過向節(jié)點中添加屬性—attrLogic來標示。命名空間邏輯關系條件添加jsLogic來標示。節(jié)點的普通屬性(不包括命名空間)之間可以有邏輯與"A"、邏輯或'f,(這兩者優(yōu)先級相等),以及邏輯非"!"(優(yōu)先級高于"II,,和"A,,)的關系,并可以使用()改變其優(yōu)先級;而節(jié)點的命名空間之間只有邏輯或'f,的關系,表示可以同時從多個命名空間中查找滿足其過濾條件的元素。命名空間邏輯關系與默認命名空間一樣,有繼承關系。即除非子節(jié)點定義了—nsLogic屬性新的值比如取nsLogk^""表示邏輯關系無效,否則默認其與父節(jié)點有相同的命名空間邏輯組合過濾條件。在—attrLogic引出的邏輯表達式中,節(jié)點普通屬性使用邏輯表達式所在節(jié)點的其他屬性的名字標記,例如name-"Ethernetr,可以在同一節(jié)點定義屬性_attrLogic=,,!name",屬性值包含"name"表示name屬性;如果節(jié)點未定義屬性—attrLogic,那么按照NETCONF協(xié)議規(guī)定,各個屬性之間是"與"的關系。即〈interfacename-"Ethernetrip-address="59.64.139.69"/>與下述定義〈interfacename="Ethemetrip-address="59.64.139.69"—attrLogic="nameAip-address,,/>等同。在一nsLogic引出的邏輯表達式中,命名空間使用邏輯表達式所在文檔的命名空間前綴定義標記,例如文檔中某處層定義xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0",可以在需要多重命名空間過濾的節(jié)點處定義屬性一nsLogic^,ifIImt",屬性值包含"if,表示命名空間urn:bupt:pris:priser:agent:module:interface:1.0;mt^R表了另一個命名空間;^口果節(jié)點未曾定義屬性一nsLogic,那么按照NETCONF協(xié)議規(guī)定,過濾時將數(shù)據(jù)模型節(jié)點的命名空間與相應過濾器節(jié)點本身的命名空間匹配。如例27,例28所示,過濾數(shù)據(jù)模型中屬性name的值為Ethernetl或者ip-address值為59.64.139.69的〈interface〉節(jié)點。例27屬性或邏輯關系組合查詢〈filtertype="advancedSubtree,,><netconfxmlns="*"><routing><interfacename="Ethernetl"ip-address="59.64.139.69"—attrLogic="name||ip-address,,/></routing></netconf></filter>例28例27的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethemetl"ip-address="59.64.139.65"><../></if:interface><if:interfacename="Ethemet2"ip-address="59.64.139.69,,>32</if:interface></routing></netconf>從實例27中可以看到,由于Y吏用了兩個屬性表達式,并用—attrLogic屬性指出了兩個屬性表達式之間是"或"關系,因此,兩個〈nterface〉節(jié)點分別只滿足了兩個屬性表達式中的一個,這兩個〈nterface〉節(jié)點也都被輸出。如果修改過濾條件,查詢name屬性值不是"Ethemetl"并且ip-address屬性值是"59.64.139.69"的〈nterface〉節(jié)點,這個查詢的表達方式如下<interfacename="Ethernetl"ip-address="59.64.139.69"_attrLogic="!nameAip-address,,/>還可使用括號表達屬性過濾條件的邏輯關系,如選取屬性name和ip-address全部滿足或者全部不滿足給定值的節(jié)點〈interfacename="Ethernetrip-address=,,59.64.139.69"—attrLogic="(nameAip-address)||(!nameA!ip-address),7>例29、例30是一個節(jié)點的多重命名空間邏輯或關系查詢的過濾器和過濾結果例29節(jié)點多重命名空間查詢<filtertype="advancedSubtree,,〉<netconfxmlns=''*"><routing><interfac6xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"_nsLogic="ifl|mt,,/><routing/><netconf/></filter>例30例29的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:l.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64.139.65"><.../></if:interface>〈if:interfacename="Ethemet2"ip-address="59.64.139.69"><.../></if:interface></routing></netconf>上述實例29中,命令報文構造了一個過濾器〈filter、希望從數(shù)據(jù)模型中過濾出與過濾器指定的節(jié)點路徑相匹S己,屬于命名空間xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"或者命名玄間xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"的〈interface〉節(jié),泉。從實例30的返回的過濾結果可知,在數(shù)據(jù)模型中存在兩個^nterface〉節(jié)點,這兩個節(jié)點都屬于命名空間xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0",滿足過濾器指定的節(jié)點路徑,不存在屬于命名空間xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"的〈interface〉節(jié)點。4.命名空間查詢命名空間查詢可以獲取數(shù)據(jù)模型中命名空間的定義情況,并給出命名空間的列表。命名空間查詢的關4建字為標簽元素<—xmlns>,當過濾器〈filter〉的子節(jié)點為〈一xmlns、則表示對該數(shù)據(jù)模型進行命名空間相關查詢;同時定義了屬性相關關鍵字prf,該屬性位于過濾返回結果的元素<—xmlns〉中,表示該命名空間在此文檔中對應的前綴,如果該命名空間是默認命名空間(即無前綴),則不輸出prf屬性。例如例31,例32分別顯示了查詢數(shù)據(jù)模型中所有命名空間的過濾器定義和過濾結果。例31查詢所有命名空間<filtertype="advancedSubtree,,><_xmlns/></filter>例32例31的過濾結果<data><_xmlns〉urn:ietf:params:xml:ns:netconf:base:1.0</_xmlns><_xmlnsprf=,,if,>urn:bupt:pris:priser:agent:module:interface:1.0</_xmlns><_xmlnsprf=,,mt">urn:bupt:pris:priser:agent:module:module:1.0</—xmlns></data>上述實例31通過關鍵字元素〈一xmlns〉告知過濾器,查詢數(shù)據(jù)模型中存在的所有命名空間。過濾結果則以<_xmlns>urn:ietf:params:xml:ns:netconf:base:1()</—xmlns〉的形式將數(shù)據(jù)才莫型中所有的命名空間返回。另外,還可以查詢部分數(shù)據(jù)模型的命名空間,如例33所示例33查詢部分元素的命名空間<filtertype="advancedSubtree,,><_xmlns><netconf><routing/></netconf></_xmlns></filter>過濾結果如下<—xmlnsprf=,,if,>urn:bupt:pris:priser:agent:module:interface:1.0</—xmlns>上述實例中,過濾器〈filter〉通過設置子節(jié)點〈一xmlns〉告知過濾器查詢數(shù)據(jù)模型的命名空間,同時通過設置節(jié)點〈netconfXrouting/x/netconf^告知過濾器具體查詢的是子樹/netconf/routing的命名空間,所以過濾結果中只返回了數(shù)據(jù)才莫型中〈netconf^和〈routing〉節(jié)點的命名空間"urn:bupt:pris:priser:agent:module:interface:1.0"。5.后代輸出控制當過濾器給出一個元素類型節(jié)點,過濾結果將包括該節(jié)點的所有匹配后代;某些時候,這將返回大量無用的數(shù)據(jù)。為了提高過濾的效率及方便用戶獲取所需信息,可以在過濾器中相應節(jié)點處設置屬性—show表明是否顯示節(jié)點后代。該屬性的取值為self或descendant該屬性默i人為顯示所有在同一命名空間的后^f戈,即—show="descendant";當設置一sho『"self,,則過濾結果只輸出該節(jié)點的信息,不輸出其后代節(jié)點。屬性一show只能位于包含節(jié)點中。對于內容匹配節(jié)點一類的葉子節(jié)點來說,輸出其本身或輸出后代并無區(qū)別。例如例34、例35、例36、例37分別顯示了如何過濾出指定節(jié)點的完整信息和部分信息。例34輸出節(jié)點完整信息的過濾器<filtertype="advancedSubtree,,—nodepath="relative"><interface—show=,,descendant"/></filter>例35例34的過濾結果<neteonfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if-"urn:bupt:pris:priser:agent:module:interface:1.0"〉<routing><if:interfacename="Ethemetl"ip-address-"59.64.139.65"><../></if:interface><if:interfacename="Ethernet2"ip-address-"59.64.139.69"><"/></if:interface></routing></netconf>例36只輸出節(jié)點本身信息<flltertype-"advancedSubtree,,一nodepath="relative">〈interface—show=,,self,/></filter>例37例36的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"〉<routing>〈if:interfacename-"Ethemetl"ip-address-"59.64.139.65"/〉〈if:interfacename="Ethernet2"ip-address="59.64.139.69"/></routing></netconf>對比上述實例37的過濾結果,可以明顯看到當在過濾器-filter〉中的節(jié)點〈nterface〉中設置屬性—show^,self,時,則只會輸出節(jié)點本身的信息,可以避免返回過多的冗余信息,提高過濾效率。376.個數(shù)查詢個數(shù)查詢功能可以統(tǒng)計數(shù)據(jù)模型中某一類元素的個數(shù),即同一過濾器節(jié)點對應的元素個數(shù)。通過在過濾器中某元素節(jié)點中使用一count屬性實現(xiàn),該屬性的取值有兩個true或false。當設置jount屬性值為,,true"時,則過濾結果輸出查詢實體的個數(shù);當設置一count屬性為"false"時,則過濾結果不輸出查詢實體的個數(shù),"false"是屬性—count的默認值。如果過濾結果返回查詢實體的個數(shù),則在過濾結果中相應實體元素節(jié)點下面添加標簽元素<—countNum>,該元素的文本值標識查詢實體的個凄t。例如例38、例39顯示了如何查詢〈monitor〉節(jié)點的子節(jié)點〈configuration〉的個數(shù),過濾器和過濾結果如下例38查詢指定節(jié)點的個數(shù)<filtertype="advancedSubtree,,>〈netconfxmlns-,,818,,〉<monitorxmlns=,,urn:bupt:pris:priser:agent:module:monitor:l.O">Configuration—count="true"/></monitor></netconf></filter>例39例38的過濾結果<netconf><monitorxmlns="urn:bupt:pris:priser:agent:module:monitor:l.0,,><configuration><—countNum>3</—conutNum></configuration></monitor></netcon£>上述實例38的過濾器〈filter〉設置為在數(shù)據(jù)模型中查詢出指定路徑的節(jié)點〈configuration〉的個數(shù)。實例39的過濾結果顯示,數(shù)據(jù)模型中的〈monitor〉節(jié)點的子節(jié)點〈configuration〉的個數(shù)是3。個數(shù)查詢也可以滿足諸如查詢屬性name值為Ethernetl或者節(jié)點值為running-state的節(jié)點個數(shù)這樣帶有限制條件的節(jié)點個數(shù)統(tǒng)計〈interfacename=,,Ethernet1"_count="true"><configuration—count="true,,>running-state</running>7.范圍條件用于選擇具有某些特定數(shù)值或者日期范圍的節(jié)點。由于標簽內不能使用"<,,或">,,之類的符號,如果在文本內容中添加"<"或">",將會和標簽的開始符和結束符混淆,形成非法的xml文檔。所以,在表示數(shù)量或時間的選擇節(jié)點中添加表示屬性范圍或時間范圍的屬性,以此將該選擇節(jié)點看作是表示時間或數(shù)量范圍的內容匹配節(jié)點,從而在過濾處理時作為過濾條件。其中表示數(shù)量范圍的屬性關聯(lián)關鍵字有一morethan,表示該屬性所在的選擇節(jié)點的值大于該屬性的值;—lessthan,表示該屬性所在的選擇節(jié)點的值小于該屬性的值;—notmorethan,表示該屬性所在的選擇節(jié)點的值不大于該屬性的值;一notlessthan,表示該屬性所在的選擇節(jié)點的值大于該屬性的值;注意使用屬性的過濾器節(jié)點所對應的數(shù)據(jù)模型節(jié)點必須可轉化為數(shù)值類型,比如"14"、"23.6,,等,否則會認為是不匹配的節(jié)點。同時,定義了范圍屬性條件但沒有文本內容的過濾器節(jié)點同樣是內容匹配節(jié)點。表示時間范圍的屬性關聯(lián)關鍵字有—timebefore:表示該屬性所在的選擇節(jié)點的時間值超前于該屬性的值;—timeafter:表示該屬性所在的選擇節(jié)點的時間值滯后于該屬性的值;—timenotbefore:表示該屬性所在的選擇節(jié)點的時間值等于或滯后于該屬性的值;一timenotafter:表示該屬性所在的選擇節(jié)點的時間值等于或超前于該屬性的值。注意使用屬性的過濾器節(jié)點所對應的數(shù)據(jù)模型節(jié)點必須可轉化為時間類型,即規(guī)范滿足2007-07-0105:24:06的格式,以滿足網(wǎng)絡管理中對時間的存儲讀取需求。例如欲查詢〈received〉的值大于12且小于25的〈interface〉節(jié)點,過濾器表達如例40所示,其中〈received—morethan="12"—lessthan-"25"/〉表達了這一范圍條件。例41顯示該查詢的結果。例40lt值范圍過濾的過濾器〈filtertype="advancedSubtree,,><netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if'um:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interface>〈received—morethan=,,12,,_lessthan="25,V</if:interface></routing></n6tconf></filter>例41例40的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethernetl"ip-address="59.64.139.65"><if:received>19</if:received><.../></if:interface>'</routing>40</netconf>下面是根據(jù)時間范圍條件查詢的例子〈startTime一timenotafte產,,2007-07-0105:24:06"一timeafte產"2007-06-3005:24:06"/〉表示查詢表示時間晚于但不包括2007年06月30日05:24:06,并早于且包括2007年07月01日05:24:06的〈startTime〉節(jié)點?;蛘咛砑幼址ヅ涔δ?lt;startTime_timeafter="2005-06-3005:24:06,,>*-07-*</startTime>符合-07-格式的只有月份的表達,上述定義可以查詢2005年06月30曰05:24:06以后每年7月的相關數(shù)據(jù)。8.子樹排序合并對同一個過濾器節(jié)點得到的過濾結果按照需要進行排序,如根據(jù)某個節(jié)點內容進行升序或者降序排列,合并查詢結果中內容完全相同的節(jié)點。排序通過在要排序子樹根節(jié)點處設定屬性一ascOrder和一descOrder實現(xiàn)。屬性—ascOrder表示根據(jù)某節(jié)點或屬性做升序排列,屬性—descOrder表示根據(jù)某節(jié)點或屬性做P爭序排列。這兩個屬性的取值為排序依據(jù)的節(jié)點名或屬性名。排序所依據(jù)的節(jié)點應當有值,并且是該屬性所在節(jié)點的子節(jié)點。以屬性進行排序時需要在屬性名前加"@",標識這是一個屬性名。節(jié)點值為排序依據(jù)的索引,默認按文本方式排序;如果按數(shù)值大小排序,在節(jié)點或屬性名后加標識"(n)",比如—ascOrder="recived(n)";如果該節(jié)點或屬性的值為非數(shù)值類型,則向用戶返回錯誤信息。當需要以多個節(jié)點、屬性進行排序時,多個節(jié)點名、屬性名間以"",連接,排在前面的節(jié)點、屬性名字優(yōu)先級高于后面的節(jié)點、屬性名字。例如,希望4姿〈name〉節(jié)點的值以降序的順序l命出〈interface〉節(jié)點,具有相同〈name〉值的〈interface〉節(jié)點再按ip屬性排序。這樣的查詢入例42所示、其中—descOrder="nameA⑥ip"表達了這個排序要求。例43顯示了排序的結果。例42按指定節(jié)點值降序輸出元素,,><netconfxmlns="um:ietf:params:xml:ns:netconf:base:1.0"><routing><interfacsxmlns-"urn:bupt:pris:priser:agent:module:interface:1.0"—descOrder=,,nameA@ip,V></routing></netconf></filter>例43:例42的過濾結果如下所示〈netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"><routing><if:interfacename="Ethernet2"ip-address="59.64.139.69"><if:name>Ethernet2</if:name></if:interface><if:interfacename="Ethernetl"ip誦address-"59.64.139.65"><if:name>Ethernet1</if:name></if:interface></routing〉</netconf>由于對同一個過濾器節(jié)點可能得到許多相同結構、相同內容的子樹,所以可以在排序子樹根節(jié)點處設定屬性一merge來實現(xiàn)相同子樹的合并。該屬性的取值為true或false。當一merge—'true",則表示對過濾結果進行相同子樹合并后再返回;當一merge-"false",表示對過濾結果不進行子樹合并,屬性一merge的默認值是"false"。假設數(shù)據(jù)模型中〈nterface〉節(jié)點不具有任何屬性,那么將對于下述報文例44未使用合并的過濾器<filtertype="advancedSubtree,,><netconfxmlns="um:ietf:params:xml:ns:netconf:base:1.0">〈routing〉<int6rfacsxmlns="urn:bupt:pris:priser:agent:module:interface:1.0"_show=,,self,/></routing></netconf></filter>例45未使用合并的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="um:bupt:pris:priser:agent:module:monitor:1.0"><routing><if:interface/><if:interface/></routing></netconf>此時用戶實際上只想知道數(shù)據(jù)模型中是否interface節(jié)點的存在而不關心其4也。i口果4吏用—merge屬'I"生,〈interface〉節(jié)點4務支為〈interfacexmlns="urn:bupt:pris:priser:agent:module:interface:1.0"—show="self,_merge=,,true,,/>,過濾結果變?yōu)槔?6合并后的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"><routing><if:interface/></routing></netconf>多個相同的〈nterface〉節(jié)點(或者說子樹)中壓縮只輸出一個,這在數(shù)據(jù)模型中具有大量同名節(jié)點的情況下,可能會避免大量冗余信息在管理網(wǎng)絡中傳輸?shù)谋撞?。綜上,本發(fā)明擴展功能的定義規(guī)范總結如表l所示表1子樹過濾功能定義實現(xiàn)功能實現(xiàn)方法標識符取值用法/含義子樹過濾擴展為〈filter〉節(jié)點的type屬性擴展新取值typeadvancedSubtree表明采用本發(fā)明增強的子樹過濾模式模糊匹配定義通配符,通配符可匹配元素名、元素值、屬寸生名、屬性值、名字空間中的任意文字—匹配〗壬意的節(jié)點和屬性名承匹配名字空間、節(jié)點值和屬性值中的任意文字路徑匹配為〈filter〉節(jié)點擴展新屬性nodepat5absolute對于節(jié)點的路徑嚴格按絕對路徑匹配。屬性默認值relative對于節(jié)點的路徑不4姿絕對路徑匹配44<table>tableseeoriginaldocumentpage45</column></row><table><table>tableseeoriginaldocumentpage46</column></row><table>帶有"<>"表示該關鍵字以元素的形式存在;不帶有"<>,,而只帶有"—"表示該關鍵字以屬性的形式存在;兩者皆不帶有表示該關鍵字以屬性值或節(jié)點值形式存在。除此之外,本發(fā)明對NETCONF協(xié)議子樹過濾機制中的以下處理情形進行了修正l.舍棄不匹配節(jié)點的祖先如果有下例過濾請求例47不匹配節(jié)點的查詢<filtertype="subtree"><netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"〉<routing>〈interfacename="Ethernet"xmlns="um:bupt:pris:priser:agent:module:interface:1.07><routing/><netconf/></filter>而數(shù)據(jù)模型中沒有一個屬性name值為Ethernet的interface節(jié)點。那么在NETCONF協(xié)議子樹過濾機制中,NETCONF協(xié)議中得到的過濾結果如下例48NETCONF協(xié)議中對不匹配節(jié)點的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:l.0"><routing/></netconf>由于數(shù)據(jù)模型中,不存在匹配的interface節(jié)點,故而不輸出interface節(jié)點,但返回其祖先routing和netconf.。對于用戶來說,過濾結果含義表達并不明確,也帶來了無用的冗余信息。本發(fā)明中,當所有需要匹配的節(jié)點沒有匹配數(shù)據(jù)模型節(jié)點,因而全部被舍棄時,這些節(jié)點的父節(jié)點也不返回。因而例47的過濾會返回空的過濾結果<data></data>例49擴展功能中不匹配節(jié)點的過濾結果2.命名空間過濾由于NETCONF協(xié)議中的子樹過濾機制將具有相同父節(jié)點的節(jié)點(即兄弟節(jié)點集合)集中在一起進行處理,從根節(jié)點到葉子節(jié)點。因此一旦匹配失敗,會將不匹配節(jié)點和其所有子節(jié)點全部刪除。例如在NETCONF協(xié)議中下述過濾請求例50:NETCONF協(xié)議中命名空間過濾47<filtertype="subtree"><netconfxmlns="urn:bupt:pris:priser:agent:module:interface:1.07></filter>處理才艮節(jié)點netconf時,節(jié)點的名字匹配,l旦命名空間不匹配,于是丟棄netconf節(jié)點,從而得到空過濾結果例51:NETCONF協(xié)議中命名空間過濾結果<data></data>而本發(fā)明實施例中,當出現(xiàn)節(jié)點的命名空間不匹配時,仍然繼續(xù)處理其子節(jié)點,因為可能存在其后代與給定的命名空間匹配。同時由于要保證過濾結果的層次關系仍然有效,故也可能保留命名空間不匹配的元素作為其他節(jié)點的路徑。用戶可以從過濾結果中很清楚的分辨出這些帶有其他命名空間的元素。例50在子樹過濾功能擴展中得到的過濾結果如下<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:ifurn:bupt:pris:priser:agent:module:interface:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:l.0"><routing>〈if:interfacename="Ethernetl"ip-address="59.64.139.65"></if:interface>〈if:interfacename="Ethernet2"ip-address=,,59.64.139.69"></if:interface></routing></netconf>例52擴展功能中命名空間過濾結果實現(xiàn)這種機制后,可以很容易的查找文檔內或某節(jié)點下所有屬于某命名空間的元素。例A口查詢命名空間um:bupt:pris:priser:agent:module:interface:l.O中的元素,直接將該命名空間作為過濾器中根節(jié)點的命名空間,雖然在數(shù)據(jù)模型中該命名空間與根節(jié)點的命名空間不同。本發(fā)明實施例提供一套基于并對NETCONF協(xié)i義中子樹過濾機制加以擴展的,實現(xiàn)對XML語言定義的網(wǎng)絡管理信息模型的數(shù)據(jù)查詢和數(shù)據(jù)過濾功能的處理系統(tǒng)。處理系統(tǒng)詳細說明了系統(tǒng)實施的總體結構和結構中每個模塊的具體功能。本發(fā)明擴展后的NETCONF子樹過濾系統(tǒng)主要體系架構如圖2所示。該系統(tǒng)包括過濾控制模塊、報文設置模塊、名字空間處理模塊、相對路徑訪問模塊、遞歸流程控制模塊、節(jié)點功能處理模塊和結果處理才莫塊。各模塊的主要功能如下1.過濾控制模塊過濾控制模塊是整個子樹過濾部分的核心,為整個子樹過濾過程提供控制機制,同時可以根據(jù)報文中的參數(shù)執(zhí)行協(xié)議子樹過濾和XPath過濾操作。該模塊解析rpc報文中過濾相關部分,并且根據(jù)報文的具體內容按順序調用其他模塊完成相應功能,相應模塊功能處理完畢后需向其匯報處理結果并由過濾控制模塊決定如何進行下一步的操作。在獲取初始過濾結果后,如果報文中有對過濾結果進行處理的要求,此模塊即調用結果處理模塊對初始過濾結果進行處理,獲得最終過濾結果并返回。2.報文設置模塊即rpc報文,rpc報文中包含過濾控制模塊所需的過濾信息,過濾控制模塊首先判斷rpc報文的正確性,如果正確則根據(jù)報文的信息設置具體的參數(shù),包括過濾類型(子樹過濾、擴展子樹過濾、Xpath)和在擴展子樹過濾中是否需要相對路徑匹配。并將結果返回給過濾控制模塊。3.名字空間處理模塊名字空間處理模塊用于處理與名字空間查詢相關的操作請求,例如查詢配置文檔中所有節(jié)點的名字空間、查詢某個子樹中所有節(jié)點的名字空間等,在實現(xiàn)中需要遞歸流程模塊和結果處理模塊的支持。4.相對路徑訪問模塊相對路徑訪問模塊用于當rpc消息中給出的是節(jié)點的相對路徑時,對配置文檔進行過濾。因此避免了在協(xié)議中的條件下必須給出節(jié)點完整路徑的限制,可以在不給出節(jié)點完整路徑的情況下進行過濾。主要功能是為遞歸流程模塊找到合適的配置文檔節(jié)點作為參數(shù)。5.遞歸流程控制模塊將配置文檔由頂層到底層劃分,一次處理過濾器中一群兄弟節(jié)點,將其分為容器節(jié)點、選擇節(jié)點、內容匹配節(jié)點進行相關處理;每當添加節(jié)點到過濾結果時,對其進行節(jié)點功能處理。6.節(jié)點功能處理模塊節(jié)點功能處理模塊包括模糊匹配模塊、節(jié)點數(shù)量查詢模塊、數(shù)值范圍查詢模塊、時間范圍查詢模塊和邏輯關系組合模塊,用于在進行過濾時對過濾器文檔中的節(jié)點和凝:據(jù)模型中的節(jié)點的判斷比較,并給出判斷結杲。7.結果處理才莫塊結果處理模塊是對過濾結果進行操作,具體包括報文封裝模塊、節(jié)點排序模塊和節(jié)點合并模塊。當過濾器為名字空間過濾時,結果處理模塊需要對過濾結果進行封裝,將所有的名字空間封裝成xml的格式返回。當過濾器報文中要求對過濾結果進行排序時,結果處理部分根據(jù)排序的關鍵字對初始結果進行處理,獲得排序后的結果并提交給過濾控制模塊。節(jié)點合并用于對初始過濾結果中相同子樹的合并。本發(fā)明實施例提供一套基于并對NETCONF協(xié)議中子樹過濾機制加以擴展的,實現(xiàn)對XML語言定義的網(wǎng)絡管理信息模型的數(shù)據(jù)查詢和數(shù)據(jù)過濾功能的處理方法。該處理方法包括擴展后的NETCONF子樹過濾實施的總體流程和具體模塊的詳細流程圖。50圖3為本發(fā)明實施例的總體流程圖,主要包括報文檢錯、根據(jù)關鍵字設置運行參數(shù)、之后將給出的過濾器對Agent本地保留的數(shù)據(jù)模型進行過濾,遇到節(jié)點調用節(jié)點處理模塊,待所有節(jié)點處理完畢后,對過濾結果做進一步處理,具體包括以下步驟步驟3010,開始;步驟3020,解析rpc才艮文;步驟3030,判斷rpc報文設置是否正確,如果正確則轉步驟3050,如果不正確則轉步驟3040;步驟3040,報錯;步驟3050,判斷關鍵字,以確定是命名空間過濾,還是跨層次訪問;如果是命名空間過濾,則轉步驟3060,如果是3爭層次訪問,則轉步驟3070;步驟3060,調用命名空間過濾,轉步驟3080;步驟3070,調用3爭層次過濾,轉步驟3080;步驟3080,調用遞歸流程控制;步驟3090,調用節(jié)點功能處理;步驟3100,根據(jù)關鍵字,對過濾結果進行處理;步驟3110,結束。l.過濾控制過濾控制模塊是整個子樹過濾流程的管理者,它調用其他組件完成工作,并接收其他組件工作的結果來決定下一步的工作內容。其主要流程為如圖4所示,包括以下步驟步驟4010,調用圖2中的報文設置模塊;步驟4020,判斷是否采用擴展子樹過濾,如果是則轉步驟4030,如果否,則判斷查詢對象類型是否為不同配置數(shù)據(jù)存儲中的配置數(shù)據(jù),如果是則采用Xpath過濾,如果否,則判斷查詢對象類型是否為當前正在運行的配置和狀態(tài)數(shù)據(jù),如果是,則采用協(xié)議子樹過濾;步驟403Q,根據(jù)rpc報文判斷報文的正確性,如果正確則轉步驟4060,否則轉步驟4100;步驟4060,進行名字空間查詢,如果查到,則轉步驟4070,否則,轉步驟4072;步驟4070,調用名字空間處理模塊;步驟4072,根據(jù)關鍵字判斷是否采用跨層次過濾,如果是,則轉步驟4075,否則轉步驟4080;步驟4075,調用跨層次過濾模塊,轉步驟4080;步驟4080,調用遞歸流程控制模塊,開始進行子樹過濾,轉步驟4090;步驟4090,對過濾結果進行相關處理,轉步驟4100;步驟4100,將操作結果封裝報文返回給相關操作。2.名字空間處理當filter的根節(jié)點為<_乂1111113>時,過濾控制調用名字空間處理組件,聲明其報文僅是名字空間的過濾條件。返回結果只包含名字空間的信息。實現(xiàn)方法如圖5所示,包括以下步驟步驟5001,獲取才艮文定義中<_乂111^18>元素的子節(jié)點;步驟5010,判斷是否<—xmins〉無子節(jié)點,如果是,則轉步驟5020,否則轉步驟5030;步驟5020,將配置文檔整體作為過濾初始結果,轉步驟5040;步驟5030,執(zhí)行子樹過濾遞歸;步驟5040,獲得節(jié)點的命名空間插入集合;步驟5050,判斷是否所有節(jié)點獲取完畢,如果是,則轉步驟5060,否則轉步驟5030。步驟5060,封裝獲取內容返回給過濾控制模塊。3.遞歸流程控制遞歸流程控制與協(xié)議中實現(xiàn)方法基本類似,流程圖如圖6所示,包括以下步驟步驟6001,解析報文設置該節(jié)點的操作參數(shù);步驟6010,節(jié)點判斷本身信息是否匹配,如果匹配,則轉步驟6020,如果不匹配,則轉步驟6015;其中,節(jié)點本身的信息包括節(jié)點類型、節(jié)點名字、節(jié)點屬性、節(jié)點名字空間等,節(jié)點屬性和節(jié)點名字空間可能有多種邏輯關系;步驟6015,該節(jié)點判斷是否有相對路徑,如果有則轉步驟6017;步驟6017,尋找相對路徑上的節(jié)點,轉步驟6090;步驟6020,該節(jié)點判斷與內容匹配節(jié)點是否匹配,如果是,則轉步驟6030,否則,轉步驟6100;其中,內容匹配節(jié)點包括具有文本值的節(jié)點和具有數(shù)據(jù)范圍等其他條件的節(jié)點,同樣可能會存在多種邏輯關系,并可能存在擴展查詢子句;步驟6030,創(chuàng)建符合要求的當前節(jié)點副本,進入步驟6040;步驟6040,在過濾結果中添加內容匹配節(jié)點,進入步驟6050;步驟6050,處理選擇節(jié)點,選擇節(jié)點包括過濾器中不含子節(jié)點的節(jié)點及子節(jié)點為內置關鍵字如<—count〉等。如果選擇節(jié)點設定為不顯示其子孫,則只復制本身;如果設定為不顯示祖先,則將選擇節(jié)點復制到結果根節(jié)點下;進入步驟6060步驟6060,獲取容器節(jié)點列表;步驟6070,判斷容器節(jié)點和選擇節(jié)點是否都為空,如果是,則轉步驟6080,否則,轉步驟6090;步驟6080,將其它節(jié)點復制到當前節(jié)點副本下,轉步驟6100;步驟6090,遞歸調用處理容器節(jié)點,轉步驟6100;步驟6100,退出當前流程,返回上一級遞歸;返回結果包括符合過濾條件的當前節(jié)點及其子孫,同時也包括由于保留其他節(jié)點而必須保留的部分不符合過濾條件的節(jié)點,不包括對用戶來說沒有意義的節(jié)點。4.節(jié)點功能處理節(jié)點功能處理模塊接受遞歸流程控制的調用,實現(xiàn)針對單個節(jié)點的處理功能。該節(jié)點功能處理模塊從過濾器定義中某一個節(jié)點出發(fā),保留配置文檔中符合該節(jié)點代表的過濾條件的節(jié)點,并根據(jù)其表述的要求對保留的配置文檔節(jié)點做一些處理。53該節(jié)點功能處理模塊的功能包括節(jié)點的匹配、選擇文本內容為特定數(shù)值的節(jié)點、選擇文本內容為特定時間的節(jié)點、子節(jié)點個數(shù)查詢、屬性及命名空間或與非邏輯的運算,查找與當前節(jié)點相似但是路徑不完全的配置文檔節(jié)點。該節(jié)點功能處理模塊接受遞歸控制部分傳遞的參數(shù),進行相應的處理,并且將處理結果返回給遞歸控制模塊。主要實現(xiàn)方法如下(1)模糊匹配判斷配置文檔和過濾器文檔中兩個節(jié)點的屬性是否;f莫糊匹配。首先將文本節(jié)點的內容進行適當預處理,然后根據(jù)正則表達式進行判斷是否匹配。(2)選擇文本內容為特定數(shù)值范圍的節(jié)點首先判斷文本內容是否可以轉換成數(shù)值類型,若是則繼續(xù)判斷數(shù)值是否在指定的數(shù)值范圍內,數(shù)值范圍的判斷包括4個部分大于、小于、不大于和不小于。(3)選擇文本內容為特定時間范圍的節(jié)點首先判斷文本內容是否可以轉換成表示時間的數(shù)據(jù),若是則繼續(xù)判斷數(shù)據(jù)是否在指定的時間范圍內,時間范圍的判斷包括4個部分早于、晚于、不早于和不晚于指定的時間。(4)子節(jié)點個數(shù)查詢設置節(jié)點計數(shù)器,當尋找到匹配節(jié)點時,計數(shù)器加l;將節(jié)點劃歸到過濾結果文檔時只復制節(jié)點本身及其個數(shù)。(5)查找與當前節(jié)點相似但是路徑不完全的配置文檔節(jié)點根據(jù)節(jié)點部分特性在當前節(jié)點后代中查找節(jié)點,并與當前節(jié)點進行匹配,供相對路徑功能模塊使用。(6)屬性、命名空間邏輯關系首先確定過濾器中給出的各命名空間、屬性,配置文檔節(jié)點是否符合。以true或false表示。然后計算布爾類型表達式的值。5.結果處理才莫塊實現(xiàn)以下功能報文封裝報文封裝主要是將過濾結果根據(jù)過濾控制中設置的參數(shù)封裝為適當?shù)膱笪母袷桨l(fā)回給過濾控制;節(jié)點合并合并具有相同結構的過濾結果;節(jié)點排序對過濾結果根據(jù)給定節(jié)點的值進行排序,并將排序后的結果返回。結果處理的基本流程如圖7所示,包括以下步驟步驟7010,判斷過濾器是否為空,如果是,則轉步驟7020;步驟7020,拷貝整個配置文檔;步驟7030,判斷是否進行命名空間查詢,如果是,則轉步驟7040;步驟7040,4企索命名空間和前綴;步驟7050,進行節(jié)點排序或進行節(jié)點合并;步驟7060,封裝報文返回。本發(fā)明實施例一,假設Agent端管理的數(shù)據(jù)模型如下例53數(shù)據(jù)模型所示<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethternetrip="59.64.139.65"><if:name>Ethernet1</if:name><if:mac-address>0006GG93KAG8</if:mac-address><if:ipv4><if:address-v4>59.64.139.65</if:address-v4><if:flagsup="true"/><if:received>19</if:received></if:ipv4></if:interface>〈if:interfacename="Ethtemet2"ip="59.64.139.69">55<if:name>Ethernet2</if:name><if:mac-address>000E35A83K4K</if:mac-address><if:ipv4><if:address-v4>59.64.139.69</if:address-v4><if:flagsup="false"/><if:received>49</if:received></if:ipv4></if:interface></routing><mt:monitor><mt:configuration>running-state</mt:configuration〉<mt:configuration>startup-config</mt:configuration><mt:configuration>running-config</mt:configuration><if:configuration>http:〃pris.bupt.cn/example/</if:configuration)</mt:monitor></netconf>現(xiàn)對其進行查詢,過濾器定義如下例54實施例過濾器定義<filtertype=,,advancedSubtree,,_nodepath=,,relative,,><if:interfacename="Ethternetl"ip="59.64.139.65"—attrLogic="(nameAip)II(!匪eA!ip)"xmlns:if^"承int6rfacc承'Y><——count=true/></if:interface><mt:monitorxmlns:mt="*monitor:1.0">Configuration—nsLogic="ifIImt"—order="asc"/></mt:monitor></filter>當get/get-config操作發(fā)現(xiàn)操作報文中含有filter節(jié)點,將之交給圖2中過濾控制模塊,該模塊調用圖2中參數(shù)設置功能模塊,由filter的屬性type」,advancedSubtree"得知需要進行子樹過濾擴展功能操作,并解析到需要相對路徑匹配,將參數(shù)一nodepath送給流程控制開始擴展子樹過濾操作。如圖4中步驟4020所示。過濾器的定義主要流程如下操作開始前進行報文檢查,沒有發(fā)現(xiàn)語法錯誤。沒有找到〈一xmlns〉元素,認為非命名空間查詢后。將filter第一個子節(jié)點interface與數(shù)據(jù)模型根節(jié)點netconf匹配。由于名字不同,匹配失敗。由于是非絕對路徑,因此在netconf節(jié)點的后代中尋找到與interface匹配的節(jié)點<if:interfacename="Ethternetrip="59.64.139.65"\>與<if:interfacename="Ethternet2"ip="59.64.139.69"\>。查找匹配節(jié)點時,涉及到屬性的邏輯關系組合過濾條件。name="Ethtemetrip="59.64.139.65"_attrLogic="(nameAip)||(!nameA!ip)"表示,過濾結果中interface節(jié)點要么name和ip均滿足給定條件,要么均不滿足。匹配中,對于數(shù)據(jù)模型節(jié)點〈if:interfacename="Ethternetl"ip="59.64.139.65">,name屬性條件滿足,ip屬性條件也滿足。則—attrLogic引出的表達式的匹配結果為(trueAtrue)||(falseAfalse)=true,即該數(shù)據(jù)模型節(jié)點滿足屬性的邏輯關系過濾條件。類似的,routing下另一個interface節(jié)點同樣滿足。查找匹配節(jié)點時,涉及到命名空間的模糊匹配。urn:bupt:pris:priser:agent:module:interface:1.0含有interface字符串,能夠匹酉己。由于〈if:interfacename="Ethtemetrip-"59.64.139.65"〉節(jié)點和過濾器中的interface節(jié)點匹配,則處理該節(jié)點的子節(jié)點,這些子節(jié)點是兄弟節(jié)點,同時進行處理。過濾器interface節(jié)點下只有<_>節(jié)點,且沒有屬性限制條件,匹配任何命名空間包含interface字符串的元素節(jié)點。故而name、mac-address、ipv4節(jié)點均符合過濾條件。<一>節(jié)點帶有—count屬性值為true,統(tǒng)計與<_>節(jié)點匹配的數(shù)據(jù)模型節(jié)點個數(shù)為3。從而實現(xiàn)統(tǒng)計interface子節(jié)點個數(shù)的功能。則過濾器子樹〈if:interfacename="Ethternetl"ip="59.64.139.65"—attrLogic="(nameAip)II(!nameA!ip)"xmlns:if="*interface*7><—count=true/></if:interface>得到的過濾結果為<if:interfacename="Ethternetl"ip="59.64.139.65"〉<—countNum>3<—countNum></if:interface><if:interfacename="Ethtemet2"ip="59.64.139.69"><—eountNum〉3<—countNum></if:interface>將匹配節(jié)點和其祖先復制到過濾結果中。處理過濾器中interface的兄弟節(jié)點monitor。數(shù)據(jù)模型中monitor的命名空間urn:bupt:pris:priser:agent:module:interface:l.O包含monitor:1.0字符串在末尾。無其他匹配條件,mt:monitor節(jié)點匹配。處理過濾器monitor節(jié)點的子節(jié)點configuration凄史據(jù)才莫型中configuration元素的命名空間有兩種urn:bupt:pris:priser:agent:module:monitor:l.O、urn:bupt:pris:priser:agent:module:interface:1.0,要么匹酉己mt4<表6勺*monitor:1.0,要么符合if代表的interface*,數(shù)據(jù)模型中四個同父configuration節(jié)點均匹配。則過濾器子樹<mt:monitorxmlns:mt="*monitor:1.0">Configuration_nsLogic="if||mt"—order="asc7>得到的過濾結果為<mt:monitor><mt:configuration>running-state</mt:configuration><mt:configuration>startup-config</mt:configuration><mt:configuration>running-config</mt:configuration><if:configuration>http:〃pris.bupt.cn/example/</if:configuration)</mt:monitor>將匹配節(jié)點和其祖先復制到過濾結果中。過濾器中節(jié)點匹配完畢,得到初始過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:mt="um:bupt:pris:priser:agent:module:monitor:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="Ethternetrip="59.64.139.65"><_countNum>3<_countNum></if:interface>〈if:interfacename="Ethtemet2"ip="59.64.139.69"><_countNum>3<—countNum></if:interface></routing><mt:monitor><mt:configuration>running-state</mt:configuration><mt:configuration>startup-config</mt:configuration><mt:configuration>running-config</mt:configuration><if:configuration>http:〃pris.bupt.cn/example/</if:configuration></mt:monitor〉</netconf>對過濾器中configuration節(jié)點得到的過濾結果進行排序。文本內容不為59S,按升序排列。則monitor子樹變?yōu)?lt;mt:monitor><if:configuration>http:〃pris.bupt.cn/example/</if:configuration)<mt:configuration>running-config</mt:configuration><mt:configuration>running-state</mt:configuration><mt:configuration>startup-config</mt:configuration></mt:monitor>將排序后的過濾結果交給控制模塊,返回給上級操作。最終得到的過濾結果為例55:例54的過濾結果<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"xmlns:if="um:bupt:pris:priser:agent:module:interface:1.0"><routing><if:interfacename="EthtemeU"ip="59.64.139.65"><_countNum〉3<—countNum></if:interface><if:interfacename="Ethtemet2"ip="59.64.139.69"><_countNum>3<—countNum></if:interface></routing><mt:monitor><if:configuration>http:〃pris.bupt.cn/example/</if:configuration><mt:configuration>running-config</mt:configuration><mt:configuration>running-state</mt:configuration><mt:configuration>startup-config</mt:configuration></mt:monitor></netconf>60現(xiàn)對如例53中定義的數(shù)據(jù)模型進行查詢,過濾器定義如下例56實施例過濾器定義〈filtertype=,,advancedSubtree,,_nodepath="relative"><—xmlns><int6rfac6><received_morethan=,,12"—lessthan=,,25,,—matchType=,,may,,/><received_morethan=,,42"_lessthan="55"—matchType=,,may,,/></interface></_xmlns></filter>過濾器定義的主要方法如下過濾控制模塊解析設置過濾類型"advancedSubtree"和相關參數(shù)—nodepath=,,relative"。經過報文語法檢查后,進行擴展子樹過濾操作。檢查到filter有唯一根節(jié)點—xmlns,下面進行命名空間查詢,如圖5所示。得到命名空間查詢所用子樹<interfac6>〈received_morethan=,,12,,—lessthan=,,25,,—matchType=,,may,V>〈received—morethan="42,,—lessthan=,,55,,—matchType=,,may"/></interface>以此進行如圖6中的正常擴展子樹過濾,但是取消命名空間匹配機制。將filter第一個子節(jié)點interface與數(shù)據(jù)模型根節(jié)點netconf匹配。由于名字不同,匹配失敗。由于是非絕對路徑,因此在netconf節(jié)點的后代中尋找到與interface匹配的節(jié)點〈if:interfacename="Ethternetrip="59.64.139.65"/>與<if:interfacename="Ethternet2"ip="59.64.139.69"/>。對于〈if:interfacename="Ethternetrip-"59.64.139.65"/〉繼續(xù)匹配下一層兄弟節(jié)點〈receivedmorethan=,,12"lessthan=,,25,7>和<if:name/>、<if:mac-address/>、<if:ipv4>。均不匹配由于是非絕對路徑,因此在interface節(jié)點的后代中尋找到與received匹配的節(jié)點<if:received>19</if:received>。匹配涉及到數(shù)量范圍條件和節(jié)點邏輯關系,對于數(shù)據(jù)模型節(jié)點<if:received>19</if:received>和過濾器內容匹酉己節(jié)點〈received—morethan="12"—lessthan="25"—matchType="may"/>,—morethan、—lessthan給出的范圍條件均符合。由于節(jié)點匹配方式是may,則即使其祖先節(jié)點<if:interfacename="Ethternetrip^'59.64.139.65"/〉的后4、received節(jié)點的值僅滿足過濾器中兩個received節(jié)點條件之一,但該interface節(jié)點仍然是匹配的。數(shù)據(jù)模型節(jié)點〈if:interfacename="Ethternet2"ip-"59.64.139.697〉具有后代節(jié)點received,其值大于42、小于55,和過濾器節(jié)點interface也是匹配的。將匹配節(jié)點及其祖先復制到初始過濾結果中<netconfxmlns="urn:ietf:params:xml:ns:netconf:base:l.0"xmlns:mt="urn:bupt:pris:priser:agent:module:monitor:1.0"xmlns:if="urn:bupt:pris:priser:agent:module:interface:1()">〈routing〉〈if:interfacename="Ethtemetl"ip="59.64.139.65"><if:ipv4><if:received>19</if:received></if:ipv4></if:interface><if:interfacename="Ethtemet2"ip="59.64.139.69"><if:ipv4><if:received>49</if:received></if:ipv4></if:interface></routing></netconfi>在結果處理模塊中檢索初始過濾結果各元素的命名空間,得到隱式命名空間um:ietf:params:xml:ns:netconf:base:1.0及帶有前纟聶為if的命名空間urn:bupt:pris:priser:agent:module:interface:l.O,去于裝為最后的過濾結果為例57:例56的過濾結果<data〉<_xmlns>urn:ietf:params:xml:ns:netconf:base:1.0</_xmlns><_xmlnsprf=,,if,>urn:bupt:pris:priser:agent:module:interface:1.0</—xmlns></data>本發(fā)明實施例二為一種基于子樹過濾的模糊查詢方法,如圖8所示,包括步驟s801,接收待過濾數(shù)據(jù)流;步驟s802,通過不完全匹配的方式過濾數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。所述字符串包括節(jié)點名字、節(jié)點內容、屬性名字、屬性值或命名空間;所述不完全匹配的方式包括路徑不完整;元素名不完整、元素值不完整、屬性名不完整、屬性值不完整、命名空間不完整。上述通過不完全匹配的方式過濾數(shù)據(jù)流,具體為通過絕對路徑過濾數(shù)據(jù)流;或通過相對路徑過濾數(shù)據(jù)流。通過絕對路徑過濾數(shù)據(jù)流具體為用戶給出的過濾器包含被選擇節(jié)點的必須給出從根節(jié)點開始的所有祖先,過濾結果中只包含在過濾器中的祖先和在數(shù)據(jù)模型中的祖先完全一致的節(jié)點及節(jié)點后代;通過相對路徑過濾的數(shù)據(jù)流具體為在過濾器中滿足父子關系的節(jié)點在過濾結果中至少滿足祖先后^f、關系;在過濾器中為根節(jié)點的節(jié)點在過濾結果中至少包括非根節(jié)點。當出現(xiàn)節(jié)點的命名空間不匹配時,繼續(xù)處理前述節(jié)點的子節(jié)點,保留命名空間不匹配的元素作為其后代節(jié)點的路徑。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。本發(fā)明實施例三為一種子樹過濾條件的邏輯組合的擴展方法,如圖9所示,包才舌步驟s901,接收待過濾數(shù)據(jù)流;步驟s902,采用多個屬性或多個內容匹配節(jié)點對該數(shù)據(jù)流中的元素類型節(jié)點進行過濾。步驟s902中多個內容匹配節(jié)點對數(shù)據(jù)流中的元素類型節(jié)點進行過濾,具體為使用內容匹配節(jié)點作為從數(shù)據(jù)模型中選擇特定的父節(jié)點的過濾條件;通過在所述內容匹配節(jié)點中添加第一屬性表示所述節(jié)點的匹配程度,匹配程度包括必須匹配、可選匹配和不匹配;根據(jù)所述內容匹配節(jié)點和所述匹配程度對所述數(shù)據(jù)流中的節(jié)點進行過濾。根據(jù)所述內容匹配節(jié)點和所述匹配程度對所述數(shù)據(jù)流中的節(jié)點進行過濾,具體為過濾器中所有匹配程度是必須匹配的內容匹配節(jié)點都與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點才可以;f皮添加到過濾結果中;過濾器中可選匹配程度是可選匹配的內容匹配節(jié)點中至少有一個節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點才可以被添加到過濾結果中;過濾器中匹配程度不匹配的內容匹配節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點不^皮添加到過濾結果中。通過向節(jié)點中添加第二屬性,實現(xiàn)該節(jié)點的多個屬性間的邏輯關系,該第二屬性為—attrLogic屬性。上述多個內容匹配節(jié)點對數(shù)據(jù)流中的元素類型節(jié)點進行過濾的過程中還包括進行命名空間查詢,進行命名空間查詢具體為獲取數(shù)據(jù)模型中命名空間的定義情況,并給出命名空間的列表,其中,命名空間查詢的關鍵字用一個元素表示。上述多個內容匹配節(jié)點對數(shù)據(jù)流中的元素類型節(jié)點進行過濾的步驟中,過濾條件中還包括范圍條件,該范圍條件用于選擇具有某些特定數(shù)值或者曰期范圍的節(jié)點,在表示數(shù)量或時間的選擇節(jié)點中添加表示屬性范圍或時間范圍的屬性,將該選擇節(jié)點看作是表示時間或數(shù)量范圍的內容匹配節(jié)點,在過濾處理時作為過濾條件。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。本發(fā)明實施例四為一種子樹過濾查詢結果的處理方法,如圖10所示,包括步驟sl001,在過濾器中相應節(jié)點處設置第三屬性的值,表明該節(jié)點處是否顯示節(jié)點后代,該第三屬性為一show屬性;步驟sl002,該第三屬性的取值為第一值或者第二值,第一值為self值,第二值為descendant值,當該第三屬性默認為顯示所有在同一命名空間的后代,則第三屬性=第二值;當設置第三屬性=第一值,則過濾結果只輸出該節(jié)點的信息,不輸出在同一命名空間的后代節(jié)點。該處理方法還包括通過在過濾器中某元素節(jié)點中使用第四屬性實現(xiàn)個數(shù)查詢,統(tǒng)計數(shù)據(jù)模型中某一類元素的個數(shù),通過在過濾器中某元素節(jié)點中使用第四屬性實現(xiàn)個數(shù)查詢,統(tǒng)計同一過濾器節(jié)點對應的元素個數(shù)。該第四屬性為一count屬性。該第四屬性的取值有兩個第一值或第二值,該第一值為true,第二值為false,當設置第四屬性值為第一值時,則過濾結果輸出查詢實體的個數(shù);當設置第四屬性為第二值時,則過濾結果不輸出查詢實體的個數(shù)。該處理方法還包4舌對同一個過濾器節(jié)點得到的過濾結果按照需要進行排序,合并查詢結果中內容完全相同的節(jié)點。該處理方法還包4舌當所有需要匹配的節(jié)點沒有匹配數(shù)據(jù)模型節(jié)點,全部被舍棄時,不返回上述節(jié)點的父節(jié)點。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不^R供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。本發(fā)明實施例五為一種過濾器,如圖11所示,包括接收模塊1110,用于接收待過濾數(shù)據(jù)流;過濾模塊1120,用于通過不完全匹配的方式過濾該數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。過濾模塊1120包括第一過濾子^f莫塊1121,用于通過絕對路徑過濾該數(shù)據(jù)流;和/或,第二過濾子模塊1122,用于通過相對路徑過濾所述數(shù)據(jù)流。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。本發(fā)明實施例六為一種邏輯過濾裝置,如圖12所示,包括接收模塊1210,用于接收待過濾數(shù)據(jù)流;邏輯過濾模塊1220,用于采用多個屬性或多個內容匹配節(jié)點對該數(shù)據(jù)流中的元素類型節(jié)點進行過濾。邏輯過濾模塊1220包括設置子模塊1221,用于設置內容匹配節(jié)點作為從數(shù)據(jù)模型中選擇特定的父節(jié)點的過濾條件;添加子模塊1222,用于通過在該內容匹配節(jié)點中添加第一屬性表示該節(jié)點的匹配程度,并實現(xiàn)該節(jié)點過濾條件之間的邏輯關系組合;處理子模塊1223,用于根據(jù)該過濾條件之間的邏輯關系組合對該數(shù)據(jù)流中的元素類型節(jié)點進^f亍過濾。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要時,丟棄無用的后代節(jié)點,大大減少了子樹過濾結果可能存在的大量冗余信息。本發(fā)明實施例七為一種子樹過濾查詢結果處理裝置,如圖13所示,包括設置模塊1310,用于在過濾器中相應節(jié)點處設置第三屬性的值,該第三屬性為—show屬性;確定模塊1320,用于根據(jù)設置模塊1310設置第三屬性的值,表明所述節(jié)點處是否顯示節(jié)點后代。該處理裝置還包括排序模塊1330,用于對同一個過濾器節(jié)點得到的過濾結果按照需要進行排序,節(jié)點合并模塊1340,用于合并查詢結果中內容完全相同的節(jié)點。綜上,可以看到本發(fā)明可以實現(xiàn)以下NETCONF協(xié)議中子樹過濾機制無法實現(xiàn)或實現(xiàn)效果不好或處理方法有缺陷的功能,如表2所示表2擴展子樹過濾機制實現(xiàn)附加功能<table>tableseeoriginaldocumentpage68</column></row><table><table>tableseeoriginaldocumentpage69</column></row><table>由表中可以看到:本發(fā)明實施例提供一種基于NETCONF子樹過濾機制,以XML形式表達的,對XML網(wǎng)絡管理數(shù)據(jù)進行查詢和過濾的方法,使對NETCONF協(xié)議中管理信息的獲取更為方便,也避免了為數(shù)據(jù)查詢和過濾重新定義一套規(guī)范帶來的諸多問題。本發(fā)明實施例提供了一種對XML數(shù)據(jù)過濾條件的細化和組合機制。XML文檔中的節(jié)點有時包含了具體的數(shù)據(jù)信息,類似于關系數(shù)據(jù)庫中一個字段;有時候只是封裝數(shù)據(jù)信息的手段,類似于關系數(shù)據(jù)庫中的一條記錄。本發(fā)明中細化了節(jié)點的匹配程度,用戶可以根據(jù)節(jié)點在數(shù)據(jù)存儲中的具體作用選擇相應的查詢方法。另外,屬性、命名空間方式表達的過濾條件可以以邏輯運算方式組合到一起,使查詢更為靈活。本發(fā)明實施例提供一種在過濾條件不完整的情況下,比如不能完整拼寫出數(shù)據(jù)存儲的節(jié)點或屬性名字,或者不能完全給出數(shù)據(jù)在XML文檔中定義的位置,仍可以對XML數(shù)據(jù)進行子樹過濾操作,并得到用戶想要的結果。本發(fā)明實施例增加子樹過濾中命名空間的查詢功能,幫助用戶快速的了解XML文檔中數(shù)據(jù)分布的結構;彌補了NETCONF協(xié)議子樹過濾中必須給出命名空間條件,但又不提供完整手段實現(xiàn)命名空間查詢的缺陷。本發(fā)明實施例處理對某些數(shù)據(jù)的特殊查詢需求,比如時間、日期、數(shù)量等的范圍查詢、數(shù)據(jù)的數(shù)量查詢等等。使子樹過濾更能滿足實際網(wǎng)絡管理或其他實際應用中的需求。本發(fā)明實施例實現(xiàn)對過濾結果的優(yōu)化,實現(xiàn)對相同或類似數(shù)據(jù)的合并或排序;在需要的時候,丟棄無用的后代節(jié)點。大大減少了子樹過濾結果可能存在的大量冗余信息。通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到本發(fā)明可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)基于這樣的理解,本發(fā)明的技術方案可以以軟件產品的形式體現(xiàn)出來,該軟件產品可以存儲在一個非易失性存儲介質(可以是CD-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本
技術領域:
的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若千改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。權利要求1、一種基于子樹過濾的模糊查詢方法,其特征在于,包括接收待過濾數(shù)據(jù)流;通過不完全匹配的方式過濾所述數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。2、如權利要求l所述的方法,其特征在于,所述字符串包括節(jié)點名字、節(jié)點內容、屬性名字、屬性值或命名空間;3、如權利要求1所述的方法,其特征在于,所述不完全匹配的方式包括路徑不完整;元素名不完整、元素值不完整、屬性名不完整、屬性值不完整、命名空間不完整。4、如權利要求l所述的方法,其特征在于,所述通過不完全匹配的方式過濾所述數(shù)據(jù)流為通過絕對路徑過濾所述數(shù)據(jù)流;或通過相對路徑過濾所述數(shù)據(jù)流。5、如權利要求4所述的方法,其特征在于,所述通過絕對路徑過濾所述數(shù)據(jù)流具體為用戶給出的過濾器包含被選擇節(jié)點的從根節(jié)點開始的所有祖先,過濾結果中只包含在過濾器中的祖先和在數(shù)據(jù)模型中的祖先完全一致的節(jié)點及節(jié)點后代。6、如權利要求4所述的方法,其特征在于,所述通過相對路徑過濾所述數(shù)據(jù)流具體為在過濾器中滿足父子關系的節(jié)點在過濾結果中至少滿足祖先后代關系;在過濾器中為根節(jié)點的節(jié)點在過濾結果中至少包括非根節(jié)點。7、如權利要求4所述的方法,其特征在于,當出現(xiàn)節(jié)點的命名空間不匹配時,繼續(xù)處理所述節(jié)點的子節(jié)點,保留命名空間不匹配的元素作為其后代節(jié)點的路徑。8、一種子樹過濾條件的邏輯組合的擴展方法,其特征在于,包括接收4寺過濾數(shù)據(jù)流;采用多個屬性或多個內容匹配節(jié)點對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾。9、如權利要求8所述的方法,其特征在于,所述多個內容匹配節(jié)點對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾,具體為使用內容匹配節(jié)點作為從數(shù)據(jù)模型中選擇特定的父節(jié)點的過濾條件;通過在所述內容匹配節(jié)點中添加第一屬性表示所述節(jié)點的匹配程度,匹配程度包括必須匹配、可選匹配和不匹配;根據(jù)所述內容匹配節(jié)點和所述匹配程度對所述數(shù)據(jù)流中的節(jié)點進行過濾。10、如權利要求9所述的方法,其特征在于,根據(jù)所述內容匹配節(jié)點和所述匹配程度對所述數(shù)據(jù)流中的節(jié)點進行過濾,具體為過濾器中所有匹配程度是必須匹配的內容匹配節(jié)點都與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點才可以被添加到過濾結果中;過濾器中可選匹配程度是可選匹配的內容匹配節(jié)點中至少有一個節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點才可以被添加到過濾結果中;過濾器中匹配程度不匹配的內容匹配節(jié)點與數(shù)據(jù)模型中相應的節(jié)點完全匹配時,其父節(jié)點不被添加到過濾結果中。11、如權利要求9所述的方法,其特征在于,還包括向節(jié)點中添加第二屬性,以實現(xiàn)所述節(jié)點的多個屬性間的邏輯關系。12、如權利要求9所述的方法,其特征在于,還包括進行命名空間查詢獲取數(shù)據(jù)模型中命名空間的定義情況,并給出命名空間的列表,其中,命名空間查詢的關鍵字用一個元素表示。13、如權利要求9所述的方法,其特征在于,過濾條件中還包括范圍條件所述范圍條件用于選擇具有某些特定數(shù)值或者日期范圍的節(jié)點,在表示數(shù)量或時間的選擇節(jié)點中添加表示屬性范圍或時間范圍的屬性,將該選擇節(jié)點看作是表示時間或數(shù)量范圍的內容匹配節(jié)點,在過濾處理時作為過濾條件。14、一種子樹過濾查詢結果的處理方法,其特征在于,包括在過濾器中相應節(jié)點處設置第三屬性的值,表明所述節(jié)點處是否顯示節(jié)點后代;所述第三屬性的取值為第一值或者第二值,當所述第三屬性默認為顯示所有在同一命名空間的后代,則第三屬性=第二值;當設置第三屬性=第一值,則過濾結果只輸出該節(jié)點的信息,不輸出所述在同一命名空間的后代節(jié)點。15、如權利要求14所述的方法,其特征在于,還包括通過在過濾器中某元素節(jié)點中使用第四屬性實現(xiàn)個數(shù)查詢,統(tǒng)計數(shù)據(jù)模型中某一類元素的個it。16、如權利要求14所述的方法,其特征在于,還包括通過在過濾器中某元素節(jié)點中使用第四屬性實現(xiàn)個數(shù)查詢,統(tǒng)計同一過濾器節(jié)點對應的元素個數(shù)。17、如權利要求15所述的方法,其特征在于,所述第四屬性的取值有兩個第一值或第二值,當設置第四屬性值為第一值時,則過濾結果輸出查詢實體的個數(shù);當設置第四屬性為第二值時,則過濾結果不輸出查詢實體的個數(shù)。18、如權利要求14所述的方法,其特征在于,還包括對同一個過濾器節(jié)點得到的過濾結果按照需要進行排序,合并查詢結果中內容完全相同的節(jié)點。19、如權利要求14所述的方法,其特征在于,還包括當所有需要匹配的節(jié)點沒有匹配數(shù)據(jù)模型節(jié)點,全部被舍棄時,不返回所述節(jié)點的父節(jié)點。20、一種過濾器,其特征在于,包括接收模塊,用于接收待過濾數(shù)據(jù)流;過濾模塊,用于通過不完全匹配的方式過濾所述數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。21、如權利要求20所述過濾器,其特征在于,所述過濾模塊包括第一過濾子模塊,用于通過絕對路徑過濾所述數(shù)據(jù)流;或者,第二過濾子模塊,用于通過相對路徑過濾所述數(shù)據(jù)流。22、一種邏輯過濾裝置,其特征在于,包括接收模塊,用于接收待過濾數(shù)據(jù)流;邏輯過濾模塊,用于采用多個屬性或多個內容匹配節(jié)點對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾。23、如權利要求22所述的裝置,其特征在于,所述邏輯過濾模塊包括設置子模塊,用于設置內容匹配節(jié)點作為從數(shù)據(jù)模型中選擇特定的父節(jié)點的過濾條件;添加子模塊,用于通過在所述內容匹配節(jié)點中添加第一屬性表示所述節(jié)點的匹配程度,并實現(xiàn)所述節(jié)點過濾條件之間的邏輯關系組合;處理子;f莫塊,用于^^艮據(jù)所述過濾條件之間的邏輯關系組合對所述數(shù)據(jù)流中的元素類型節(jié)點進行過濾。24、一種子樹過濾查詢結果處理裝置,其特征在于,包括設置模塊,用于在過濾器中相應節(jié)點處設置第三屬性的值;確定模塊,用于根據(jù)所述設置模塊設置所述第三屬性的值,表明所述節(jié)點處是否顯示節(jié)點后代。25、如權利要求24所述的裝置,其特征在于,還包括排序模塊,用于對同一個過濾器節(jié)點得到的過濾結果按照需要進行排序,節(jié)點合并模塊,用于合并查詢結果中內容完全相同的節(jié)點。全文摘要本發(fā)明實施例公開了一種模糊查詢、查詢結果處理和過濾條件處理的方法及設備,其中基于子樹過濾的模糊查詢方法包括接收待過濾數(shù)據(jù)流;通過不完全匹配的方式過濾所述數(shù)據(jù)流,處理用戶沒有給出完全信息的字符串形式的過濾條件。本發(fā)明實施例解決NETCONF協(xié)議子樹過濾機制僅局限于精確匹配和絕對路徑,數(shù)據(jù)查詢中要求給出較多已知信息帶來的不便。文檔編號G06F17/30GK101686146SQ20081016696公開日2010年3月31日申請日期2008年9月28日優(yōu)先權日2008年9月28日發(fā)明者彬張,李國輝,金豐鑫申請人:華為技術有限公司