概要

TEI/XMLファイルを編集する際、検証に使用するrngファイルを変更することで、使用するタグや属性を限定することができます。これにより、作業者が使用するタグに混乱しない、作成されるTEI/XMLのばらつきが軽減する、といった利点が考えられます。

rngファイルを編集する方法として、以下の記事で紹介したように、Romaを使用する方法が一般的です。

この方法はトップダウン的に使用するタグや属性を限定していく方法ですが、今回は、すでに作成済みのTEI/XMLから、生成AIを用いて、ボトムアップ的にrngファイルを作成してみます。

対象データ

校異源氏物語テキストDBで公開されている以下のXMLファイルを対象とします。

https://kouigenjimonogatari.github.io/tei/01.xml

このファイルでは、以下のtei_all.rngを使用しています。

http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng

そのため、以下のように、挿入可能な多くのタグがサジェストされることがわかります。

生成AIによるrngファイルの作成

以下のようなプロンプトにより、対象とするXMLファイルのタグの使用状況などに応じて、rngファイルを作成します。

##--#-#1234#--#12###....##..XML****使:RXN0MG1L.*使x*mRlN.G×r*×n**g*使**RN使GRNG

結果、以下のrngファイルが作成されました。

<<<?!g/x----r<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<gm-as/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/!d/rlmt<s-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<d-e<<d-e<d-e<d-e<da:mart-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fe/e-fa/z/e-fe/e-fe/e-fe/emvRareail<<<<efil<<<efil<<<efil<<efil<<efil<<<efil<efil<efil<<efil<efil<<efil<<<efil<<<<<<<efil<<efil<efil<<efi:ae<zfil<<efil<<<<efil<<<efmeN2rtfr==nearrrli==nea/rrlinerrrlinee/e/olinee/e/linee/e/e/linee/linee/li==nea/rlinea/olinearolinea/a/elinea/a/a/a/a/a/eli==nearlineaolinea/rli==nd:rc/einea/elinea/a/a/elinea/a/tliarG0>t==em:eeeen==em:--aeeenemeeeeneml<el<en<oeneml<<el<eeneml<el<<el<eeneml<<<eeneml<een==em:-aeenemt<<an<oenem:en<oenemt<<at<<amenem:-at<<at<<at<<at<<at<<amen==em:eenem:n<oenem:-aeen==eodoh<<<<crnem:--amenem:--at<<at<<amenem:---at<<aeenrs2xxdnn>==edfffme==ed:ffmeefffmeeetletlernmeeea/tletlmeeetlea/tlee/lmeeee/e/e/lmeeem/lme==ed:fmeetad/ternmeedfernmeetadttadtpmeed:tad/ttadttadttadttadtpme==edfmeedernmeed:fme==coOotrrrhoeed:pmeed:tadttad/tpmeed:ta/d/txme>i4mmasa==nnoe>==nnofede>nne>nnmeemeeOeee>nnmt<<aeemeee>nnmeemt<aeeml<eee>nnml<el<el<eee>nnmimee>==nnoIde>nnr:a<dtOeee>nnoOeee>nnr:atr:atte>nnodr:a<dtr:atr:atr:atr:atte>==nnoe>nnoOeee>nnode>==nu使crieeeeoO>nnodte>nnodr:atr:a<dtte>nno1cdr:aa<dtte>ollt=m==atcnnnn==atcinonnnatnnnnatexmexmrfOnatetadtxmexmnatexmetdtxmeee/lmnateetletletlmnatexoimn==atcIonnatidtparrfOnatcnrfOnatidtridtrynatcoidtparidtridtridtridtryn==atcnnatcrfOnatconn==amuMcxfffiratcoynatcoidtridtparynatcooid:tpar/nnnna"e==muaaat==mulccaatmaaatmntenteMrtmnr:attentetmntenrattenml<<eeetmnmeemeemeeetmnep<xet==muIcatmboaatiMrtmuaMrtmboaiboai/tmucboaatiboaiboaiboaiboai/t==muatmuMrtmucat==memoetcMmuc/tmucboaiboaati/tmurcbo:daati>t=:ssth===enmmmm>==enmeoumm>enmmm>ent/nt/nonM>entidtr/nt/n>ent/ntitr/nteea/tlmn>entexmexmexmn>entdtepen>==enmFum>enucrabonM>enmmonM>enucbucb>>enmuucrabucbucbucbucb>>==enmm>enmonM>enmum>==ener>/nnneoenmu>>enmuucbucrab>>enmruucorab>"=:yt"===aeeee===aeDdmee=aeee=a>t>trao=aboai>t>t=a>tbai>tnmt<aeeet=antententet=a>il<<etdt===aeme=atuta>urao=aeerao=atutututu=aemtuta>ututututututututu===aee=aerao=aeme===tne>aaa>r=aem=aemtutututa>u=aeemtuhcta>u1"aptT=="mn====="mneie=="m==="mn>n>emr"mnucb>n>"mn>nub>ntetdtxmn>"mnt/nt/nt/n>"mnoea/tli>>=="mne="memymtemr"mn=emr"memytemyt"mneemymtemytemytemytemyt=="mn="mnemr"mne==="at>mmme"mne"mneemytemymt"mnseemtuymt.h=epE==Tet"""==tetsnn""fe"""teaa>eereatutuapeaattuanrattetsea>t>t>teeanmt<aeeo==fetn"seepe>eeset">eegeepeepezetnepeepeepeepeepe==tet"bet>eepetn"==ttaeee>let使npetznepeepesetpnetmpe0使t"L:I==E=atft==e=acgtfei=tpsi=mm=>e=memytmu=mmeytmntitr/n>o=mn>n>n>n=maetdtxmn==a=atsu=nnen>=>u=ag=>r=nne>nne>o=atnnen>nne>nne>nne>nne>==e=abo=a=>"=att==eit===b=atb=aotnne>nnen>e=atnnpeen>"thi/"==I"teae==i"t:Dainl"iuot"ee"s"eepeeb"eepeeabai>tu"eaaac"elnrattea==c"taur"at=a"r"tr"a"at=at=n"taat=aat=at=at=at===x"tod"t">"t1ae==xoi"""""ta""tnaat=at=ag"taatsn=aptb//=="Tiicx==Htietlceftbult==rpr=nne>=lp==ne>=mnub>rs=mmmoe=>titr/nl==sfiUtrfsma"msfsiazpgma"ma"ezitma"mma"ma"ma"ma"==ttidybippitx==tnolps>lit>pietma"ma"m"sitma:t"me:trw>==>EoHst==eeosieoDillrei""eSe"at="iu""a="eattuco"eeedn"bai>t>==iaoRifauetaeuauopohretaeta"ooietIeetnetnetnetn=="eoy"oo""oit==C>nbbeboiboietpetse>eoIiet/aaenT/paw==Inei"==aincoDdeleicSttastsrma"ncbddm"a=meyteub===icpnub>==mcnLoacr=in=rcrnhnia=in=in>nno=iD==io=io=io=io==>xn">dn/>npoC==o>""g"no"no=io=it=gnDo=i/tn=cE/:rw==">am/==dH>:neiseScetliupmpeetdaaliaedv"epeDri"""no"attu==is>ncef"oy"fef>iecp"oy"oye>n"o"""on"on"on"on==t>/y>>>no==n//">>n>>n"os"or"">n"owiy"oIr/y.==>Tdi>==ee>sncDtaDmettStSs=iamtist=aap=ne>ecbatpgd>meyt==li>eGafnUpa"a1c""hnnUunU">xn>plnNlnNunNunN==">">n==t>>/>>nnifnip>>cn3oUpde/=t==Eel==racg"emtetSlht"tp"oteicte"ti""a=seluiuDiepe==emGrca>Rac>c"/>i">Rr>R>m>ar>er>el>el>e==>>t==e>">ta>nao>inRailr"e==Ire=="d"D>stis"teom>m"wne"oar"wel>rm"cD"ttben=ne>=="irpecIItee/>c>IIlIltxgygxgyg==使e==n>icgtrd>Itnaehi==""==>e/ec"c>m"rtt>h>">nti>h"aeea"e>hllsg"a===>lp"GsI"t"">"I""":t"a"a"a"a==n==tvs"tr."tgxlt-//r>s"n"t>"""e/Sibe/bf=n>soeicDrm"e">r"I>e/>>I/>/ie>Xt>Yt>Xt>Yt<t"e">eeo>e=natc>>"c>S/">/>n>toun>i""ycr"s"eeea"/p>Fr>F>>dIriiii/">I>rsrr"gxp.>"t>>>"mnt"l>tU"">h>sf=n>>"n"Dnvvvva/nznpgnU.n:/m>tSo>iaR>>ec""y>"U>"<e<e<e<e:>to""/"Togr>tY"trtrIr">tU>Rz>/I/I/I/Iden>>k>Fr.g"Y>m"yg"">aRh<Lozananananoge#oh-gw//Yt>"e/>rIt/<no:t:t:t:tcezut8rwn<>Y">t>g"taU/endededede<u<roit"ngws/->"e/Up:Ra_eogogogog/m/"ngp?s./aM>t>RsdL:X_cecececeaea/ees>nw1:M"L:o<dX\urururur:n:>_n:ss3.d->/c/oXdm"m"m"m"dtd#\j/t/.0oD/uacX{e/e/e/e/oaozdi/rco"cD.m:u4n>n>n>n>ctco{mwuor>u*edm}ttttuiun4o3cmgm<\noe<aaaamome}nitp/e/.tcn</ttttene_<odua2n<ajaut/piiiin>nX/g\rt0t/:stmaaaoooottXpa.ei0aadoiet:rnnnnaaXato/b1t:ononida>>>>ttXrar1i/idc<ntoomiiarg.lXoou/>anc>oomi/0iMncmpt>unn>/k"tL>ueaim>><aoySmnroe/pu/cetannaiiahnam>t:/gnett>adienmaitotnoatoicejt-inoumiado>nmsmtan>e/oit>nXnoatXontaXgsytXa/pi-t1eoXa.snXr0">.i"j/saopni/items/\d{4}-\d{2}\.json</param>

XMLへの適用

以下のように、作成したrngファイルを適用します。

<<<<???TxxxEmmmsI<lllct--hxevmmemi<eoomlHfrddaneiseetsal<illy=detop"eDinhhehret<=rrnt>slt"eestcei1ff=p>St.==":tl0""h/me"00t/t>11tw>e__pwncc:wcuu/.osstdttpeioouinmmr-g..lc=rr.."nnooUggcr<T""lg/Fct-tt.ni8yyost"ppr/l?eeg1e>==/.>""d0aas"ppd>pplll/iiscccaahtteiimooannt//rxxommnll"""?>schematypens="http://relaxng.org/ns/structure/1.0"?>

結果、例えば以下のように、使用可能なタグが限定して表示されます。

使用可能な属性も限定されています。

さらに属性の値についても、形式に制限が加えられていることがわかります。

VSCodeのScholarly XMLでも同様の制限が加わります。

https://marketplace.visualstudio.com/items?itemName=raffazizzi.sxml

このような作業環境の構築により、作業者ごとの成果物のばらつきが軽減すると考えられます。

まとめ

ボトムアップ的にrngファイルを作成する方法の一例として、参考になりましたら幸いです。