📚

RELAX NGとSchematron

2024/05/16に公開

概要

oXygen XML EditorでTEI/XMLを作成すると、以下のようなテンプレートが作成されます。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml"
	schematypens="http://purl.oclc.org/dsdl/schematron"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
  <teiHeader>
      <fileDesc>
         <titleStmt>
            <title>Title</title>
         </titleStmt>
         <publicationStmt>
            <p>Publication Information</p>
         </publicationStmt>
         <sourceDesc>
            <p>Information about the source</p>
         </sourceDesc>
      </fileDesc>
  </teiHeader>
  <text>
      <body>
         <p>Some text here.</p>
      </body>
  </text>
</TEI>

この時、以下の違いが気になりましたので、GPT4への問い合わせ結果を共有します。

<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml"
	schematypens="http://purl.oclc.org/dsdl/schematron"?>

回答

2行目と3行目の違いは、schematypens属性に指定されている名前空間です。以下に詳細を説明します。

2行目

<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?>
  • href: http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng
  • type: application/xml
  • schematypens: http://relaxng.org/ns/structure/1.0

この行は、TEI (Text Encoding Initiative) ドキュメントに対して RELAX NG スキーマを指定しています。RELAX NG はXML文書の構造を検証するためのスキーマ言語です。

3行目

<?xml-model href="http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
  • href: http://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng
  • type: application/xml
  • schematypens: http://purl.oclc.org/dsdl/schematron

この行は、同じTEIドキュメントに対して Schematron スキーマを指定しています。Schematron はXML文書の内容を検証するためのスキーマ言語で、特にビジネスルールや他の複雑な条件の検証に使われます。

違いのまとめ

  • 名前空間: 2行目は http://relaxng.org/ns/structure/1.0 を使っており、RELAX NGスキーマを指します。一方、3行目は http://purl.oclc.org/dsdl/schematron を使っており、Schematronスキーマを指します。
  • 検証方法: 2行目のRELAX NGはXMLの構造を検証しますが、3行目のSchematronはXMLの内容やビジネスルールなどのより複雑な条件を検証します。

したがって、2行目は構造検証用、3行目は内容検証用のスキーマを指定しているという違いがあります。

参考

以下の記事も参考にしてください。

https://zenn.dev/nakamura196/articles/21d533b2590a8c

まとめ

参考になりましたら幸いです。

Discussion