本ライブラリで String に替わって用いているサブクラス When::BasicTypes::M17nは、多言語対応文字列です。諸々の Locale に対応した文字列と参照を保持しています。
参照を保持するのは、その多言語対応文字列が表現する概念を曖昧性なく特定するためです。 これは、根拠とする dictionary, thesaurus or authority をWhen::BasicTypes::Codeが明示するのと同じ思想です。
→関連クラス図 02.BasicTypes
Resource('_m:Calendar::Month::March') はWhen::BasicTypes::M17nクラスのオブジェクトです。
loc | #translate(loc) | #reference(loc) |
'ja' | '3月' | https://ja.wikipedia.org/wiki/3%E6%9C%88 |
'en' | 'March' | https://en.wikipedia.org/wiki/March |
translateメソッドは 演算子 '/' に aliasされるので、Resource('_m:Calendar::Month::March').translate('ja') は Resource('_m:Calendar::Month::March') / 'ja' と書いても同じです。
多言語対応文字列を色々なクラスのオブジェクトからなる階層の中で定義することもできます。
例えば http://example.org/ResidueTerms に週日を剰余類When::Coordinates::Residue で表現する下記の内容のファイル(*)があったとします。
BEGIN:B:M17N NAMESPACE:[en_ns=https://en.wikipedia.org/wiki/, ja_ns=https://ja.wikipedia.org/wiki/] LOCALE:[=en_ns:, ja=ja_ns:] LABELS:[ResidueTerms] BEGIN:CO:RESIDUE LABEL:[Week, 週] DIVISOR:7 BEGIN:CO:RESIDUE LABEL:[Monday,月曜日] REMAINDER:0 END:CO:RESIDUE END:CO:RESIDUE END:B:M17N
これを読み込むと、表のようなオブジェクトが生成されます。
IRI | class | label |
http://example.org/ResidueTerms | When::BasicTypes::M17n | ResidueTerms |
http://example.org/ResidueTerms::Week | When::Coordinates::Residue | Week |
http://example.org/ResidueTerms::Week::Week | When::BasicTypes::M17n | Week |
http://example.org/ResidueTerms::Week::Monday | When::Coordinates::Residue | Monday |
http://example.org/ResidueTerms::Week::Monday::Monday | When::BasicTypes::M17n | Monday |
(*)RFC5545に対応したことを謳うには iCalendarのファイル形式への対応は必須でした。そこで、開発規模を抑えるために iCalendar以外のオブジェクトの外部表現にもiCalendarのファイル形式を流用することにしました。 XML や RDF についても調査しましたが、微妙に異なるバリエーションの形式が複数存在しているようなので、 現時点では実験的に When::Coordinates::SpatialをこんなXMLで読み込めるようにしてみた以外は、取り入れていません。 ただし iCalendarのファイル形式を流用する際、namespace の定義など将来のXML対応時に必要になるような拡張をあらかじめ行っています。