

[1] [[.//1]]

[2] 
- 関係
[QN[dis:derivedFrom] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]]
([CODE(file)[DISCore.dis]] で定義) の性質
-- [CODE(math)[[VAR[R]] [QN[dis:derivedFrom] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[S]] [QN[dis:derivedFrom] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]] ⇒ [VAR[R]] [QN[dis:derivedFrom] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]]]]
(推移性)
- 関係
[QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]]
([CODE(file)[DISCore.dis]] で定義) の性質
-- [CODE(math)[[VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[S]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]] ⇒ [VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]]]]
(推移性)
-- [CODE(math)[[VAR[r]] ∈ [VAR[R]] ∧ [VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ⇒ [VAR[r]] ∈ [VAR[S]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]]]]
の時、 [CODE(math)[[VAR[R]]]] の性質 [CODE(math)[[VAR[p]]]]
が [CODE(math)[[VAR[S]]]] にも当てはまるかどうかは一概には言えない。
逆に、 [CODE(math)[[VAR[S]]]] の性質 [CODE(math)[[VAR[p']]]]
が [CODE(math)[[VAR[R]]]] にも当てはまるかどうかも一概には言えない。
- 関係
[QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]]
([CODE(file)[DISCore.dis]] で定義) の性質
-- [CODE(math)[[VAR[R]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[S]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]] ⇒ [VAR[R]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[T]]]]
(推移性)
-- [CODE(math)[[VAR[r]] ∈ [VAR[R]] ∧ [VAR[R]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ⇒ [VAR[r]] ∈ [VAR[S]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]]]]
の時、 [CODE(math)[[VAR[R]]]] の性質 [CODE(math)[[VAR[p]]]]
が [CODE(math)[[VAR[S]]]] にも当てはまるかどうかは一概には言えない。
逆に、 [CODE(math)[[VAR[S]]]] の性質 [CODE(math)[[VAR[p']]]]
が [CODE(math)[[VAR[R]]]] にも当てはまるかどうかも一概には言えない。
- 関係
[QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]]
([CODE(file)[DISCore.dis]] で定義) の性質
-- 推移性が成り立つかどうかは、現時点では未定義。
-- [CODE(math)[[VAR[r]] ∈ [VAR[R]] ∧ [VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]] ⇒ [VAR[r]] ∈ [VAR[I]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[S]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]] ⇒ [VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[S]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]]]] の時、一般には [CODE(math)[[VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]]]] では''ない''。
-- [CODE(math)[[VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[S]] ∧ [VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]] ⇒ [VAR[S]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]]]]
の時、 [CODE(math)[[VAR[I]]]] に対する操作
(あるいはメッセージ) [CODE(math)[[VAR[m]]]]
が [CODE(math)[[VAR[R]]]] にも適用できる。
逆に [CODE(math)[[VAR[R]]]] に対する操作 [CODE(math)[[VAR[m']]]]
が [CODE(math)[I]] に適用できる操作とは限らない。
-- [CODE(math)[[VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]] ∧ [VAR[I]] [QN[dis:ISA] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[J]] ⇒ [VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[J]]]]
-- [CODE(math)[[VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[I]] ∧ [VAR[I]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[J]]]] の時、 [CODE(math)[[VAR[R]] [QN[dis:Implement] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[J]]]] とは限ら''ない''。
- [CODE(math)[[VAR[R]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]]]]
とする時、
-- [CODE(math)[[VAR[X]] [VAR[R]] [VAR[Y]] ∧ [VAR[Y]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[Z]]]] なら、 [CODE(math)[[VAR[X]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[Z]]]]
だが、一般には [CODE(math)[[VAR[X]] [VAR[R]] [VAR[Z]]]] とは限ら''ない''。
-- [CODE(math)[[VAR[X]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[Y]] ∧ [VAR[Y]] [VAR[R]] [VAR[Z]]]] なら、 [CODE(math)[[VAR[X]] [QN[dis:subsetOf] [http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--]] [VAR[Z]]]]
だが、一般には [CODE(math)[[VAR[X]] [VAR[R]] [VAR[Z]]]] とは限ら''ない''。

[3]
というわけでこの定義・定理を元に
[CODE(file)[lib/manakai/dis.pl]] の
[CODE(perl)[dis_load_classdef_element]] と
[CODE(perl)[dis_uri_ctype_match]] を修正しました。
今まで処理の大部分が [CODE(perl)[dis_uri_ctype_match]] の無駄な継承鎖探索に費やされていたので、かなり実行速度が改善されました (がまだ遅い)。
([[名無しさん]] [WEAK[2005-02-16 04:18:01 +00:00]])

[4]
さて、現在メソッド名・属性名は camelCase になっていますが、 Perl 的ではないので
underscore_style に変えます。
cdis2pm.pl の出力だけを変えるので、
dis ファイル内はソース・コードも含めて修正不要です。
外部で修正が必要なのは今のところ作りかけの DOM TS
のコードだけ。

([[名無しさん]] [WEAK[2005-02-16 07:41:43 +00:00]])

[5]
domCamelCaseMethodName から perl_underscore_style_function_name への変換方法:
= すべて大文字の名前は、すべて小文字に。
= 大文字の連続で終わる場合は、その部分を [CODE[_]] + 小文字化。
= 大文字が2文字以上続く場合は、
2文字目以降を小文字化。最後の大文字の手前に [CODE[_]] を挿入。
= 大文字をすべて [CODE[_]] と小文字に。

これで、 [CODE(DOMa)[[[URL]]]] 
([CODE(DOMi)[[[HTMLDocument]]]]) は [CODE(perl)[url]] に、
[CODE(DOMm)[[[createLSParser]]]]
([CODE(DOMi)[[[DOMImplementationLS]]]]) は [CODE(perl)[create_ls_parser]] に、
[CODE(DOMm)[[[getAttributeNS]]]]
([CODE(DOMi)[[[Element]]]]) は
[CODE(perl)[get_attribute_ns]] に、
[CODE(DOMa)[[[localName]]]]
([CODE(DOMi)[[[Node]]]]) は
[CODE(perl)[local_name]] に、
[CODE(DOMa)[[[href]]]] ([CODE(DOMi)[[[HTMLAnchorElement]]]])
は [CODE(perl)[href]] になります。
DOM で規定されているメソッド・属性の名前はすべてカバーできるはずです。

[[Gecko]] 拡張の [CODE(DOMa)[MozBinding]]
のような名前は [CODE(perl)[_moz_binding]] になります。
([[名無しさん]] [WEAK[2005-02-16 07:48:17 +00:00]])

[6]
なお、内部用のメソッド・属性は以前から
dis での名前の最初に [CODE[_]] をつけることにしていましたので、
理論上は [SAMP[CamelCase]] のような名前の公開メソッドと [SAMP[camelCase]] のような名前の私的メソッドがあると衝突してしまいます。
現実には運用でカバーできるでしょう。できなければ私的名の [CODE[_]] を増やすことにします。

([[名無しさん]] [WEAK[2005-02-16 07:52:59 +00:00]])

[7]
実際に >>5 の方法を適用してみると、
内部用の属性名で数字が入ったもの
([SAMP[valueUTF16BE]])
にうまく対応できませんでした。そこで大文字のところで適宜数字も認めることにしました。
(先の例は [SAMP(perl)[value_utf16be]] になります。)
なお、>>5 の方法の[Q[大文字]]をすべて[Q[大文字・数字]]に置き換えてしまうと
[SAMP[name2]] が [SAMP[name_2]]
になってしまいます。今のところ DOM
にも manakai にもこのような形で数字が入ったメソッド名や属性名はないようなので、
気にしないことにしました。
([[名無しさん]] [WEAK[2005-02-16 08:17:05 +00:00]])

[8]
>>7 この問題が起こりそうなのは [[CSS]]
の [CODE(CSS)[[[panose-1]]]] 記述子ですが、
DOM水準2 CSS では記述子に対応する特性を用意していない模様です。

他に問題となるのは Microsoft の
[CODE(CSS)[[[scrollbar-3dlight-color]]]]
特性で、 IE の DOM では
[CODE(DOMa)[[[scrollbar3dLightColor]]]]
という名前になっています。ということは >>7 の動作でよいのかな。
(でもなんで [Q[Light]] を capitalize するんだよ?)
([[名無しさん]] [WEAK[2005-02-16 08:30:26 +00:00]])

[9]
[[SVG]] に [CODE(DOMa)[[[x1]]]] 属性他があるのを発見してしまった。。。
([[名無しさん]] [WEAK[2005-02-16 08:35:25 +00:00]])

[10]
今のアルゴリズム [SRC[CURRENT]]
では [SAMP[rfc3339Date]] が 
[SAMP[rfc_3_3_3_9_date]]
になることがわかりました。

- [CURRENT]
[CITE[messaging/manakai/lib/Message/Util/DIS.dis - view - 1.26]] <http://suika.fam.cx/gate/cvs/messaging/manakai/lib/Message/Util/DIS.dis?rev=1.26&content-type=text/vnd.viewcvs-markup>

([[名無しさん]] [WEAK[2005-04-30 13:14:19 +00:00]])


[11]
[[manakai//Issue//1//9]] に移動。
([[名無しさん]] [WEAK[2005-04-30 13:28:40 +00:00]])

