概要

JPCOARスキーマでは、XMLスキーマ定義を以下のリポジトリで公開してくださっています。スキーマの作成およびデータの公開を行っていただき、ありがとうございます。

https://github.com/JPCOAR/schema

本記事では、上記のスキーマを使ったxmlファイルのバリデーションを試してみたので、その備忘録です。(今回のようなバリデーションは初めてのため、不正確な用語や情報を含む可能性があります。申し訳ありません。)

Google Colabのノートブックも用意しました。

https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/JPCOARスキーマを用いたxmlファイルのバリデーション.ipynb

準備

リポジトリのクローン

cgdit/ccolnotneenth/ttps://github.com/JPCOAR/schema.git

ライブラリのインストール

pipinstallxsd-validator

xsdファイルのロード(v1)

fvraolmidxastdo_rva=liXdsadtVoarliidmaptoorrt('X/scdoVnatleindta/tsocrhema/1.0/jpcoar_scm.xsd')

v1を試す

OKな例

<<?j<</xpxxxxddjmcmmmmccplollll::cannnnttovrssssiyae:::::tprrjdjrxle:spcpdsejic=cfi>rpoo"o==Jdcnaha""Pfo=rtrhhC:a"t=ttOrr1p"ttAe>.:hppRs0/t::o"/t/upp/r?uswwc>r:wwelww=..."gwwhri33xtgt..mt/hoolpdurr:cbgg//.///ec12plo90uem90rm/91leJ//.nP0XotC2MrsO/Lg/A2S/1R2c<c./-h/o1sreda/cdmcr"hfa:/e--trmsiieaynts/nslobtteulaa>roxncb-ce/ne_ms"ta#ys"xptseei/r:c/s_1c6.h50e0/m1"a"L>oacrattiicolne=<"/hdtct:ptsy:p/e/>github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
v#alidator.assert_valid("/content/ok.xml")

NGな例

dc:typeの後にjpcoar:subjectを置くことによるエラー?

<<?j<</xpxxxxddjmcmmmmccplollll::cannnnttovrssssiyae:::::tprrjdjrxle<:spcpdsejjic=cfi>rppoo"o==Jdccnaha""Pfoo=rtrhhC:aa"t=ttOrrr1p"ttAe:>.:hppRss0/t::ou"/t/ubpp/rj?uswwce>r:wweclww=t..."gwwhsri33xtugt..mtb/hoolpjdurr:ecbgg/c/.///tec12pSlo90ucem90rhm/91leeJ//.mnP0XoetC2Mr=sO/Lg"/A2S/O1R2c<ct./-h/oh1sredae/cdmcrr"hfa:/"e--tr>msiieaynts/nslobtteu<laa>r/oxncjb-cep/ne_cms"toa#yas"xprtse:ei/sr:cu/s_b1c6j.h5e0e0c/m1t"a">L>oacrattiicolne=<"/hdtct:ptsy:p/e/>github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
validator.assert_valid("/content/ng.xml")

XsdValidationErrorWithInfo: /content/ng.xml: line 9 column 41: cvc-complex-type.2.4.a: Invalid content was found starting with element ‘{"https://github.com/JPCOAR/schema/blob/master/1.0/":subject}’. One of ‘{"https://schema.datacite.org/meta/kernel-4/":version, “http://namespace.openaire.eu/schema/oaire/":version, “https://github.com/JPCOAR/schema/blob/master/1.0/":identifier, “https://github.com/JPCOAR/schema/blob/master/1.0/":identifierRegistration, “https://github.com/JPCOAR/schema/blob/master/1.0/":relation, “http://purl.org/dc/terms/":temporal, “https://schema.datacite.org/meta/kernel-4/":geoLocation, “https://github.com/JPCOAR/schema/blob/master/1.0/":fundingReference, “https://github.com/JPCOAR/schema/blob/master/1.0/":sourceIdentifier, “https://github.com/JPCOAR/schema/blob/master/1.0/":sourceTitle, “https://github.com/JPCOAR/schema/blob/master/1.0/":volume, “https://github.com/JPCOAR/schema/blob/master/1.0/":issue, “https://github.com/JPCOAR/schema/blob/master/1.0/":numPages, “https://github.com/JPCOAR/schema/blob/master/1.0/":pageStart, “https://github.com/JPCOAR/schema/blob/master/1.0/":pageEnd, “http://ndl.go.jp/dcndl/terms/":dissertationNumber, “http://ndl.go.jp/dcndl/terms/":degreeName, “http://ndl.go.jp/dcndl/terms/":dateGranted, “https://github.com/JPCOAR/schema/blob/master/1.0/":degreeGrantor, “https://github.com/JPCOAR/schema/blob/master/1.0/":conference, “https://github.com/JPCOAR/schema/blob/master/1.0/":file}’ is expected.

修正

jpcoar:subjectの後にdc:typeを置いてみる

<<?j<<</xpxxxxdjdjmcmmmmcpcplollll:c:cannnntotovrssssiayae:::::trprrjdjrxl:e:spcpdsesjic=cfi>urpoo"o==Jbdcnaha""Pjfo=rtrhhCe:a"t=ttOcrr1p"ttAte>.:hppRs0/t::so"/t/uupp/br?uswwjc>r:wweelwwc=...t"gwwShri33xctgt..mht/hoolepdurrm:cbgge//.//=/ec12"plo90Ouem90trm/91hleJ//e.nP0XrotC2M"rsO/L>g/A2S/1R2c<c./-h/o1sred<a/cdmc/r"hfa:j/e--tprmsiiceayntos/nslaobtterulaa>:roxnscb-cue/neb_ms"jta#eys"xcptsteei>/r:c/s_1c6.h50e0/m1"a"L>oacrattiicolne=<"/hdtct:ptsy:p/e/>github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
v#alidator.assert_valid("/content/fix.xml")

まとめ

エラーメッセージに基づき、xmlファイルを修正することができました。

Google Colabのノートブックでは、JPCOARスキーマVersion 2.0を対象としたバリデーション例も紹介しています。

不正確な内容を含んでいる可能性もありますが、xmlファイルのバリデーションの参考になりましたらい幸いです。