欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

Css選擇子規(guī)則匹配方法

文檔序號(hào):6597123閱讀:254來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):Css選擇子規(guī)則匹配方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)軟件技術(shù),特別涉及一種嵌入式軟件環(huán)境下的互聯(lián)網(wǎng)應(yīng)用技術(shù)。

背景技術(shù)
HTML,即Hyper Text Markup Language,超文本標(biāo)記語(yǔ)言,是Web技術(shù)標(biāo)準(zhǔn)的傳輸數(shù)據(jù)描述格式。HTML包含了傳輸?shù)臄?shù)據(jù)內(nèi)容,并部分包含了傳輸內(nèi)容在Web終端的顯示格式。CSS,即Cascading Style Sheets,層疊樣式表,是一種W3C規(guī)范下,對(duì)HTML內(nèi)容進(jìn)行排版格式定義的規(guī)范,它解決了網(wǎng)頁(yè)界面排版的難題。
HTML的標(biāo)記(Tag)定義網(wǎng)頁(yè)的內(nèi)容,CSS決定這些網(wǎng)頁(yè)內(nèi)容如何顯示(Layout)。CSS主要對(duì)HTML Web頁(yè)面的排版,但是它同樣適用于在Web和其他媒介上表示XML文檔。
HTML規(guī)范由標(biāo)記語(yǔ)法和標(biāo)記內(nèi)容組成。CSS規(guī)范由語(yǔ)法、格式內(nèi)容和匹配規(guī)則組成。語(yǔ)法規(guī)定了內(nèi)容和匹配規(guī)則的表現(xiàn)形式,格式內(nèi)容規(guī)定了各種排版規(guī)則,匹配規(guī)則規(guī)定了對(duì)何種標(biāo)記應(yīng)用哪一條排版規(guī)則。
CSS規(guī)則的作用是用一系列選擇子運(yùn)算式定義一種HTML上下文關(guān)系,使得滿(mǎn)足這種選擇子運(yùn)算式的上下文關(guān)系的HTML標(biāo)記的格式能夠被該CSS規(guī)則所屬的語(yǔ)句中的規(guī)則集所定義。這種將HTML標(biāo)記的上下文關(guān)系與CSS規(guī)則進(jìn)行比對(duì)的過(guò)程稱(chēng)為CSS匹配。
CSS所要處理的文檔,主要是與目標(biāo)HTML相關(guān)的CSS文本。它定義了若干條CSS語(yǔ)句,組成CSS語(yǔ)句集,通過(guò)標(biāo)記內(nèi)嵌、標(biāo)記屬性嵌入和外部獨(dú)立文本文件嵌入三種方式與HTML產(chǎn)生樣式定義關(guān)系。其中標(biāo)記屬性嵌入的CSS定義,只包含一個(gè)CSS語(yǔ)句,且語(yǔ)句僅由樣式規(guī)則集構(gòu)成。
一條CSS語(yǔ)句由選擇子和樣式規(guī)則集構(gòu)成。瀏覽器要準(zhǔn)確的支持遵循CSS規(guī)范的網(wǎng)頁(yè),必須針對(duì)每一個(gè)標(biāo)記內(nèi)容,選擇正確的CSS語(yǔ)句來(lái)應(yīng)用樣式規(guī)則。這個(gè)過(guò)程稱(chēng)為CSS選擇子匹配。針對(duì)CSS規(guī)則語(yǔ)句的匹配、命中是一個(gè)處理復(fù)雜、耗費(fèi)資源的過(guò)程,在嵌入式環(huán)境下,在能夠準(zhǔn)確的匹配CSS規(guī)則的同時(shí),盡可能的減小目標(biāo)軟件對(duì)時(shí)間和空間資源的消耗,是非常重要的問(wèn)題。CSS規(guī)范的匹配規(guī)則是由多個(gè)單一匹配規(guī)則構(gòu)成的一種遞歸規(guī)則定義。
中國(guó)申請(qǐng)?zhí)枮椤?00710203272.1”(
公開(kāi)日為2008年5月21日)的CSS選擇子規(guī)則匹配方法,公開(kāi)了一種在嵌入式環(huán)境下,在一定規(guī)模的CSS定義語(yǔ)句空間中,完成對(duì)HTML標(biāo)記的正確匹配。該方法的核心是根據(jù)CSS規(guī)則的選擇子的首個(gè)具有字符串的關(guān)鍵字建立一個(gè)CSS規(guī)則集的哈希表,用于紀(jì)錄所有CSS規(guī)則的選擇子運(yùn)算式關(guān)系;并建立一個(gè)匹配棧,用于記錄HTML上下文的匹配歷史,然后對(duì)HTML文檔中的標(biāo)記進(jìn)行CSS規(guī)則集的哈希表中快速搜索,然后對(duì)棧中的標(biāo)記進(jìn)行上下文關(guān)系匹配,最后將剩余的中間結(jié)果進(jìn)行上下文關(guān)系的完全檢驗(yàn)。將盡可能多的步驟放在解析部分一次完成,而在其后多次匹配的過(guò)程中,盡可能降低每次匹配的工作量,在盡可能多的支持匹配規(guī)則的基礎(chǔ)上,快速完成每一次對(duì)HTML內(nèi)容的CSS選擇子匹配。采用該正序匹配方法需要較大的中間匹配結(jié)果的存儲(chǔ)空間。


