新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴
[Calendar/When/Ruby/2.APIの使用例/1.前提となる概念/5.オブジェクトの指定] (前:4.時刻系|次:RDF表現) (English)

5.オブジェクトの指定

When.exe Ruby版で管理するオブジェクトの代表的な指定方法を説明します。

参照系リソース一般

When::Parts::Resourceに属するオブジェクトは2.国際化リソース識別子で解説したとおり、IRIでオブジェクトを指定することができます。

http://hosi.org/When/ ...

このパターンの IRI はWhen.exe Ruby版のライブラリ内で定義されているオブジェクトを生成・参照します。

 _c:HinduLuniSolar?note=HinduNote&location=(_co:Indian::Ujjain)&start_month=5&type=SBSA
 _n:HinduNote
 _co:Indian::Ujjain

https://locale.wikipedia.org/wiki/ ...

このパターンの IRI は Wikipedia の当該記事から生成したオブジェクトを生成・参照します。

 https://en.wikipedia.org/wiki/Tokyo (When::Coordinates::Spatial)
 https://en.wikipedia.org/wiki/Tokyo::Tokyo (When::BasicTypes::M17n)

Wikipedia の記事には他言語のローケールコードとその記事の綴りの対応関係が記述されていますので、その情報をもとに多言語対応文字列(When::BasicTypes::M17n)を生成します。

また、当該記事が都市を記述したものであればその所在経緯度をもとに空間位置(When::Coordinates::Spatial)を生成します。

詳細はブログ記事「多言語対応文字列とWikipedia」(2014-03-01,2014-03-07)をご覧ください。

その他

以上のパターンに当てはまらない IRI は、IRIをURLとみなして XML または ICS 形式のファイルを読み出してオブジェクトを生成・参照します。

 https://raw.github.com/suchowan/when_exe/master/test/examples/JapanHolidays.ics

https:// のようなプロトコル部を持たないものはローカルファイルとみなされます。

日付

When.exe Standard Representation と 暦法のIRIの組み合わせによる指定

When::TM::CalDateクラスとそのサブクラスのオブジェクトはCalendar/When/Rubyの時間スキーマの節で解説したとおり、When.exe Standard Representation^^暦法のIRIのプレフィクスを除いた部分という形式で指定することができます。暦法の指定が省略された場合はグレゴリオ暦とみなします。

 1936-07<13-^^HinduLuniSolar?note=HinduNote&location=(_co:Indian::Ujjain)&start_month=5&type=SBSA

また、記号“^^”の使用をさける暦法のIRIのプレフィクスを除いた部分(When.exe Standard Representation) という表現も可能です。

 HinduLuniSolar?note=HinduNote&location=(_co:Indian::Ujjain)&start_month=5&type=SBSA(1936-07<13-)

暦法のIRIの末尾が数字の場合“_”を付加して、次項に説明する年号を含む表現と区別します。

 HinduLuniSolar?note=HinduNote&location=(_co:Indian::Ujjain)&start_month=5_(1936-07<13-)

年号を含む When.exe Standard Representationによる指定

暦年代は自身が使用する暦法と関連づけられている(→13.暦及び時計)ので、年号を含むWhen.exe Standard RepresentationによってWhen::TM::CalDateクラスとそのサブクラスのオブジェクトを指定する場合、暦法のIRIの指定は不要です。

hosi.orgの暦法・暦年代選択ツリービューの東アジア/過去/日本(日本書紀)を確認すると、<天智>と<天武>を選択して開く Form の日付表現は下記のようになっています。

 日本(日本書紀)::<天智>1(662)-1-1
 <天武>1(672)-1-1

_e:Japanese も _e:NihonShoki も<天智>元年は662年です。したがって両者を区別するには“日本(日本書紀)::”の指定まで必要です。

一方、弘文天皇の扱いが異なるため(→天武天皇元年)、<天武>元年は _e:Japanese では673年、_e:NihonShokiでは672年です。曖昧性がないため、“日本(日本書紀)::”の指定がなくとも“<天武>1(672)-1-1”の暦年代は _e:NihonShoki 配下であると特定できます。

この事情が Form の日付表現の差として現れています。

剰余類などを含む When.exe Standard Representationによる指定

When::Coordinates::Residueクラスのオブジェクトは剰余類を表現する文字列やその省略形により指定することができます。

 p Residue('Monday') #=> _co:Common::Week::Monday
 p Residue('Mo')     #=> _co:Common::Week::Monday

なお、day_of_weekメソッド は Residue メソッドの別名です(→5.剰余類)

この応用として下記のような指定ができます。

 p when?('2014-8-{SA}')                  #=> 2014-08-02 2014年8月第1土曜日
 p when?('2014-8-{SA:-1}')               #=> 2014-08-30 2014年8月最終土曜日

干支を用いることも可能です。

 p when?('2014-{甲子&TH}')               #=> 2014-08-21 2014年最初の甲子かつ木曜
 p when?('{甲午}.8.{甲子}', :abbr=>2000) #=> 2014-08-21 2000年以降最初の甲午年8月甲子
 p when?('平成{甲午}.8.{甲子}')          #=> 平成26(2014).08.21 平成甲午年8月甲子

時間帯

When::Parts::Timezoneクラスのオブジェクトは Timezone に標準的な“大陸/都市”形式により指定することができます。

(TZInfo gem がインストールされている必要があります)

  When::Parts::Timezone['America/New_York']

When::Parts::TimezoneクラスのオブジェクトはIRIを持つリソースとしては管理されません。

空間位置

When.where?(location) または When::Coordinates::Spatial::Range[location] の location に下記の書式の文字列を指定すると、 When::Cordinartes::Spatial(点位置の場合) または When::Coordinates::Spatial::Range(矩形(あるいは直方体)範囲の場合)を取得できます。

  ddd.mmss 経度の度分秒, X は E(東経)またはW(西経)
   dd.mmss 緯度の度分秒, Y は N(北緯)またはS(南緯)
   ±hh 高度(単位 m) … 省略可

  ±ddd.ddd 経度の度, +(東経)または-(西経)
   ±dd.ddd 緯度の度, +(北緯)または-(南緯)
   ±hh 高度(単位 m) … 省略可

  都道府県名  または
  都道府県名市区町村名  または
  都道府県名市区町村名大字町丁目名
  ただし、
    町村 ― 郡名を省略できる。
    市   ― 政令市か否かに関わらず、都道府県名を省略できる。また区大字町丁目名が続かない場合「市」も省略できる。

  始点を南西下隅、終点を東北上隅とします。

(3)の書式を使うには国土交通省提供の「大字・町丁目レベル位置参照情報」ファイル(01_201x.csv<北海道>~47_201x.csv<沖縄>)を あらかじめ別途ダウンロードして、ディレクトリ"#{When::Parts::Resource.root_dir}/data/geolocation/japanese/"配下に配置しておく必要があります。

When::Parts::Resource.root_dir は When._setup_ メソッドなどで設定可能です。