🙌

Romaを使ってプロジェクトに応じたタグに使用する属性を限定する

2024/10/28に公開

概要

Romaを使ってプロジェクトに応じたタグに使用する属性を限定する方法に関する備忘録です。

背景

以下の記事で、Romaを使ってプロジェクトに応じたタグを限定する方法を記載しました。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

今回はこの延長で、各タグで使用する属性のカスタマイズを行います。

ユースケース

ここでは、一例として、persNameで使用可能な属性を限定してみます。

デフォルト(tei_all.rng)をOxygen XML Editorで用いた際、以下のように、persNameタグで使用可能な属性として、多くの選択肢が提示されていることがわかります。

一方、本記事で説明するカスタマイズしたrngファイルを使用した場合、以下のように、5つの属性のみが利用可能となっていることがわかります。

このようにプロジェクト毎に使用可能なタグや属性を限定することで、入力者の負担軽減や、Validationの効率化が期待できます。

手順

以下の記事を参考に、Romaで新規にODDファイルを作成するか、既存のODDファイルを登録した状態から開始します。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

そして、今回対象とするpersNameにチェックが入っていることを確認します。

次に、上記のpersNameのリンクをクリックすると、以下の画面に遷移します。

そして、属性をクリックします。このページにおいて、使用する属性を限定することができます。

以下では、少しわかりにくいですが、key属性は使用するものとして残しており、xml:lang属性は使用しないものとして除外している例です。

その他、新規の属性の作成や、

既存のものからインポート(用語が正しいか自身がありません)することもできました。

このカスタマイズ内容を保存できるように、ダウンロード > 「ODDとしてカスタマイズ」により、oddファイルをダウンロードしておきます。また、「RELAX NGスキーマ」などを選択して、実際にTEI/XMLで使用するファイルをダウンロードします。

詳細は以下を参考にしてください。

https://zenn.dev/nakamura196/articles/287e392da1e6ab

参考:説明文のカスタマイズ

Roma

RELAX NG スキーマ

<define name="tei_persName">
   <element name="persName">
      <a:documentation xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0">(personal name) 日本語によるカスタマイズです。 [14.2.1. Personal Names]</a:documentation>
      <ref name="tei_macro.phraseSeq"/>
      <pattern xmlns="http://purl.oclc.org/dsdl/schematron"
         xmlns:rng="http://relaxng.org/ns/structure/1.0" id="tei_hi_dns-persName-calendar-check-persName-constraint-rule-23">
         <sch:rule xmlns:sch="http://purl.oclc.org/dsdl/schematron"
            xmlns:xi="http://www.w3.org/2001/XInclude"
            xmlns="http://www.tei-c.org/ns/1.0" context="tei:*[@calendar]">
            <sch:assert test="string-length( normalize-space(.) ) gt 0"> @calendar indicates one or more
                        systems or calendars to which the date represented by the content of this element belongs,
                        but this <sch:name/>
 element has no textual content.</sch:assert>
         </sch:rule>
      </pattern>
      <ref name="tei_att.canonical.attribute.key"/>
      <ref name="tei_att.global.attribute.xmlid"/>
      <ref name="tei_att.global.attribute.n"/>
      <ref name="tei_att.global.linking.attribute.corresp"/>
      <ref name="tei_att.global.analytic.attribute.ana"/>
      <empty/>
   </element>
</define>

LEAF Writer

まとめ

TEI/XMLの導入にあたり、参考になりましたら幸いです。

Discussion