概要

校異源氏物語テキストDBのDTS(Distributed Text Services) APIを更新したので、備忘録です。

背景

DTS(Distributed Text Services) APIは以下で説明されています。

https://distributed-text-services.github.io/specifications/

以下の記事で、DTS APIの作成について紹介しました。

一方、以下を課題としていました。

今回開発したDTS APIも上記のガイドラインに非対応の箇所がある可能性がある点にご注意ください。

そこで、前回作成したAPIをv1とし、今回はdtsVersion1-alphaに従ったv2のAPIを作成します。

API

以下がEntry Endpointです。v1とv2の違いは以下です。

  • v1

https://dts-typescript.vercel.app/api/v1/dts

{}""""""n@@c@daitocovdyloci"plnug:eetma"ceet":txniitta"o"snpEn:""ins::/t""vr:d""1yt///P"saado//pptiaEiisnpn//"titvv,"/r11,vy//1Pdd/ottdisstn//stdn/.oacjcvosuilomglneaelntcdtit""oi,no"n,s",
  • v2

https://dts-typescript.vercel.app/api/v2/dts

{}"""""""@d@@cndctitoaoosdylvcnV"pliute:eegmer"caexs":ttntiiit"a"oo":npEnn:"in""":/t::"hvr/t"2y""at1/P/pp-daaisatipp/:lsnii/p"t//2/h,"v/da,22di"//ts,ddsttt/rssdi//obcncuoautlvmeliedegn-catttt{eii?xoortnne-{{ss??oeirurderv}sci"oec,u,errsce.efg,}ir"tehfu,bd.oiwon/}s"p,ecifications/context/1-alpha1.json",

同様に、各種Endpointの記述を変更しています。

ビューアの改修

以下の記事で、DTSのビューア開発について紹介しました。

そして、以下を課題としていましたが、この点に対応できるように改修しました。

Navigation Endpointを使用していますが、現時点で複数階層には非対応です。

例えば、Navigation Endpointは以下のように記述します。

https://dts-typescript.vercel.app/api/v2/dts/navigation?resource=urn:kouigenjimonogatari.1&down=1

{}"""""}"]@d@@r,mcttie""""""]e{}{}{}{}osyds@@dcncm,,,,nVp"oitooai{}b""""""""""""""""""""tee:udyclvtei@lpci@lpci@lpci@lpcer"r"pulia""]rdteaidteaidteaidteaixs:"c:emegt@c"eyvrteyvrteyvrteyvrtti/e"ecaiti{}:npeeenpeeenpeeenpeee"o"a"":nttoyttelnTtelnTtelnTtelnT:nNp:utiinpe"""][i""tyi""tyi""tyi""ty"air""ooTeS@ccf::"pf::"pf::"pf::"p":v/{nR:nnr"ttii{}i:ei:ei:ei:ehiv:e""e:rytte"1"e"1"e"1"e"1"t"g2ks"::eupee""rC,n:rC,n:rC,n:rC,n:t1a/oo/s"ceTS@c"iu"iu"iu"iup-tduua"""Ct"ytti:tl":tl":tl":tl"saitirp//:iu:prytalpalpalpalp:losgciaatreupe"b,a"b,a"b,a"b,a/pn/ee/pp[ae""ceT5lg6lg7lg8lg/h"nn"viit"C:t"y"ee"ee"ee"eeda,aj,2/i:iu:p,U",U",U",U"i"vivot"rennnns,imd22n[epe""iiiitgot//TSa"C:ttttransddrtg:i""""ito/tteret",,,,bigdsseu"[eluoao//"c,Sitntccn,ttne?auoauredrrmlvru"-eieliects.neg"teo1tca,uxu"?ttrtr,riie-ceoo"sesnn,e=o??ruuirvrrdeinc=sc:euoek=rusounr.ur:cginkeig:o=tekuuhnoirujugnbiie:.mgnkioejoonniu/ojmisgiogpamneetooncangjiroaifigtmi.aaoc1trna&aiotdr.gioi1aow."tnn1,as={r/1&ic"r.o,e1nf{t}&e"rx,etf/}1"-,alpha1.json",

特に、CitationTreeを使って、階層を記述します。ビューアがこの情報を処理するように修正することで、以下のように、レベルごとのナビゲーションボタンが表示されるようにしました。

例えば、「桐壺」のナビゲーションレベル1・引用タイプがpageを選択すると、以下のようにページ毎のテキストがダウンロードできるページに遷移します。

実際に1つ目の5ページ目をダウンロードした結果が以下です。

https://dts-typescript.vercel.app/api/v2/dts/document?resource=urn:kouigenjimonogatari.1&ref=5

スタイルシートを除外したXMLの例は以下です。dts:wrapperを用いて、部分テキストから構成されるTEI/XMLを返却します。

<tex/t<t>b/eo<bxdd/otyt<dd>>sp/ty:><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ps>wplslslslslslslslslslslslslslsl>:rbbebebebebebebebebebebebebebebwa/g/g/g/g/g/g/g/g/g/g/g/g/g/g/rpc>>>>>>>>>>>>>>>apoccccccccccccccperooooooooooooooprrrrrrrrrrrrrrrreerrrrrrrrrrrrrrrxseeeeeeeeeeeeee>mpssssssssssssssl=ppppppppppppppn"==============s#"""""""""""""":zhhhhhhhhhhhhhhdotttttttttttttttnttttttttttttttsepppppppppppppp=_ssssssssssssss"0::::::::::::::h0//////////////t0//////////////t5wwwwwwwwwwwwwwp"33333333333333siiiiiiiiiiiiii:fdddddddddddddd/a............../coooooooooooooowsrrrrrrrrrrrrrr3=ggggggggggggggi"//////////////dhkkkkkkkkkkkkkk.toooooooooooooootuuuuuuuuuuuuuurpiiiiiiiiiiiiiigsgggggggggggggg/:eeeeeeeeeeeeeea/nnnnnnnnnnnnnnp/jjjjjjjjjjjjjjidiiiiiiiiiiiiii/lmmmmmmmmmmmmmmd.ooooooooooooootnnnnnnnnnnnnnnnsdoooooooooooooo#lgggggggggggggg".aaaaaaaaaaaaaa>gttttttttttttttoaaaaaaaaaaaaaa.rrrrrrrrrrrrrrjiiiiiiiiiiiiiip///////////////aaaaaaaaaaaaaaapppppppppppppppiiiiiiiiiiiiiii///////////////iiiiiiiiiiiiiiittttttttttttttieeeeeeeeeeeeeeimmmmmmmmmmmmmmfssssssssssssss///////////////3000000000000004000000000000003000000000000007555555555555556--------------800000000011111612345678901234/..............Rjjjjjjjjjjjjjj0ssssssssssssss0oooooooooooooo0nnnnnnnnnnnnnn0""""""""""""""0>>>>>>>>>>>>>>22/0,0,3445,4706/full/0/default.jpg<<<<<"<</<</<</<<<////s//s//s///ssnssessessesssee=eegeegeegeeegg"gg>gg>gg>ggg>>5>>>>>>>>>"/>

同様に、ナビゲーションレベル2・引用タイプがlineのダウンロード例が以下です。

https://dts-typescript.vercel.app/api/v2/dts/document?resource=urn:kouigenjimonogatari.1&ref=https://w3id.org/kouigenjimonogatari/api/items/0005-01.json

スタイルシートを除外したXMLの例は以下です。dts:wrapperを用いて、部分テキストから構成されるTEI/XMLを返却します。

<T/E<TIt/Ee<tIxxb/e>mto<bxl>dd/otnyt<dd>s>ssty=:es>"wg:hrwtacrtpoapprp:erp/ree/srwxp>wm=wl".nhtste:tidp-tscs:.=/o"/rhwgt3/tinpdss./:1r./g0w/"3kioxdum.ilognresgn:/jdaitpmsi=n"dohtgtsat#tp"as>r:i///awp3ii/di.toermgs//a0p0i0/5d-t0s1#."j>son"></seg>

参考

xml-formatter

Node.jsを用いてXMLを整形する際、以下のライブラリが便利でした。

https://www.npmjs.com/package/xml-formatter

DeepWiki

DeepWikiを使って、ドキュメントの自動生成を行いました。

https://deepwiki.com/nakamura196/dts-typescript

以下、最新のものではありませんが、エンドポイントの一覧などが作成されていました。

まとめ

誤った理解をしている点もあるかもしれませんが、参考になりましたら幸いです。

なお、Collection Endpointのnav変数や、Navigation/Document Endpointのstart/end変数など、まだ対応できていない点があるので、いずれ対応したいと思います。