發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是,提供一種在存儲(chǔ)空間與匹配步驟之間取得一個(gè)更好平衡的CSS選擇子規(guī)則匹配方法。
本發(fā)明為解決上述技術(shù)問(wèn)題所采用的技術(shù)手段是,CSS選擇子規(guī)則匹配方法,包括以下步驟 a、建立CSS語(yǔ)句結(jié)構(gòu)集; b、對(duì)所有CSS選擇子結(jié)構(gòu)取最后一個(gè)選擇子的第一個(gè)關(guān)鍵字建立一個(gè)哈希表鍵值,以CSS選擇子結(jié)構(gòu)為內(nèi)容,建立一個(gè)哈希表; c、根據(jù)當(dāng)前HTML標(biāo)記所有可能的關(guān)鍵字,從所述哈希表中檢出可能匹配的CSS選擇子集合作為首次匹配集; d、在所有首次匹配集中,取出一個(gè)CSS語(yǔ)句;若CSS語(yǔ)句為空,則進(jìn)入步驟k;否則,進(jìn)入步驟f; f、從后往前依次取出CSS語(yǔ)句的CSS選擇子,作為當(dāng)前原始選擇子,若返回為空,則進(jìn)入步驟j;否則,進(jìn)入步驟g; g、在HTML棧中取出一個(gè)棧頂HTML標(biāo)記作為當(dāng)前HTML標(biāo)記,若已到棧底則進(jìn)入步驟i;否則,進(jìn)入步驟h; h、對(duì)當(dāng)前原始選擇子和當(dāng)前HTML標(biāo)記進(jìn)行匹配,單選擇子匹配按選擇子規(guī)范要求匹配算法實(shí)現(xiàn);若匹配成功,則返回步驟f;否則,進(jìn)入步驟i; i、本次CSS語(yǔ)句匹配失敗,返回步驟d; j、本次CSS語(yǔ)句匹配成功,保存當(dāng)前CSS語(yǔ)句至結(jié)果集,返回步驟d; k、返回結(jié)果集。
本發(fā)明的有益效果是,能在存儲(chǔ)空間和匹配次數(shù)之間取得一個(gè)平衡,最終在完整地實(shí)現(xiàn)瀏覽器對(duì)CSS匹配規(guī)則的要求的同時(shí),滿(mǎn)足了嵌入式環(huán)境對(duì)CSS規(guī)則匹配算法的嚴(yán)格效率要求。本方法所采用的倒序匹配方法比較正序匹配方法,減少了對(duì)維持中間匹配集的要求,進(jìn)一步提升了匹配時(shí)間和空間效率。算法簡(jiǎn)潔易懂,實(shí)現(xiàn)成本低、穩(wěn)定性好。

