久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔
站長百科 | 數(shù)字化技能提升教程 數(shù)字化時(shí)代生存寶典
首頁
數(shù)字化百科
電子書
建站程序
開發(fā)
服務(wù)器
辦公軟件
開發(fā)教程
服務(wù)器教程
軟件使用教程
運(yùn)營教程
熱門電子書
WordPress教程
寶塔面板教程
CSS教程
Shopify教程
導(dǎo)航
程序頻道
推廣頻道
網(wǎng)賺頻道
人物頻道
網(wǎng)站程序
網(wǎng)頁制作
云計(jì)算
服務(wù)器
CMS
論壇
網(wǎng)店
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航
WIKI使用導(dǎo)航
WIKI首頁
最新資訊
網(wǎng)站程序
站長人物
頁面分類
使用幫助
編輯測(cè)試
創(chuàng)建條目
網(wǎng)站地圖
站長百科導(dǎo)航
站長百科
主機(jī)偵探
IDCtalk云說
跨境電商導(dǎo)航
WordPress啦
站長專題
網(wǎng)站推廣
網(wǎng)站程序
網(wǎng)站賺錢
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航專題
云計(jì)算
微博營銷
虛擬主機(jī)管理系統(tǒng)
開放平臺(tái)
WIKI程序與應(yīng)用
美國十大主機(jī)
編輯“
YAML
”
人物百科
|
營銷百科
|
網(wǎng)賺百科
|
站長工具
|
網(wǎng)站程序
|
域名主機(jī)
|
互聯(lián)網(wǎng)公司
|
分類索引
跳轉(zhuǎn)至:
導(dǎo)航
、?
搜索
警告:
您沒有登錄。如果您做出任意編輯,您的IP地址將會(huì)公開可見。如果您
登錄
或
創(chuàng)建
一個(gè)賬戶,您的編輯將歸屬于您的用戶名,且將享受其他好處。
反垃圾檢查。
不要
加入這個(gè)!
[[Image:yaml.gif|right|200px|thumb|YAML [[Logo]]]] '''YAML''',是一個(gè)可讀性高,用來表達(dá)資料序列的編程語言。YAML參考了其他多種語言,包括:[[XML]]、[[C語言]]、[[Python]]、[[Perl]]以及[[電子郵件]]格式。Clark Evans在[[2001年]]在首次發(fā)表了這種語言,另外Ingy d?t Net與Oren Ben-Kiki也是這語言的共同設(shè)計(jì)者。目前已經(jīng)有數(shù)種編程語言或腳本語言支援(或解析)這種語言。YAML是"YAML Ain't a Markup Language"(YAML不是一種置標(biāo)語言)的遞歸縮寫。在開發(fā)的這種語言時(shí),YAML 的意思其實(shí)是:"Yet Another Markup Language"(仍是一種置標(biāo)語言),但為了強(qiáng)調(diào)這種語言以數(shù)據(jù)做為中心,而不是以置標(biāo)語言為重點(diǎn),而用返璞詞重新命名。 == YAML的功能 == YAML的語法和其他高階語言類似,并且可以簡單表達(dá)清單、雜湊表,標(biāo)量等資料形態(tài)。它使用空白符號(hào)縮排和大量依賴外觀的特色,特別適合用來表達(dá)或編輯[[數(shù)據(jù)結(jié)構(gòu)]]、各種設(shè)定檔、傾印除錯(cuò)內(nèi)容、文件大綱(例如:許多電子郵件標(biāo)題格式和YAML非常接近)。盡管它比較適合用來表達(dá)階層式(hierarchical model)的數(shù)據(jù)結(jié)構(gòu),不過也有精致的語法可以表示關(guān)聯(lián)性(relational model)的資料。由于YAML使用空白字符和分行來分隔資料,使的他特別適合用grep/Python/Perl/Ruby操作。其讓人最容易上手的特色是巧妙避開各種封閉符號(hào),如:引號(hào)、各種括號(hào)等,這些符號(hào)在巢狀結(jié)構(gòu)時(shí)會(huì)變得復(fù)雜而難以辨認(rèn)。 == YAML范例 == 數(shù)據(jù)結(jié)構(gòu)可以用類似大綱的縮排方式呈現(xiàn) <pre> --- receipt: Oz-Ware Purchase Invoice date: 2007-08-06 customer: given: Dorothy family: Gale items: - part_no: A4786 descrip: Water Bucket (Filled) price: 1.47 quantity: 4 - part_no: E1628 descrip: High Heeled "Ruby" Slippers price: 100.27 quantity: 1 bill-to: &id001 street: | 123 Tornado Alley Suite 16 city: East Westville state: KS ship-to: *id001 specialDelivery: > Follow the Yellow Brick Road to the Emerald City. Pay no attention to the man behind the curtain. ... </pre> 注意在YAML中,[[字符串]]不一定要用雙引號(hào)標(biāo)示。另外,在縮排中空白字符的數(shù)目并不是非常重要,只要相同階層的元素左側(cè)對(duì)齊就可以了(不過不能使用TAB字符)。這個(gè)文件的的頂層由七個(gè)鍵值組成:其中一個(gè)鍵值"items",是個(gè)兩個(gè)元素構(gòu)成的陣列(或稱清單),這清單中的兩個(gè)元素同時(shí)也是包含了四個(gè)鍵值的雜湊表。文件中重復(fù)的部分用這個(gè)方法處理:使用錨點(diǎn)(&)和參考(*)標(biāo)簽將"bill-to"雜湊表的內(nèi)容復(fù)制到"ship-to"雜湊表。也可以在文件中加入選擇性的空行,以增加可讀性。在一個(gè)檔案中,可同時(shí)包含多個(gè)文件,并用"——"分隔。選擇性的符號(hào)"..."可以用來表示檔案結(jié)尾(在利用串流的通訊中,這非常有用,可以在不關(guān)閉串流的情況下,發(fā)送結(jié)束訊號(hào))。 == YAML語言的構(gòu)成元素 == *'''YAML的基本元件''' YAML提供縮排/區(qū)塊以及內(nèi)置(inline)兩種格式,來表示清單和雜湊表。以下展示幾種YAML的基本原件。 *'''清單(陣列)''' 習(xí)慣上清單比較常用區(qū)塊格式(block format)表示,也就是用短杠+空白字符作為起始。 <pre> --- # 最喜愛的電影 - Casablanca - North by Northwest - Notorious </pre> 另外還有一種內(nèi)置格式(inline format)可以選擇──用方括號(hào)圍住,并用逗號(hào)+空白區(qū)隔(類似[[JSON]]的語法) </pre> --- # 購物清單 [milk, pumpkin pie, eggs, juice] </pre> *'''雜湊表''' 鍵值和資料由冒號(hào)及空白字符分開。 <pre> --- # 區(qū)塊形式 name: John Smith age: 33 --- # 內(nèi)置形式 {name: John Smith, age: 33} </pre> *'''區(qū)塊的字符''' 再次強(qiáng)調(diào),字串不需要包在引號(hào)之內(nèi)。保存新行(Newlines preserved) <pre> --- | #譯者注:這是一首著名的五行民謠(limerick) There once was a man from Darjeeling #這里曾有一個(gè)人來自大吉嶺 Who got on a bus bound for Ealing #他搭上一班往伊靈的公車 It said on the door #門上這麼說的 "Please don't spit on the floor" #"請(qǐng)勿在地上吐痰" So he carefully spat on the ceiling #所以他小心翼翼的吐在天花板上 </pre> 根據(jù)設(shè)定,前方的引領(lǐng)空白符號(hào)(leading white space)必須排成條狀,以便和其他資料或是行為(如范例中的縮排)明顯區(qū)分。 *'''折疊新行(Newlines folded)''' <pre> --- > Wrapped text #摺疊的文字 will be folded #將會(huì)被收 into a single #進(jìn)單一一個(gè) paragraph #段落 Blank lines denote #空白的行代表 paragraph breaks #段落之間的區(qū)隔 </pre> 和保存新行不同的是,換行字元會(huì)被轉(zhuǎn)換成空白字符。而引領(lǐng)空白字符則會(huì)被自動(dòng)消去。 *'''階層化的元素''' 雜湊表中使用清單 <pre> - {name: John Smith, age: 33} - name: Mary Smith age: 27 </pre> 清單中使用雜湊表 <pre> men: [John Smith, Bill Jones] women: - Mary Smith - Susan Williams </pre> *'''YAML的進(jìn)階元件''' 這部分算是一個(gè)后續(xù)的討論,在比較各種數(shù)資料列語言時(shí),YAML最常被提到的特色有兩個(gè):關(guān)系樹和資料形態(tài)。 樹狀結(jié)溝之間的交互參照 資料合并和參考 為了維持文件的簡潔,并避免資料輸入的錯(cuò)誤,YAML提供了結(jié)點(diǎn)參考(*)和雜湊合并(<<)參考到其他結(jié)點(diǎn)標(biāo)簽的錨點(diǎn)標(biāo)記(&)。參考會(huì)將樹狀結(jié)構(gòu)加入錨點(diǎn)標(biāo)記的內(nèi)容,并可以在所有數(shù)據(jù)結(jié)構(gòu)中運(yùn)作(可以參考上面"ship-to"的范例)合并只有雜湊表可以使用,可以將鍵值自錨點(diǎn)標(biāo)記復(fù)制到指定的雜湊表中。 當(dāng)資料被instantiate合并和參考會(huì)被剖析器自動(dòng)展開。 <pre> #眼部雷射手術(shù)之標(biāo)準(zhǔn)程序 --- - step: &id001 #定義錨點(diǎn)標(biāo)籤 &id001 instrument: Lasik 2000 pulseEnergy: 5.4 pulseDuration: 12 repetition: 1000 spotSize: 1mm - step: <<: *id001 # 合併鍵值:使用在錨點(diǎn)標(biāo)籤定義的內(nèi)容 spotSize: 2mm # 覆寫"spotSize"鍵值 - step: <<: *id001 # 合併鍵值:使用在錨點(diǎn)標(biāo)籤定義的內(nèi)容 pulseEnergy: 500.0 # 覆寫鍵值 alert: > # 加入其他鍵值 warn patient of audible pop </pre> *'''資料形態(tài)''' 由于自動(dòng)判定資料形態(tài)的功能,嚴(yán)格型態(tài)(也就是使用者有宣告的資料形態(tài))很難在大部分的YAML文件中看到。資料型態(tài)可以被區(qū)分成三大類:原碼([[core]]),定義(defined),使用者定義(user-defined)。原碼可以自動(dòng)被解析器分析(例如:浮點(diǎn)數(shù),整數(shù),字串,清單,映射,...)。有一些進(jìn)階的資料形態(tài)──例如位元資料──在YAML中有被“定義”,但不是每一種解析器都有支援。最后,YAML支援使用者自定的區(qū)域變量,包括:自訂的類別,結(jié)構(gòu)或基本型態(tài)(例如:四倍精度的浮點(diǎn)數(shù))。 *'''強(qiáng)迫轉(zhuǎn)型''' YAML的自動(dòng)判定資料形態(tài)是哪一種實(shí)體。但有時(shí)使用者會(huì)想要將資料強(qiáng)迫轉(zhuǎn)型成自定的某種型態(tài)。最常見的狀況是字串,有時(shí)候可能看起來像數(shù)字或布林值,這種時(shí)候可以使用雙引號(hào),或是使用嚴(yán)格型態(tài)標(biāo)簽。 <pre> --- a: 123 # 整數(shù) b: "123" # 字串(使用雙括號(hào)) c: 123.0 # 浮點(diǎn)數(shù) d: !!float 123 # 浮點(diǎn)數(shù),使用!!表達(dá)的嚴(yán)格型態(tài) e: !!str 123 # 字串,使用嚴(yán)格型態(tài) f: !!str Yes # 字串,使用嚴(yán)格型態(tài) g: Yes # 布林值"真" h: Yes we have No bananas # 字串(包含"Yes"和"No") </pre> *'''其他特殊資料形態(tài)''' 除了一般的資料形態(tài)之外,使用者也可以使用一些較為進(jìn)階的型態(tài),但不保證可被每種解析器分析。使用時(shí)和強(qiáng)迫轉(zhuǎn)型類似,要在形態(tài)名稱之前加上兩個(gè)驚嘆號(hào)(!!)。有幾種重要的形態(tài)在本篇沒有討論,包括集合(sets),有序映照(ordered maps),時(shí)間郵戳(timestamps)以及[[十六進(jìn)制]]資料(hexadecimal)。下面這個(gè)范例則是位元資料(binary) <pre> --- picture: !!binary | R0lGODlhDAAMAIQAAP//9/X 17unp5WZmZgAAAOfn515eXv Pz7Y6OjuDg4J+fn5OTk6enp 56enmleECcgggoBADs=mZmE </pre> *'''使用者自行擴(kuò)充的資料形態(tài)''' 許多YAML的實(shí)現(xiàn)允許使用者自訂資料形態(tài)。在將一個(gè)物件序列化時(shí),這個(gè)方法還頗方便的。某些區(qū)域資料形態(tài)可能不存在默認(rèn)的資料形態(tài)中,不過這種型態(tài)在特定的YAML應(yīng)用程式中是有定義的。這種區(qū)域資料形態(tài)用驚嘆號(hào)(!)表示。 <pre> --- myObject: !myClass { name: Joe, age: 15} </pre> == YAML語法 == *在yaml.org(英文)可以找到輕巧而好用的小抄(亦是用YAML表示)及格式說明。下面的內(nèi)容,是關(guān)于基本元件的摘要。 *YAML使用可打印的[[Unicode]]字符,可使用[[UTF-8]]或[[UTF-16]]。 *使用空白字符為文件縮排來表示結(jié)構(gòu);不過不能使用跳格字符(TAB)。 *注解由井字號(hào)( # )開始,可以出現(xiàn)在一行中的任何位置,而且范圍只有一行(也就是一般所謂的單行注解) *每個(gè)清單成員以單行表示,并用短杠+空白( - )起始。或使用方括號(hào)( [ ] ),并用逗號(hào)+空白( , )分開成員。 *每個(gè)雜湊表的成員用冒號(hào)+空白( : )分開鍵值和內(nèi)容?;蚴褂么罄ㄌ?hào)( { } ),并用逗號(hào)+空白( , )分開。 *雜湊表的鍵值可以用問號(hào) ( ? )起始,用來明確的表示多個(gè)詞匯組成的鍵值。 *字串平常并不使用引號(hào),但必要的時(shí)候可以用雙引號(hào) ( " )或單引號(hào) ( ' )框住。 *使用雙引號(hào)表示字串時(shí),可用倒斜線( \ )開始的跳脫字符(這跟C語言類似)表示特殊字符。 *區(qū)塊的字串用縮排和修飾詞(非必要)來和其他資料分隔,有新行保留(preserve)(使用符號(hào) | )或新行折疊(flod)(使用符號(hào) > )兩種方式。 *在單一檔案中,可用連續(xù)三個(gè)連字號(hào)(——)區(qū)分多個(gè)檔案。 *另外,還有選擇性的連續(xù)三個(gè)點(diǎn)號(hào)( ... )用來表示檔案結(jié)尾。 *重復(fù)的內(nèi)容可使從參考標(biāo)記星號(hào) ( * )復(fù)制到錨點(diǎn)標(biāo)記( & )。 *指定格式可以使用兩個(gè)驚嘆號(hào) ( !! ),后面接上名稱。 *檔案中的單一文件可以使用指導(dǎo)指令,使用方法是百分比符號(hào)( % )。有兩個(gè)指導(dǎo)指令在YAML1.1版中被定義: * %YAML 指導(dǎo)指令,用來識(shí)別文件的YAML版本。 *%[[TAG]] 指導(dǎo)指令,被用在URI的字首標(biāo)記。這個(gè)方法在標(biāo)記節(jié)點(diǎn)的型態(tài)時(shí)相當(dāng)有用。 *YAML再使用逗號(hào)及冒號(hào)時(shí),后面都必須接一個(gè)空白字符,所以可以再字串或數(shù)值中自由加入分隔符號(hào)(例如:5,280或<nowiki>http://www.wikipedia.org</nowiki>)而不需要使用引號(hào)。 *另外還有兩個(gè)特殊符號(hào)在YAML中被保留,有可能在未來的版本被使用--( @ )和( ` )。 == 與其他資料序列語言比較 == *'''JSON''' JSON的語法是YAML1.2版的子集[5],,同時(shí)非常接近[6] YAML1.0與1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。這是因?yàn)镴SON的語法結(jié)構(gòu)和YAML的內(nèi)置格式相同。雖然大范圍的分層也可以使用類似JSON的內(nèi)置格式,不過這并YAML標(biāo)準(zhǔn)并不建議這樣使用,除非這樣編寫能讓文件可讀性增加。YAML的許多擴(kuò)展在JSON是找不到的,如:進(jìn)階資料形態(tài)、關(guān)系錨點(diǎn)、字串不需要雙引號(hào)、映射資料形態(tài)會(huì)儲(chǔ)存鍵值的順序。 *'''XML和SDL''' XML和[[SDL]]標(biāo)簽概念,在YAML中是不找不到的。對(duì)于數(shù)據(jù)結(jié)構(gòu)序列(盡管這是有爭議的),標(biāo)簽屬性的特色就是可以將資料及復(fù)雜資料附加資訊分離,并將各種原生數(shù)據(jù)結(jié)構(gòu)(如:雜湊表、陣列)用同一種語言表示。YAML則以資料的可擴(kuò)展性作為替代。(包括為了模擬物件的類別型態(tài))在YAML本身的規(guī)范中,并沒有類似XML的語言定義文件剛要(language-defined document schema descriptors)──例如驗(yàn)證自己本身的結(jié)構(gòu)是否正確的文件。不過,YAML綱要描述語言(YAML schema descriptor language)是存在的。另外還有YAXML──用XML描述YAML的結(jié)構(gòu)──可以讓XML Schema與XSLT轉(zhuǎn)換程式應(yīng)用在YAML之上。況且,在一般使用的情況下,YAML豐富的定義型態(tài)之語法已經(jīng)提供了足夠的方式,來辨認(rèn)YAML文件是否正確。 *'''縮排劃界''' 由于YAML的運(yùn)作主要依賴大綱式的縮排來決定結(jié)構(gòu),這有效解決了界定符沖突(Delimiter collision)的問題。YAML的資料形態(tài)不依賴引號(hào)之特點(diǎn),使的YAML文件可以利用區(qū)塊,輕易的插入各種其他類型文件,如:XML、SDL、JSON,甚至插入另一篇YAML。 <pre> --- example: > HTML goes into YAML without modification message: | <font name='times' size=10> <p><i>"Three is always greater than two, even for large values of two"</i> </p><p> --Author Unknown </p></font> date: 2007-06-01 </pre> 相反的,要將YAML置入XML或SDL中時(shí),需要將所有空白字符和位勢(shì)符號(hào)(potential sigils,如:<,>和&)轉(zhuǎn)換成實(shí)體語法;要將YAML置入JSON中,需要用引號(hào)框住,并轉(zhuǎn)換內(nèi)部的所有引號(hào)。 *'''非階層式的資料模型''' 跟SDL、JSON等,每個(gè)子結(jié)點(diǎn)只能有單一一個(gè)父節(jié)點(diǎn)的階層是模型不同,YAML提供了一個(gè)簡單的關(guān)系體制,可以從樹狀結(jié)構(gòu)的其他地方,重復(fù)相同的資料,而不必顯示那些冗余的結(jié)構(gòu)。這點(diǎn)和XML中的IDRef類似YAML剖析器在將YAML轉(zhuǎn)換成物件時(shí),會(huì)自動(dòng)將那些參考資料的結(jié)構(gòu)展開,所以程式在使用時(shí)并不會(huì)查覺到哪些資料是解碼自這種結(jié)構(gòu)。XML則不會(huì)將這種結(jié)構(gòu)展開。這種表示法可以增加程式的可讀性,并且,在那種‘大部分參數(shù)維持和上次相同,只有少數(shù)改變’的設(shè)定檔及通訊協(xié)定中,可以減少數(shù)據(jù)輸入錯(cuò)誤。一個(gè)例子是:‘送貨地點(diǎn)’和‘購買地點(diǎn)’在發(fā)票的紀(jì)錄中幾乎都是相同的資料。 *'''實(shí)際的考量''' YAML是“行導(dǎo)向的”,因此,就算想由現(xiàn)有程序的混亂輸出,轉(zhuǎn)換成YAML格式,并保留大部分的原始文件之外觀,也非常簡單。因?yàn)樗恍枰胶夥忾]的標(biāo)簽、括號(hào)及引號(hào),可以從很簡單的利用程式,從報(bào)表產(chǎn)生YAML。同樣,空格分隔可讓使用行導(dǎo)向的命令如:grep、Awk、perl、ruby,和Python,來應(yīng)急性的過濾YAML文件時(shí)更加方便。 特別是與標(biāo)記語言不同的,連續(xù)的YAML區(qū)塊導(dǎo)向往往是格式良好的YAML文件本身。這使得很容易撰寫那種“在開始提取的具體記錄之前,不需要'讀取全部文件內(nèi)容'”的解析器(通常需要平衡起始和關(guān)閉標(biāo)簽、尋找引號(hào)和跳脫字符)。當(dāng)處理一個(gè)單一靜態(tài)的,整個(gè)存在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)將很大,或?yàn)樘崛∫粋€(gè)項(xiàng)目來重建的整個(gè)結(jié)構(gòu),代價(jià)相當(dāng)昂貴的記錄檔,這種特性是相當(dāng)方便的。 值得討論的是,盡管它的縮排方式似乎復(fù)雜化了深度很大的巢狀層次, YAML將縮排視為一個(gè)單一的空白,這可能會(huì)取得比其他標(biāo)記語言更好的壓縮比。此外,極深的縮排可以完全避免的是: (1)使用“內(nèi)置格式”(即簡稱類JSON格式)而無縮排; (2)使用關(guān)聯(lián)錨點(diǎn)展開階層以形成一個(gè)攤平的格式,使得YAML解析器能透明地重組成完整的數(shù)據(jù)結(jié)構(gòu)。 *'''安全性''' YAML是純粹用來表達(dá)資料的語言,所以內(nèi)部不會(huì)存代碼注射的可執(zhí)行命令。這代表剖析器會(huì)相當(dāng)(至少)安全的解析文件,而不用擔(dān)心潛在與執(zhí)行命令相關(guān)的安全漏洞。舉例來說,JSON是[[JavaScript]]的子集,使用JavaScript本身的剖析器是相當(dāng)誘人的,不過也造成許多代碼注射的漏洞。雖然在所有資料序列語言中,安全解析本質(zhì)上是可能的,但可執(zhí)行性卻正是這樣一個(gè)惡名昭彰的缺陷;而YAML缺乏相關(guān)的命令語言,可能是一個(gè)相對(duì)安全的利益。 *'''資料處理和呈現(xiàn)''' XML和YAML規(guī)范提供非常不同的邏輯模型來進(jìn)行資料結(jié)點(diǎn)的展現(xiàn)、處理及儲(chǔ)存。 == 相關(guān)條目 == *[[HTML]] *[[DTD]] *[[XHTML]] *[[JAVA]] *[[JQuery]] == 參考來源 == *http://zh.wikipedia.org/zh-cn/YAML [[category:標(biāo)記語言|Y]]
摘要:
請(qǐng)注意,您對(duì)站長百科的所有貢獻(xiàn)都可能被其他貢獻(xiàn)者編輯,修改或刪除。如果您不希望您的文字被任意修改和再散布,請(qǐng)不要提交。
您同時(shí)也要向我們保證您所提交的內(nèi)容是您自己所作,或得自一個(gè)不受版權(quán)保護(hù)或相似自由的來源(參閱
Wordpress-mediawiki:版權(quán)
的細(xì)節(jié))。
未經(jīng)許可,請(qǐng)勿提交受版權(quán)保護(hù)的作品!
取消
編輯幫助
(在新窗口中打開)
取自“
http://kktzf.com.cn/wiki/YAML
”