JPCOARスキーマを用いたxmlファイルのバリデーション
概要
JPCOARスキーマでは、XMLスキーマ定義を以下のリポジトリで公開してくださっています。スキーマの作成およびデータの公開を行っていただき、ありがとうございます。
本記事では、上記のスキーマを使ったxmlファイルのバリデーションを試してみたので、その備忘録です。(今回のようなバリデーションは初めてのため、不正確な用語や情報を含む可能性があります。申し訳ありません。)
Google Colabのノートブックも用意しました。
準備
リポジトリのクローン
cd /content/
git clone https://github.com/JPCOAR/schema.git
ライブラリのインストール
pip install xsd-validator
xsdファイルのロード(v1)
from xsd_validator import XsdValidator
validator = XsdValidator('/content/schema/1.0/jpcoar_scm.xsd')
v1を試す
OKな例
<?xml version="1.0" ?>
<jpcoar:jpcoar
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:jpcoar="https://github.com/JPCOAR/schema/blob/master/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
<dc:title>JPCOARスキーマを用いたxmlファイルのバリデーション</dc:title>
<dc:type rdf:resource="http://purl.org/coar/resource_type/c_6501">article</dc:type>
</jpcoar:jpcoar>
validator.assert_valid("/content/ok.xml")
# エラーなし
NGな例
dc:type
の後にjpcoar:subject
を置くことによるエラー?
<?xml version="1.0" ?>
<jpcoar:jpcoar
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:jpcoar="https://github.com/JPCOAR/schema/blob/master/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
<dc:title>JPCOARスキーマを用いたxmlファイルのバリデーション</dc:title>
<dc:type rdf:resource="http://purl.org/coar/resource_type/c_6501">article</dc:type>
<jpcoar:subject subjectScheme="Other">テスト</jpcoar:subject>
</jpcoar:jpcoar>
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
を置いてみる
<?xml version="1.0" ?>
<jpcoar:jpcoar
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:jpcoar="https://github.com/JPCOAR/schema/blob/master/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://github.com/JPCOAR/schema/blob/master/1.0/jpcoar_scm.xsd">
<dc:title>JPCOARスキーマを用いたxmlファイルのバリデーション</dc:title>
<jpcoar:subject subjectScheme="Other">テスト</jpcoar:subject>
<dc:type rdf:resource="http://purl.org/coar/resource_type/c_6501">article</dc:type>
</jpcoar:jpcoar>
validator.assert_valid("/content/fix.xml")
# エラーなし
まとめ
エラーメッセージに基づき、xmlファイルを修正することができました。
Google Colabのノートブックでは、JPCOARスキーマVersion 2.0を対象としたバリデーション例も紹介しています。
不正確な内容を含んでいる可能性もありますが、xmlファイルのバリデーションの参考になりましたらい幸いです。
Discussion