劉 鵬,施運梅+ ,李 寧,劉旭紅
(1.網(wǎng)絡(luò)文化與數(shù)字傳播北京市重點實驗室,北京100101;2.北京信息科技大學(xué) 計算機學(xué)院,北京100101)
達爾文信息類型架構(gòu) (darwin information typing architecture,DITA)是一套基于XML的面向主題的數(shù)字內(nèi)容結(jié)構(gòu)化寫作與發(fā)布方案[1]。設(shè)計DITA的初衷是為了滿足技術(shù)文檔寫作和發(fā)布的需求,實現(xiàn) “一次制作,多元發(fā)布”的應(yīng)用要求。DITA-OT (DITA open toolkit)是支持DITA的開源工具,它較好地實現(xiàn)了DITA這一架構(gòu)。DITA和DITA-OT“一次制作,多元發(fā)布”的特點決定了它們可用于復(fù)合出版。但復(fù)合出版需要對多媒體信息進行發(fā)布,而DITA對多媒體內(nèi)容的支持力度較小,當(dāng)前僅支持圖形、圖片等,而像音樂這樣的媒體信息無法用DITA表達,這限制了DITA的應(yīng)用。目前,國外對DITA的研究和應(yīng)用主要集中在文檔制作方面[2,3],國內(nèi)的研究主要是通過對DITA進行深入分析,再將其應(yīng)用到語義信息的組織和技術(shù)文檔的編寫上[4-6]。這些研究尚未涉及DITA對音樂的支持。
DITA提供了專門化的方法擴展其應(yīng)用范圍,這為擴展DITA的音樂表現(xiàn)能力提供了可能性。本文探索了一種在DITA-OT中擴展音樂媒體的方法,主要思想是通過專門化將表現(xiàn)音樂的置標(biāo)語言音樂擴展置標(biāo)語言 (music eXtensible markup language,MusicXML)擴展到 DITA-OT中,并在DITA-OT中建立相應(yīng)的轉(zhuǎn)換文件,以支持對 MusicXML的轉(zhuǎn)換。
DITA是IBM公司為結(jié)構(gòu)信息標(biāo)準(zhǔn)化促進組織 (organization for the advancement of structure information standards,OASIS)貢獻的發(fā)明,其核心思想是模塊化和可重用。DITA以主題作為文檔內(nèi)容劃分的基本單元,主題是獨立的信息單元[7]。DITA通過主題圖 (ditamap)將主題按需求組合起來,形成滿足用戶需要的文檔。DITA文檔的組織形式如圖1所示,在每個主題圖文檔中可根據(jù)用戶需求將不同的主題重組到一起。
圖1 DITA文檔的組織形式
DITA中只定義了一種一般化的主題類型:topic,并通過基于topic的專門化,擴展出了3種基本的主題類型:概念 (concept)、任務(wù) (task)和參考 (reference)[8]。DITA允許用戶根據(jù)自己的需要在這四種主題之上進行專門化,從而實現(xiàn)對DITA的擴展,使DITA能符合更廣泛的用戶需求,例如復(fù)合出版領(lǐng)域的需求。DITA專門化的層次結(jié)構(gòu)如圖2所示。
圖2 DITA專門化的層次結(jié)構(gòu)
在DITA中,可以對某一主題類型中所包含的屬性、元素以及該主題類型自身進行專門化,也可以對DITA中現(xiàn)有的主題圖進行專門化。在專門化的過程中,每一個新擴展出來的屬性、元素、主題或主題圖都必須 “繼承于”DITA中同類的基礎(chǔ)結(jié)構(gòu),并且受這些基礎(chǔ)結(jié)構(gòu)的語法、語義的限制,不能超越這種限制,這便產(chǎn)生了專門化的層次結(jié)構(gòu)。
DITA提供的只是一種體系結(jié)構(gòu),是一種理論規(guī)范,要將其應(yīng)用到具體實踐中,還需要相應(yīng)工具的支持,DITA-OT較好地實現(xiàn)了DITA的理論框架,為DITA在實踐中的應(yīng)用提供了可能。
DITA-OT是參考DITA標(biāo)準(zhǔn)實現(xiàn)的一套工具。這個工具用于把DITA內(nèi)容轉(zhuǎn)換為可發(fā)行格式的文檔,如XHTML、Eclipse Help、HTML Help、JAVAHelp 和 PDF等[9]。DITA-OT的處理流程如圖3所示。
圖3 DITA-OT的處理流程
DITA-OT的處理流程主要分3步:
(1)參數(shù)初始化 初始化DITA-OT的環(huán)境變量。該步驟由批處理文件Batch script完成。
(2)驗證源文件和創(chuàng)建臨時文件 對源文件 (ditamap或dita)轉(zhuǎn)換之前,需要根據(jù) DTD (document type definition)或Schema驗證源文件的有效性,即驗證源文件是否符合DITA標(biāo)準(zhǔn);通過驗證之后,源文件將被DITA-OT中的相關(guān)程序分析處理,產(chǎn)生一系列的中間文件。
(3)創(chuàng)建目標(biāo)輸出文件 Ant(another neat tool)build tool根據(jù)DITA-OT自帶腳本或用戶自定義腳本,調(diào)用XSLT (eXtensible Stylesheet Language Transformations)processor,XSLT processor根據(jù)XSLT stylesheet(樣式表)中的內(nèi)容,對中間文件進行轉(zhuǎn)換,得到最終的輸出結(jié)果。
XSLT樣式表用于將DITA文檔轉(zhuǎn)換為其它格式的文檔,如XHTML、PDF等。DITA-OT自帶一些XSLT樣式表,但是這些樣式表不足以滿足用戶需求。在專門化的時候,要在DITA-OT中加入用戶自己編寫的XSLT樣式表。大多數(shù)情況下用戶編寫自己的XSLT樣式表就能實現(xiàn)轉(zhuǎn)換,但是也有樣式表無法完成的轉(zhuǎn)換,此時需要編寫JAVA程序完成轉(zhuǎn)換任務(wù)。
DITA-OT提供了四種專門化方式[10]:屬性專門化、元素域?qū)iT化、主題專門化和主題圖專門化。其中,元素域?qū)iT化是向DITA-OT中添加新的元素。
在元素域?qū)iT化時需要建立擴展名分別為mod、ent和dtd的3個文件。其中,mod和ent文件構(gòu)成了對新的元素域的描述,dtd是一個外殼文件,它將mod和ent文件包含進來,并聲明包含新的元素域的主題類型。具體地說,mod文件聲明了新的元素域內(nèi)包含的所有元素信息,例如新元素的名字、屬性等信息;ent文件主要包含用于描述元素域的一些實體的聲明,使用這些實體來表示關(guān)于該元素域的一些描述,并通過對這些實體的引用來將該元素域集成到某一具體的主題類型中。
DITA-OT本身不提供對音樂的支持,如果需要增加此項功能,必須通過專門化的手段。元素域?qū)iT化可以將表現(xiàn)音樂的MusicXML元素添加到DITA-OT中。
音樂擴展置標(biāo)語言 MusicXML是由Recordare公司開發(fā)的一種置標(biāo)語言[11]。MusicXML的最大優(yōu)點是它基于XML技術(shù),非常便于在網(wǎng)絡(luò)交換,閱讀方便,結(jié)構(gòu)清晰。MusicXML技術(shù)在出現(xiàn)后,發(fā)展非常迅速。目前,MusicXML已經(jīng)被超過100多種音樂應(yīng)用程序所支持,如美國MakeMusic公司的Finale系列,Recordare公司的Dolet 4 for Finale等。
MusicXML對于音樂信息的記錄非常全面規(guī)范,包括屬性結(jié)點在內(nèi),共有超過600個結(jié)點,這些結(jié)點可以分為四個大類:都柏林核心集類的結(jié)點、關(guān)于布局的元素、整體的頭部數(shù)據(jù)和具體的音樂數(shù)據(jù)。最后一大類的信息量最大、最具體,直接和樂理相關(guān)。下面是用MusicXML所寫的 《新年好》樂譜的主要部分:
上述xml文件中以<score-partwise>作為根元素,表明該文檔是以聲部為依據(jù)來記錄樂譜信息的,<creditwords>元素指定了樂譜的名字為 “新年好”,<part>元素表示聲部,本樂譜中只有一個聲部,故只有一個<part>元素,<part-name>元素指定了該聲部的名字為 “Piano”,<instrument-name>元素指定了該聲部使用鋼琴 (Piano)來演奏,<measure>元素表示小節(jié),其中包括了該小節(jié)內(nèi)所有音符的音名、音高等信息,上述文檔中省略了這些信息,<part>元素將所有的小節(jié)組合起來,形成最終的樂譜。上述xml文件所表示 《新年好》樂曲的五線譜如圖4所示。
圖4 MusicXML所表示的樂譜
DITA-OT中提供了元素域的專門化方法,用于向DITA-OT中添加新的元素。MusicXML是表現(xiàn)音樂的、基于XML的置標(biāo)語言,可以用DITA-OT所支持的元素域?qū)iT化的方法,將 MusicXML的元素添加到DITA-OT中,實現(xiàn)在DITA-OT中擴展音樂元素域的目標(biāo)。
對于元素域?qū)iT化來說,首先需要確定待擴展的基礎(chǔ)元素。topic是DITA中的一般主題,是所有其它主題的基礎(chǔ),topic中的基礎(chǔ)元素<foreign>可用于擴展多媒體信息[12],因此可以通過對元素<foreign>的專門化,來實現(xiàn)將MusicXML的元素添加到DITA-OT中這一目標(biāo)。
為實現(xiàn)DITA-OT對新元素的支持,需要定義三個擴展文件:mod、ent和dtd,并通過Ant工具完成 MusicXML的元素域與DITA-OT的結(jié)合。除此之外,還應(yīng)該為專門化定義到不同格式文件的轉(zhuǎn)換過程,以達到 “一次制作,多元發(fā)布”的要求。具體的擴展方法如圖5所示。
圖5 DITA-OT中擴展音樂元素域的方法
DITA-OT中擴展MusicXML元素域的方法主要分為兩部分:對MusicXML元素域的專門化;對專門化的轉(zhuǎn)換支持。圖5中,虛線框中描述的是元素域的專門化。新的元素域?qū)Γ糵oreign>的繼承關(guān)系在實體文件.ent中定義,mod文件聲明了MusicXML中所包含的元素和屬性,dtd是將ent和mod文件包裹起來的一個外殼,是DITA-OT尋找新的元素域的入口文件。通過Ant工具,將mod、ent和dtd 3個文件整合到DITA-OT中。
DITA-OT中的Ant工具將XSLT文件/JAVA類文件與XSLT處理模塊/JAR包處理模塊結(jié)合,并通過這兩個模塊將DITA文檔轉(zhuǎn)換為XHTML、PDF、MIDI等不同格式的文件,實現(xiàn) “一次制作,多元發(fā)布”。也就是說,為支持對新元素到不同格式的轉(zhuǎn)換,需要使用不同的轉(zhuǎn)換文件。對于易于實現(xiàn)的格式轉(zhuǎn)換,可以通過XSLT實現(xiàn),對于復(fù)雜格式的轉(zhuǎn)換,可以借助JAVA程序?qū)崿F(xiàn)。
根據(jù)對音樂元素域的擴展方法,首先要編寫相應(yīng)的mod、ent和dtd文件。這3個文件既可以采用DTD語法,也可以用Schema語法,本文采用的是DTD語法。3個文件的主要內(nèi)容如下:
(1)musicxmlDomain.mod:
在該文件中主要指定了MusicXML所有元素都是<musicxml>元素的子節(jié)點,partwise.dtd文件是描述 MusicXML的DTD文件,在此處使用了MusicXML的partwise.dtd文件,指定與DITA結(jié)合的是 MusicXML中以聲部為依據(jù)來記錄樂譜的那部分元素。該文件中的最后一句以<musicxml>元素屬性的形式指明了<musicxml>元素是由topic主題類型的<foreign>元素擴展來的。
(2)musicxmlDomain.ent:
在該ent文件中聲明了參數(shù)實體musicxml-d-foreign和一般實體musicxml-d-att,前者用于指明新的元素域的根節(jié)點<musicxml>是<foreign>元素所表示的概念的子集,后者指明了將新的元素域集成到topic主題類型中,新的元素域的名稱是musicxml-d。
(3)topic.dtd:
該文件將新定義的表示MusicXML的元素域與topic主題類型相結(jié)合,其中 “<!ENTITY included-domains "&musicxml-d-att;">”一句表明該topic主題類型中包含了表示MusicXML的元素域。
隨時抹掉核桃砧木上萌發(fā)的全部芽眼,以集中養(yǎng)分供給接芽萌發(fā)和新梢生長。當(dāng)新梢長到30 cm以上時,及時摘心,促發(fā)二次枝,適時解除接口包扎物。
DITA-OT通過Ant工具將編寫的mod、ent和dtd文件與其原有的DTD文件合并到一起,以供以后對DITA文檔的有效性進行驗證。
按照擴展方法的定義,為了滿足復(fù)合出版對多元發(fā)布的需求,可以將包含MusicXML元素的DITA文檔以不同的文件格式發(fā)布,如XHTML、MIDI、PDF、HTML Help等。本文選擇XHTML作為一種目標(biāo)格式,用來說明將包含MusicXML元素的DITA文檔轉(zhuǎn)換為一般文本文件的過程;選擇MIDI作為另一種目標(biāo)格式,用來說明將包含MusicXML元素的DITA文檔轉(zhuǎn)換為多媒體文件的過程。
(1)到XHTML的轉(zhuǎn)換
一般情況下,瀏覽器對XHTML中包含的MusicXML元素不進行解釋,因此,需要將DITA
文檔中的MusicXML元素轉(zhuǎn)換為瀏覽器能夠解釋的表示方式。SVG (Scalable Vector Graphics,可伸縮矢量圖形)[13]是一種基于XML的圖形置標(biāo)語言,得到各種瀏覽器的支持。SVG與MusicXML都是基于XML,比較容易使用XSLT實現(xiàn)從MusicXML到SVG的轉(zhuǎn)換。
在編寫XSLT文件的過程中,主要是根據(jù)MusicXML元素所表示的樂譜的內(nèi)容進行分類,對代表不同內(nèi)容的元素分別編寫用于轉(zhuǎn)換的XSLT模板,在模板中設(shè)計與該元素對應(yīng)的SVG元素來表示可視化的樂譜內(nèi)容。實際上在SVG中,大部分是用表示基本圖形的元素 (如表示直線的元素<line>、表示橢圓的元素<ellipse>等)來 “繪制”樂譜的,表1對其中一些關(guān)鍵的轉(zhuǎn)換進行了解釋。
(2)到MIDI的轉(zhuǎn)換
DITA文檔到MIDI文件的轉(zhuǎn)換過程中,主要是提取DITA文檔中的MusicXML元素,并將其轉(zhuǎn)換為MIDI格式,這個轉(zhuǎn)換采用的是JAVA 程序。JDK1.3及其更高版本中提供對 MIDI文件操作的JAR 包javax.sound.midi.jar[14],調(diào)用該JAR包中相關(guān)的類來完成轉(zhuǎn)換。整個轉(zhuǎn)換過程主要由兩個JAVA 類完成,這兩個類的調(diào)用順序、類名、類的作用、主要函數(shù)及其作用如表2所示。
表1 XSLT文件中關(guān)鍵部分的說明
表2 JAVA程序關(guān)鍵部分的說明
對上文中給出的 《新年好》樂譜進行測試。
將表示該樂譜的MusicXML的內(nèi)容添加到DITA文檔中,文檔的主要結(jié)構(gòu)如下。編碼中標(biāo)記 (1)
處省略的內(nèi)容是上文中提到的 《新年好》樂譜的MusicXML的內(nèi)容。
在DITA-OT中將上述DITA文檔轉(zhuǎn)換為XHTML文件,轉(zhuǎn)換結(jié)果如圖6所示。將該結(jié)果和圖4中的樂譜進行比較,展現(xiàn)效果一致。
在DITA-OT中將上述DITA文檔轉(zhuǎn)換為MIDI文件,在樂譜編輯軟件MuseScore中打開轉(zhuǎn)換成功的MIDI文件,效果如圖7所示。將轉(zhuǎn)換結(jié)果和圖4中的樂譜作比較,樂譜保持一致。使用支持MIDI的播放器播放該MIDI文件,能夠聽到鋼琴演奏的 《新年好》樂曲,并且音質(zhì)良好。
圖6 轉(zhuǎn)換生成的XHTML文件
圖7 轉(zhuǎn)換生成的MIDI文件在MuseScore中的顯示效果
本文研究了一種在DITA-OT中擴展音樂內(nèi)容的方法,彌補了DITA-OT對于音樂信息支持能力的不足,并為在DITA-OT中擴展其它媒體類型提供了一些借鑒之處。但是這個工作剛剛起步,要達到實用性的效果,還有許多內(nèi)容需要研究,例如完善DITA-OT對于音樂信息的支持能力、研究轉(zhuǎn)換后的文件和用戶的交互方法、以及轉(zhuǎn)換后的文件對各種平臺的自適應(yīng)性等。
除音樂這種媒體形式外,DITA-OT對于各種媒體的支持能力還有待增強,例如對音頻、視頻的支持能力。還應(yīng)該開展DITA-OT對各種音頻、視頻信息的擴展方法的研究,使其能夠全面地支持多媒體信息的發(fā)布,能夠更好地滿足復(fù)合出版對 “一次制作,多元發(fā)布”以及豐富的多媒體信息的要求。
[1]YANG Gongliang,LI Xiaolei.Evolved structured information system architecting-DITA-based architecture and writing best practice [J].Digital Library Forum,2012 (4):10-16 (in Chinese).[楊公亮,栗曉磊.“進化型”結(jié)構(gòu)化信息體系的構(gòu)建--基于DITA結(jié)構(gòu)化信息體系的架構(gòu)及實施技術(shù)路線 [J].數(shù)字圖書館論壇,2012 (4):10-16.]
[2]Aidan Kehoe & Ian Pitt.Transforming.DITA topics for speech synthesis output [C]//New York,America,2007:147-148.
[3]Oscar Díaz & Felipe I Anfurrutia &Jon Kortabitarte.Using DITA for documenting software product lines [C].New York,America,2009:231-240.
[4]FAN Wei.A study on darwin information typing architecture[J].Journal of Intelligence,2009,28 (11):172-175 (in Chinese).[范煒.達爾文信息類型架構(gòu)DITA研究 [J].情報雜志,2009,28 (11):172-175.]
[5]ZHU Ying.A study on the DITA-based writing of technical documents[D].Beijing:Peking University,2010 (in Chinese).[祝穎.基于DITA的技術(shù)文檔寫作研究 [D].北京:北京大學(xué),2010.]
[6]LI Junyu.Design and implementation of DITA-based NGN core network documentation development[D].Shanghai:Shanghai Jiaotong University,2011 (in Chinese).[李俊瑀.基于DITA的NGN核心網(wǎng)文檔開發(fā)的設(shè)計和實現(xiàn) [D].上海:上海交通大學(xué),2011.]
[7]FAN Kai.Design and implementation of compound document architecture [D].Beijing:Beijing Information Science &Technology University,2010 (in Chinese).[樊凱.復(fù)合文檔架構(gòu)的研究與實現(xiàn) [D].北京:北京信息科技大學(xué),2010.]
[8]Eliot Kimber.DITA for practitioners:Vol.1architecture and technology [M].First Edition.California,America:XML Press,2012.
[9]DITA open tookit1.5.4 [EB/OL]. [2012-11-25].http://dita-ot.sourceforge.net/1.5.4/.
[10]DITA configuration and specialization tutorial [EB/OL].[2012-11-25].http://xiruss.org/tutorials/ dita-specialization/dita-specialization-tutorial.pdf.
[11]MusicXML[EB/OL].[2012-11-25].http://zh.wikipedia.org/wiki/MusicXML.
[12]Darwin information typing architecture (DITA)version 1.2[S].2010.
[13]Scalable Vector Graphics (SVG)1.1 [S].2nd ed.2011.
[14]JavaTMPlatform,Standard edition 6API specification [EB/OL].[2012-11-25].http://docs.oracle.com/javase/6/docs/api/.