概要

VSCodeとXSLTを用いたTEI/XMLのリアルタイムプレビュー環境を試作したので、備忘録です。

挙動

動作例は以下です。TEI/XMLファイルを編集し、保存すると、ブラウザの表示内容が更新されます。

https://youtu.be/ZParCRUc5AY?si=-aHHi3bIZGWoJYnP

準備

以下の拡張機能をインストールします。

TEI/XMLを保存した際に、Trigger Task on SaveによってXSLTを実行し、変換されたHTMLファイルをLive Serverで閲覧します。

リポジトリ

サンプルコードを以下に格納しています。

https://github.com/nakamura196/tei-xml-xslt-vscode

XSLTを行うにあたり、xslt3をインストールします。

gcnidptmtceilino-snxtemallh-ltxtsplst:-//sgciotdheub.com/nakamura196/tei-xml-xslt-vscode

settings.jsonとtasks.json

.vscodeフォルダに、settings.jsontasks.jsonを格納しています。

tasks.jsonは以下です。xsl/make-CETEIcean.xslを用いて、XSLTを行うタスクを設定しています。

{}""]vtea{}rssk""""]"}"}"isltca,p,g,po"ayor""""r""r""rn:bpmgx---ercokio"eemssxsoseluisb:[l"a"ls::evopnDl":n:tl$$nes"dee":d3:{{tae:"fm2""["xffal":aM."s:,siit":{ua0Thllli:"lt.re"/eeotbtc0alnm}Dn"ru"h"nlpa"i"nui:e,s"xk,r:eelrf,"envdt"o,-a{e"r:rCmr,umEe"e[T},]XE/MI$Lc{efwaiinlt.ehxBsaXlsS"eL,nTa"m,eNoExtension}.html"

xsl/make-CETEIcean.xslは、CETEIceanで公開されているXSLファイルです。

https://github.com/TEIC/CETEIcean/blob/master/xslt/make-CETEIcean.xsl

次に、settings.jsonです。teiフォルダ以下のxmlファイルに対して、保存時に上記のタスクを実行します。

{}"}tr"iTgrgaenrsTfaosrkmOnXSMaLvew.ittahskXsS"L:T"{:["tei/*.xml"]

これらの設定により、TEI/XMLファイルを保存時に、同フォルダにHTMLファイルが作成されます。

サンプルファイル

TEI/XMLファイルの例は以下です。xsl/make-CETEIcean.xslにより、rendition要素で設定したスタイルが適用されます。

<<<??T/xxETmmIEll<<I-xt/t/>vmmeteteoliexerdnH<<it<xsesef/e/H>b/til=aifneeob>o"dlicnadonhhee<<<lo<cdy<<<<d=rtrDt/p/s/edt/oe>d/d/d/d/y"et>eituposDiatdridididid>1fpstibuuoengai>vivivivi.=:cl<<tl<br<usgs<<<gn><><<<<<><v><0"/>etaliplcprcDDrrrsgp/p/p/p/p/p/a>a/"h/Siuec>ie>c>eeeeeDD>p>p>p>p>p>pbbatwtttSa<cD<escnnnee>>>>>>>>betwmlhtt/ae/Dcldddcs<<<<<<<<<<<<<<<<C<<>npwteomiptspe>>iiilc!tllllllllllllllEpt/cs.>>rto>ic>sttt>>-ibbbbbbbbbbbbbbTeato:tC>>no>ciii-t//////////////Erbad/eESSn>oool>>>>>>>>>>>>>>Isl<<<bi/iTatSnnnecNehr/r/lnw-EtmteaeororegwcIotmsssxamrawowo>=w.Cr>tcccmneod<<<<w<<<<w".oeu>hhhl>w>rcccc>rcccc>Utraeee:<<soeeeeoeeeeTegnNmmmir/=llllllllllFi/aeeede<a"ellllellll--nDk====f/b4==8csea""""p>""rrrr"rrrr".mmcccfteloooodoooo?1ousssoarcallllallll>r.<rsssorsobeeeeteeeeg0/a""""gNle====a====/"t<eas<l"""""""""r>i/xssxtm=/"dddd>ldddetameem=e"h>aaaaaaaallullll">4ettttbttteet:ee:h"aaaaaeaaaa>hicclt>d""""l"""sodttat>/>>>">>>er=oonp>>/>"rrgs<<<<<<xi===:///<//mt"""/cccccclatpd/eeeceee/lieeglllellltitr"illlllllecls>t>>>l>>>i"eNDh>/>"aiucf>mebuote.sne"Lcttx>eoo-tcimms-od//tdleTsyeonEclcrIheo:dCe:re/magsCaitrE/tiejTraoeuEelnnnIli:;gcac<eex;u/nan<nrng/deW"/rene>terdrenlitidith_inie<ateor/li;n<rlo<>/e.n/tfr>ri>netgnl"dei>ttyipoen=>"application/xml"schematypens="http://relaxng.org/ns/structure/1.0"?>

変換結果のHTMLファイルは以下です。TEI/XMLのlb要素などが、HTMLのtei-lb要素に変換され、これに対して、cssファイルやjsファイルが適用されます。

<<}}}"""""""""""""""""""""""]!h{/;DttOmeCl<<iT>t/t/-Y<etettPhieieeEett-<<i-<iiaee/tt/t/-tt/->hdiiseetetteettvccct>--tiieieexieea...m<fttpcyh-<<<i-<iit-<<<<ixreealmioieeoleft/t/t/-et/-hbt/t/t/t/-tl,,,,,,,,,,,,,,,,,,,,,,,lp>etntxrleaietetetfneteedoetetetetb>cs""""""""""""""""""""""sp<tatltso>dlieieieicienaadieieieieotttttttttttttttttttttt.l!al-e-Nr<<ee-<<i-<i-<ilo-<<<icdty-<i-<<<<<i-<i-<id<==eeeeeeeeeeeeeeeeeeeeeepyDisda:/?rdttt-pt-st-edtttt-oeadt/-dt/t/t/t/t/-dt-dt/-ysiiiiiiiiiiiiiiiiiiiiiiuB/Ohct{emhxeieetuepoesdiaeeetdr-dietdietetetetetdiedietd>cn[::::::::::::::::::::::sesCtycegemdstiiibiuuioengiiiai>oavieivieieieieieiviivieire"tfttappsetrtbdlrpathrchhcTtloralacl--tl-br-usgs---gnrt-<<<<<<<<<<<<<<<<iv-Ci-<i-i-i-iv-v-<iviwteiiiuuonaeeoibeebaeoe(arYper{ed-tetaliplcprcddrrrsgiadp!ttttttttttttttt->dpE-pt-p-p-p->da>dat/->peiltttbucgnxdvfrbawl"viP-:ae>madsiueciec>eeeeeddg-a-ieeeeeeeeeeeeeepaTpeppppababetatCiHellhlrosdtysldleipEetn<o-atttsadcddescnnneenotd-tiiiiiiiiiiiiii>tdE>di>d>d>d>ttiebE:eDeeoicdDiNegotqii;bdotmlhttaaeadcldddcsaraal--------------aaIa-aaaadad-<<<i>tTTaeSrceietaXr>hutooerateomittsteiiilcmi-tellllllllllllll-tctpttt-a-attt/t/-yEEdstaDncimMs<tiandli-rtoaicasddttt>>egoabbbbbbbbbbbbbboaeaeaaaototaeetettpIIecmtegloeL(/mvl:ygodd>n-o-caaiii=nr-xr-a-r---rarabiieieae(rtisDn")bl=i>hnraadsondo>ttooo"aiomddddddddddddddionosoooi-i-l--<<<<i-<<<<ib=)oce);o>"curaittatrsaraannntmgrlaaaaaaaaaaaaaagrrnrrrgogoehrtttt-rtttt-l";ns;dC;nemgaatmitti--eeni:ttttttttttttttni<iaiiinrnreoeeeeroeeeeretScyodfen--atgmagooiddx=agiaaaaaaaaaaaaaaagtgmgggaiaidawiiiiowiiiio>et>ne==aoo-nt-nrrdaat"mnd--------------mnenennnmgmgad----w----wxm<tr""mrroda>oaii=tt"bea=ooooooooooooooeaiaaaaenentdcccc>dcccc>tt/elhteiiramrmgg"aa>o=m"rrrrrrrrrrrrrr=m-mdmmm=a=aadaeeeeaeeee/hnite=ggiteienni--d"efiiiiiiiiiiiiii"ereaeee"m"m-atlllltlllljttnti"nnga=g=aatooyd=oggggggggggggggd=e=t===dedeotallllallllam-epHfaan-"n"mmarr"i"onnnnnnnnnnnnnni"f"a"""i=i=ra--vlT;seimmaopapeelii>vp"aaaaaaaaaaaaaavpp-pppv"v"i-oddddodddda>y:aleemr"m"==igg""mmmmmmmmmmmmmm""d"o""""a"agoraaaaraaaasp/de==ei>e>""cnn>>xeeeeeeeeeeeeee>>a>r>>>>b>bnrittttittttce/eD""=g<=<et"aam==============ti""aigaaaagaaaar"wrett"n/"/namml""""""""""""""ag>>mgn----n----iw"siiaatstcgdee:llllllllllllll-nenaooooaoooopcw>cttumeoeosa==lbbbbbbbbbbbbbboa=amrrrrmrrrrto."llteiuidDt""a""""""""""""""rm"meiiiieiiii"nt>eeh=-r-iearrn>>>>>>>>>>>>>>iete=gggg=gggg>teS"o"pcpnc-eeg<<<<<<<<<<<<<<g=a="nnnn"nnnneit>rp>e>glonn=//////////////n"b"raaaaraaaan-mC"uDD"rdd"ttttttttttttttaplhommmmommmmtctE>bee>iiideeeeeeeeeeeeeemeeeweeeeweeee=."TSlssgtteiiiiiiiiiiiiiier"a"===="===="o>Eaiccnii"--------------=sd""""""""trItc""aoo>llllllllllllll"N<d"dccccdccccegCoa>>mnnDbbbbbbbbbbbbbbra/a>aeeeeaeeeex/erte""i>>>>>>>>>>>>>>emtttlllltlllltraui=efeeaallllallll/eno"dd""i--""""-""""hlNnraaL>-oooteDaSettedarrddddrddddmaektnaaiabiiaaaaiaaaalsmamd--dt<>ggttttgtttt;eomtiooea/aaaaaaaaaaa/<u"trrn-ttt----t----cx/r>iiioet<tooootoooohmtaoggdris/srrrrsrrrrale<naaei-=t=iiii=iiiir/i/"ttsgp"e"gggg"ggggst-tttaeriraaaaraaaaeetedssjtro-ottttotttttiiia==utswhlttttltttt=/t-t""nsnseessssessssUclaassg=aca"===="====Tueu-cce"mod""""""""Fs>tohhntel>rrrrrrrrrr-threea>soooooooooo8ooimmWr"llllllllll"mrgeeegeeeeeeeeee>/>assrer=""""=""""<steetto""lctllh"wlrrrrdrrrrihseeesaooooaoooone=ccrt=blllltllllkm"tt<a"eeeeeaeeeeasoo/r4l===="====r/crrtg"""""">""""erh""ie>ddddldddleettcaaaaaaaa=lmssl=ottttbttt"aecce"laaaaeaaasxihh>hs""""l"""tndeet=>>>>">>>yg"mmt"<>l/eep4/<<<<<<ets==s"t///<//sec"":>etttttthihcc/ieeeteeee_ess/-iiieiiieamssgc---i---tle""ieccc-ccc"l=tleeeceee."sshllllelllhrceeu>lllllllrnsllb>>>l>>>egsee.>f""ccc=tto"txoomhymrr/tpl==Tte:""Ep=itpIs"dieC:a=tr//p"lsC/pieNEtlt"aTeia>mEiclteIcaie"c.tcx>egi"tcaio>-ontnfdl"h/oeo>uxncrbmto:.l-ri"sag<ottr//syietCcloeeEhenniTe::;-Em<rIaiu/ecttntfeyade>apleineir-/nclrcs;ies=<nns"/ed/ht;iCte<tEti/iTp-toE:renI/ei>c/n-erdraeienltn.aidcxoisnntsg>i".o>on<r>sgc/rnisp/tsttryupcet=u"rtee/x1t./0j"a>v<atsecir-itpeti"dsartca=-"xhmtltnpss=:"/h/tgtipt:h/u/bw.wcwo.mt/eTiE-IcC./oCrEgT/EnIsc/e1a.n0/"redlaetaas-eosr/idgonwanmleo=a"dT/EvI0".>4.0/CETEI.js"></script><style>

結果、以下のように表示されます。

まとめ

XSLファイルを変更することで、プレビューの表示内容が変更されます。

大きなファイルでは、XSLTに時間がかかってしまうかもしれませんが、TEI/XMLの編集環境の構築にあたり、参考になりましたら幸いです。