刘 鹏,施运梅+ ,李 宁,刘旭红
(1.网络文化与数字传播北京市重点实验室,北京100101;2.北京信息科技大学 计算机学院,北京100101)
达尔文信息类型架构 (darwin information typing architecture,DITA)是一套基于XML的面向主题的数字内容结构化写作与发布方案[1]。设计DITA的初衷是为了满足技术文档写作和发布的需求,实现 “一次制作,多元发布”的应用要求。DITA-OT (DITA open toolkit)是支持DITA的开源工具,它较好地实现了DITA这一架构。DITA和DITA-OT“一次制作,多元发布”的特点决定了它们可用于复合出版。但复合出版需要对多媒体信息进行发布,而DITA对多媒体内容的支持力度较小,当前仅支持图形、图片等,而像音乐这样的媒体信息无法用DITA表达,这限制了DITA的应用。目前,国外对DITA的研究和应用主要集中在文档制作方面[2,3],国内的研究主要是通过对DITA进行深入分析,再将其应用到语义信息的组织和技术文档的编写上[4-6]。这些研究尚未涉及DITA对音乐的支持。
DITA提供了专门化的方法扩展其应用范围,这为扩展DITA的音乐表现能力提供了可能性。本文探索了一种在DITA-OT中扩展音乐媒体的方法,主要思想是通过专门化将表现音乐的置标语言音乐扩展置标语言 (music eXtensible markup language,MusicXML)扩展到 DITA-OT中,并在DITA-OT中建立相应的转换文件,以支持对 MusicXML的转换。
DITA是IBM公司为结构信息标准化促进组织 (organization for the advancement of structure information standards,OASIS)贡献的发明,其核心思想是模块化和可重用。DITA以主题作为文档内容划分的基本单元,主题是独立的信息单元[7]。DITA通过主题图 (ditamap)将主题按需求组合起来,形成满足用户需要的文档。DITA文档的组织形式如图1所示,在每个主题图文档中可根据用户需求将不同的主题重组到一起。
图1 DITA文档的组织形式
DITA中只定义了一种一般化的主题类型:topic,并通过基于topic的专门化,扩展出了3种基本的主题类型:概念 (concept)、任务 (task)和参考 (reference)[8]。DITA允许用户根据自己的需要在这四种主题之上进行专门化,从而实现对DITA的扩展,使DITA能符合更广泛的用户需求,例如复合出版领域的需求。DITA专门化的层次结构如图2所示。
图2 DITA专门化的层次结构
在DITA中,可以对某一主题类型中所包含的属性、元素以及该主题类型自身进行专门化,也可以对DITA中现有的主题图进行专门化。在专门化的过程中,每一个新扩展出来的属性、元素、主题或主题图都必须 “继承于”DITA中同类的基础结构,并且受这些基础结构的语法、语义的限制,不能超越这种限制,这便产生了专门化的层次结构。
DITA提供的只是一种体系结构,是一种理论规范,要将其应用到具体实践中,还需要相应工具的支持,DITA-OT较好地实现了DITA的理论框架,为DITA在实践中的应用提供了可能。
DITA-OT是参考DITA标准实现的一套工具。这个工具用于把DITA内容转换为可发行格式的文档,如XHTML、Eclipse Help、HTML Help、JAVAHelp 和 PDF等[9]。DITA-OT的处理流程如图3所示。
图3 DITA-OT的处理流程
DITA-OT的处理流程主要分3步:
(1)参数初始化 初始化DITA-OT的环境变量。该步骤由批处理文件Batch script完成。
(2)验证源文件和创建临时文件 对源文件 (ditamap或dita)转换之前,需要根据 DTD (document type definition)或Schema验证源文件的有效性,即验证源文件是否符合DITA标准;通过验证之后,源文件将被DITA-OT中的相关程序分析处理,产生一系列的中间文件。
(3)创建目标输出文件 Ant(another neat tool)build tool根据DITA-OT自带脚本或用户自定义脚本,调用XSLT (eXtensible Stylesheet Language Transformations)processor,XSLT processor根据XSLT stylesheet(样式表)中的内容,对中间文件进行转换,得到最终的输出结果。
XSLT样式表用于将DITA文档转换为其它格式的文档,如XHTML、PDF等。DITA-OT自带一些XSLT样式表,但是这些样式表不足以满足用户需求。在专门化的时候,要在DITA-OT中加入用户自己编写的XSLT样式表。大多数情况下用户编写自己的XSLT样式表就能实现转换,但是也有样式表无法完成的转换,此时需要编写JAVA程序完成转换任务。
DITA-OT提供了四种专门化方式[10]:属性专门化、元素域专门化、主题专门化和主题图专门化。其中,元素域专门化是向DITA-OT中添加新的元素。
在元素域专门化时需要建立扩展名分别为mod、ent和dtd的3个文件。其中,mod和ent文件构成了对新的元素域的描述,dtd是一个外壳文件,它将mod和ent文件包含进来,并声明包含新的元素域的主题类型。具体地说,mod文件声明了新的元素域内包含的所有元素信息,例如新元素的名字、属性等信息;ent文件主要包含用于描述元素域的一些实体的声明,使用这些实体来表示关于该元素域的一些描述,并通过对这些实体的引用来将该元素域集成到某一具体的主题类型中。
DITA-OT本身不提供对音乐的支持,如果需要增加此项功能,必须通过专门化的手段。元素域专门化可以将表现音乐的MusicXML元素添加到DITA-OT中。
音乐扩展置标语言 MusicXML是由Recordare公司开发的一种置标语言[11]。MusicXML的最大优点是它基于XML技术,非常便于在网络交换,阅读方便,结构清晰。MusicXML技术在出现后,发展非常迅速。目前,MusicXML已经被超过100多种音乐应用程序所支持,如美国MakeMusic公司的Finale系列,Recordare公司的Dolet 4 for Finale等。
MusicXML对于音乐信息的记录非常全面规范,包括属性结点在内,共有超过600个结点,这些结点可以分为四个大类:都柏林核心集类的结点、关于布局的元素、整体的头部数据和具体的音乐数据。最后一大类的信息量最大、最具体,直接和乐理相关。下面是用MusicXML所写的 《新年好》乐谱的主要部分:
上述xml文件中以<score-partwise>作为根元素,表明该文档是以声部为依据来记录乐谱信息的,<creditwords>元素指定了乐谱的名字为 “新年好”,<part>元素表示声部,本乐谱中只有一个声部,故只有一个<part>元素,<part-name>元素指定了该声部的名字为 “Piano”,<instrument-name>元素指定了该声部使用钢琴 (Piano)来演奏,<measure>元素表示小节,其中包括了该小节内所有音符的音名、音高等信息,上述文档中省略了这些信息,<part>元素将所有的小节组合起来,形成最终的乐谱。上述xml文件所表示 《新年好》乐曲的五线谱如图4所示。
图4 MusicXML所表示的乐谱
DITA-OT中提供了元素域的专门化方法,用于向DITA-OT中添加新的元素。MusicXML是表现音乐的、基于XML的置标语言,可以用DITA-OT所支持的元素域专门化的方法,将 MusicXML的元素添加到DITA-OT中,实现在DITA-OT中扩展音乐元素域的目标。
对于元素域专门化来说,首先需要确定待扩展的基础元素。topic是DITA中的一般主题,是所有其它主题的基础,topic中的基础元素<foreign>可用于扩展多媒体信息[12],因此可以通过对元素<foreign>的专门化,来实现将MusicXML的元素添加到DITA-OT中这一目标。
为实现DITA-OT对新元素的支持,需要定义三个扩展文件:mod、ent和dtd,并通过Ant工具完成 MusicXML的元素域与DITA-OT的结合。除此之外,还应该为专门化定义到不同格式文件的转换过程,以达到 “一次制作,多元发布”的要求。具体的扩展方法如图5所示。
图5 DITA-OT中扩展音乐元素域的方法
DITA-OT中扩展MusicXML元素域的方法主要分为两部分:对MusicXML元素域的专门化;对专门化的转换支持。图5中,虚线框中描述的是元素域的专门化。新的元素域对<foreign>的继承关系在实体文件.ent中定义,mod文件声明了MusicXML中所包含的元素和属性,dtd是将ent和mod文件包裹起来的一个外壳,是DITA-OT寻找新的元素域的入口文件。通过Ant工具,将mod、ent和dtd 3个文件整合到DITA-OT中。
DITA-OT中的Ant工具将XSLT文件/JAVA类文件与XSLT处理模块/JAR包处理模块结合,并通过这两个模块将DITA文档转换为XHTML、PDF、MIDI等不同格式的文件,实现 “一次制作,多元发布”。也就是说,为支持对新元素到不同格式的转换,需要使用不同的转换文件。对于易于实现的格式转换,可以通过XSLT实现,对于复杂格式的转换,可以借助JAVA程序实现。
根据对音乐元素域的扩展方法,首先要编写相应的mod、ent和dtd文件。这3个文件既可以采用DTD语法,也可以用Schema语法,本文采用的是DTD语法。3个文件的主要内容如下:
(1)musicxmlDomain.mod:
在该文件中主要指定了MusicXML所有元素都是<musicxml>元素的子节点,partwise.dtd文件是描述 MusicXML的DTD文件,在此处使用了MusicXML的partwise.dtd文件,指定与DITA结合的是 MusicXML中以声部为依据来记录乐谱的那部分元素。该文件中的最后一句以<musicxml>元素属性的形式指明了<musicxml>元素是由topic主题类型的<foreign>元素扩展来的。
(2)musicxmlDomain.ent:
在该ent文件中声明了参数实体musicxml-d-foreign和一般实体musicxml-d-att,前者用于指明新的元素域的根节点<musicxml>是<foreign>元素所表示的概念的子集,后者指明了将新的元素域集成到topic主题类型中,新的元素域的名称是musicxml-d。
(3)topic.dtd:
该文件将新定义的表示MusicXML的元素域与topic主题类型相结合,其中 “<!ENTITY included-domains "&musicxml-d-att;">”一句表明该topic主题类型中包含了表示MusicXML的元素域。
随时抹掉核桃砧木上萌发的全部芽眼,以集中养分供给接芽萌发和新梢生长。当新梢长到30 cm以上时,及时摘心,促发二次枝,适时解除接口包扎物。
DITA-OT通过Ant工具将编写的mod、ent和dtd文件与其原有的DTD文件合并到一起,以供以后对DITA文档的有效性进行验证。
按照扩展方法的定义,为了满足复合出版对多元发布的需求,可以将包含MusicXML元素的DITA文档以不同的文件格式发布,如XHTML、MIDI、PDF、HTML Help等。本文选择XHTML作为一种目标格式,用来说明将包含MusicXML元素的DITA文档转换为一般文本文件的过程;选择MIDI作为另一种目标格式,用来说明将包含MusicXML元素的DITA文档转换为多媒体文件的过程。
(1)到XHTML的转换
一般情况下,浏览器对XHTML中包含的MusicXML元素不进行解释,因此,需要将DITA
文档中的MusicXML元素转换为浏览器能够解释的表示方式。SVG (Scalable Vector Graphics,可伸缩矢量图形)[13]是一种基于XML的图形置标语言,得到各种浏览器的支持。SVG与MusicXML都是基于XML,比较容易使用XSLT实现从MusicXML到SVG的转换。
在编写XSLT文件的过程中,主要是根据MusicXML元素所表示的乐谱的内容进行分类,对代表不同内容的元素分别编写用于转换的XSLT模板,在模板中设计与该元素对应的SVG元素来表示可视化的乐谱内容。实际上在SVG中,大部分是用表示基本图形的元素 (如表示直线的元素<line>、表示椭圆的元素<ellipse>等)来 “绘制”乐谱的,表1对其中一些关键的转换进行了解释。
(2)到MIDI的转换
DITA文档到MIDI文件的转换过程中,主要是提取DITA文档中的MusicXML元素,并将其转换为MIDI格式,这个转换采用的是JAVA 程序。JDK1.3及其更高版本中提供对 MIDI文件操作的JAR 包javax.sound.midi.jar[14],调用该JAR包中相关的类来完成转换。整个转换过程主要由两个JAVA 类完成,这两个类的调用顺序、类名、类的作用、主要函数及其作用如表2所示。
表1 XSLT文件中关键部分的说明
表2 JAVA程序关键部分的说明
对上文中给出的 《新年好》乐谱进行测试。
将表示该乐谱的MusicXML的内容添加到DITA文档中,文档的主要结构如下。编码中标记 (1)
处省略的内容是上文中提到的 《新年好》乐谱的MusicXML的内容。
在DITA-OT中将上述DITA文档转换为XHTML文件,转换结果如图6所示。将该结果和图4中的乐谱进行比较,展现效果一致。
在DITA-OT中将上述DITA文档转换为MIDI文件,在乐谱编辑软件MuseScore中打开转换成功的MIDI文件,效果如图7所示。将转换结果和图4中的乐谱作比较,乐谱保持一致。使用支持MIDI的播放器播放该MIDI文件,能够听到钢琴演奏的 《新年好》乐曲,并且音质良好。
图6 转换生成的XHTML文件
图7 转换生成的MIDI文件在MuseScore中的显示效果
本文研究了一种在DITA-OT中扩展音乐内容的方法,弥补了DITA-OT对于音乐信息支持能力的不足,并为在DITA-OT中扩展其它媒体类型提供了一些借鉴之处。但是这个工作刚刚起步,要达到实用性的效果,还有许多内容需要研究,例如完善DITA-OT对于音乐信息的支持能力、研究转换后的文件和用户的交互方法、以及转换后的文件对各种平台的自适应性等。
除音乐这种媒体形式外,DITA-OT对于各种媒体的支持能力还有待增强,例如对音频、视频的支持能力。还应该开展DITA-OT对各种音频、视频信息的扩展方法的研究,使其能够全面地支持多媒体信息的发布,能够更好地满足复合出版对 “一次制作,多元发布”以及丰富的多媒体信息的要求。
[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).[杨公亮,栗晓磊.“进化型”结构化信息体系的构建--基于DITA结构化信息体系的架构及实施技术路线 [J].数字图书馆论坛,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).[范炜.达尔文信息类型架构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的技术文档写作研究 [D].北京:北京大学,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核心网文档开发的设计和实现 [D].上海:上海交通大学,2011.]
[7]FAN Kai.Design and implementation of compound document architecture [D].Beijing:Beijing Information Science &Technology University,2010 (in Chinese).[樊凯.复合文档架构的研究与实现 [D].北京:北京信息科技大学,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/.