具體實(shí)施例方式 本算法的核心部分由CSS解析、CSS匹配預(yù)處理、CSS標(biāo)記棧匹配驗(yàn)證和CSS命中結(jié)果判斷四個(gè)過(guò)程組成。實(shí)現(xiàn)的結(jié)果為一個(gè)實(shí)現(xiàn)特定功能接口規(guī)范的軟件模塊。軟件模塊可由瀏覽器根據(jù)HTML解析過(guò)程擇機(jī)使用,獲得準(zhǔn)確的CSS樣式結(jié)果。
現(xiàn)有技術(shù)中以首字進(jìn)行匹配的首次匹配集結(jié)果較大,而本發(fā)明以尾關(guān)鍵字進(jìn)行單一關(guān)鍵字匹配成功的首次匹配結(jié)果集往往只有1-3個(gè),因此這種匹配方法在實(shí)際應(yīng)用中大大減少了首次匹配成功的首次匹配集。本發(fā)明去掉中間匹配集(使得匹配棧很淺,節(jié)省了較多存儲(chǔ)空間),通過(guò)匹配過(guò)程中去掉冗余,盡可能減少匹配次數(shù)(體現(xiàn)了較大的匹配速度優(yōu)勢(shì)),在存儲(chǔ)空間和匹配次數(shù)之間取得最優(yōu)的平衡。
以C語(yǔ)言為例,說(shuō)明具體實(shí)現(xiàn)方式。本發(fā)明用C語(yǔ)言進(jìn)行實(shí)現(xiàn)的要點(diǎn)是 建立CSS選擇子的C語(yǔ)言的目標(biāo)數(shù)據(jù)結(jié)構(gòu) 要求建立能夠描述CSS選擇子的數(shù)據(jù)結(jié)構(gòu)(CSS選擇子結(jié)構(gòu))和CSS語(yǔ)句的選擇子集的數(shù)據(jù)結(jié)構(gòu)(CSS語(yǔ)句結(jié)構(gòu)集);一個(gè)能支持從關(guān)鍵字到CSS選擇子的Hash(哈希)表結(jié)構(gòu);一個(gè)HTML標(biāo)記棧; 建立一個(gè)CSS選擇子Hash表 對(duì)CSS解析結(jié)果進(jìn)行預(yù)處理根據(jù)CSS語(yǔ)句,對(duì)其每一個(gè)CSS選擇子結(jié)構(gòu),抽取其最后一個(gè)選擇子的第一個(gè)關(guān)鍵字為Hash表鍵值,以CSS選擇子結(jié)構(gòu)為內(nèi)容,建立一個(gè)Hash表項(xiàng),放入可匹配選擇子Hash表中; 建立猜測(cè)命中選擇子提取函數(shù) 該函數(shù)實(shí)現(xiàn)如下邏輯功能 對(duì)當(dāng)前標(biāo)記,選擇所有可能的關(guān)鍵字,從Hash表中選擇所有能符合當(dāng)前HTML標(biāo)記的關(guān)鍵字的記錄集合作為可能匹配當(dāng)前HTML標(biāo)記的選擇子集合; 選擇子、標(biāo)記匹配函數(shù) 該函數(shù)實(shí)現(xiàn)的邏輯功能是以當(dāng)前選擇子的所有關(guān)鍵字,去檢驗(yàn)是否能匹配當(dāng)前的HTML標(biāo)記; 建立匹配函數(shù) 這個(gè)函數(shù)實(shí)現(xiàn)如下邏輯功能 在給定的選擇子、給定HTML棧狀態(tài)情況下(棧頂為目標(biāo)HTML標(biāo)記),對(duì)HTML當(dāng)前棧,從棧頂開(kāi)始,依次取一個(gè)HTML標(biāo)記作為當(dāng)前標(biāo)記;對(duì)當(dāng)前標(biāo)記進(jìn)行選擇子、標(biāo)記匹配驗(yàn)證;若未通過(guò),則匹配結(jié)束;取HTML棧的從頂向下計(jì)的下一個(gè)HTML標(biāo)記作為當(dāng)前標(biāo)記; 重復(fù)上述步驟,直到棧底;判斷當(dāng)前選擇子的驗(yàn)證結(jié)果若當(dāng)前選擇子的所有原始選擇子都已經(jīng)被驗(yàn)證通過(guò),則匹配成功;否則匹配失敗。具體步驟如下 (1)、根據(jù)當(dāng)前HTML標(biāo)記所有可能的關(guān)鍵字,從所述哈希表中檢出可能匹配的CSS選擇子集合作為首次匹配集; (2)、在所有首次匹配集中,取出一個(gè)CSS語(yǔ)句, (3)從后往前依次取出該CSS語(yǔ)句的CSS選擇子,作為當(dāng)前原始選擇子,若返回為空,則進(jìn)入步驟(6);否則,進(jìn)入步驟(4); (4)、在HTML棧中取出一個(gè)棧頂HTML標(biāo)記作為當(dāng)前HTML標(biāo)記,若已到棧底則進(jìn)入步驟(5);否則,進(jìn)入步驟(7); (5)、對(duì)當(dāng)前原始選擇子和當(dāng)前HTML標(biāo)記進(jìn)行匹配,單選擇子匹配按選擇子規(guī)范要求匹配算法實(shí)現(xiàn);若匹配成功,則返回步驟(3);否則,進(jìn)入步驟(6); (6)、本次CSS語(yǔ)句匹配失?。? (7)、本次CSS語(yǔ)句匹配成功,保存當(dāng)前CSS語(yǔ)句至結(jié)果集; 建立核心邏輯函數(shù) 該函數(shù)實(shí)現(xiàn)如下邏輯功能 對(duì)當(dāng)前的HTML標(biāo)記得到可能匹配當(dāng)前HTML標(biāo)記的選擇子集合對(duì)其中每一個(gè)選擇子,對(duì)當(dāng)前HTML標(biāo)記棧,使用要點(diǎn)5(建立匹配函數(shù))中所定義的函數(shù)判斷其是否被匹配成功。
對(duì)所實(shí)現(xiàn)的軟件模塊,還需要針對(duì)目標(biāo)應(yīng)用的接口規(guī)范進(jìn)行接口實(shí)現(xiàn),以使得模塊能夠被目標(biāo)應(yīng)用所使用。
權(quán)利要求
1.CSS選擇子規(guī)則匹配方法,其特征在于,包括以下步驟
a、建立CSS語(yǔ)句結(jié)構(gòu)集;
b、對(duì)所有CSS選擇子結(jié)構(gòu)取最后一個(gè)選擇子的第一個(gè)關(guān)鍵字建立一個(gè)哈希表鍵值,以CSS選擇子結(jié)構(gòu)為內(nèi)容,建立一個(gè)哈希表;
c、根據(jù)當(dāng)前HTML標(biāo)記所有可能的關(guān)鍵字,從所述哈希表中檢出可能匹配的CSS選擇子集合作為首次匹配集;
d、在所有首次匹配集中,取出一個(gè)CSS語(yǔ)句;若CSS語(yǔ)句為空,則進(jìn)入步驟k;否則,進(jìn)入步驟f;
f、從后往前依次取出CSS語(yǔ)句的CSS選擇子,作為當(dāng)前原始選擇子,若返回為空,則進(jìn)入步驟j;否則,進(jìn)入步驟g;
g、在HTML棧中取出一個(gè)棧頂HTML標(biāo)記作為當(dāng)前HTML標(biāo)記,若已到棧底則進(jìn)入步驟i;否則,進(jìn)入步驟h;
h、對(duì)當(dāng)前原始選擇子和當(dāng)前HTML標(biāo)記進(jìn)行匹配,匹配成功,則返回步驟f;否則,進(jìn)入步驟i;
i、本次CSS語(yǔ)句匹配失敗,返回步驟d;
j、本次CSS語(yǔ)句匹配成功,保存當(dāng)前CSS語(yǔ)句至結(jié)果集,返回步驟d;
k、返回結(jié)果集。
全文摘要
本發(fā)明涉及嵌入式軟件環(huán)境下的互聯(lián)網(wǎng)應(yīng)用技術(shù),本發(fā)明提供一種在存儲(chǔ)空間與匹配步驟之間取得一個(gè)更好平衡的CSS選擇子規(guī)則匹配方法。本發(fā)明由命中CSS語(yǔ)句集猜測(cè)Hash表建立、關(guān)鍵字Hash匹配、對(duì)選擇子的HTML棧匹配循環(huán)、命中判斷幾個(gè)步驟組成;對(duì)所有選擇子的最后一個(gè)原始選擇子的第一個(gè)關(guān)鍵字建立Hash表;用HTML標(biāo)記所有的關(guān)鍵字去匹配CSS的原始選擇子的關(guān)鍵字;按照HTML標(biāo)記入棧順序倒序進(jìn)行選擇子匹配驗(yàn)證;以CSS語(yǔ)句的原始選擇子是否被完整匹配驗(yàn)證為命中判斷標(biāo)準(zhǔn)。
文檔編號(hào)G06F17/22GK101344895SQ20081030413
公開(kāi)日2009年1月14日 申請(qǐng)日期2008年8月22日 優(yōu)先權(quán)日2008年8月22日
發(fā)明者濤 胡 申請(qǐng)人:四川長(zhǎng)虹電器股份有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
敖汉旗| 定结县| 应城市| 肥西县| 肃宁县| 红桥区| 康乐县| 城固县| 基隆市| 大洼县| 章丘市| 旬阳县| 武安市| 霍州市| 公主岭市| 滁州市| 海南省| 平原县| 卢湾区| 荥阳市| 常山县| 疏勒县| 瑞安市| 临沧市| 丰城市| 卓尼县| 东山县| 仁怀市| 颍上县| 定安县| 乡城县| 海原县| 当涂县| 安国市| 清河县| 南部县| 桐庐县| 玉屏| 内丘县| 朝阳市| 昌黎县|