📌

JPCOARスキーマを用いたxmlファイルのバリデーション

2023/01/19に公開

概要

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

https://github.com/JPCOAR/schema

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

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

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

準備

リポジトリのクローン

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な例

/content/ok.xml
<?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を置くことによるエラー?

/content/ng.xml
<?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を置いてみる

/content/fix.xml
<?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