dis:derivedFrom
(DISCore.dis
で定義) の性質dis:subsetOf
(DISCore.dis
で定義) の性質R dis:subsetOf
S ∧ S dis:subsetOf
T ⇒ R dis:subsetOf
T
(推移性)r ∈ R ∧ R dis:subsetOf
S ⇒ r ∈ S
R dis:subsetOf
S
の時、 R
の性質 p
が S
にも当てはまるかどうかは一概には言えない。
逆に、 S
の性質 p'
が R
にも当てはまるかどうかも一概には言えない。dis:ISA
(DISCore.dis
で定義) の性質R dis:ISA
S ∧ S dis:ISA
T ⇒ R dis:ISA
T
(推移性)r ∈ R ∧ R dis:ISA
S ⇒ r ∈ S
R dis:ISA
S
の時、 R
の性質 p
が S
にも当てはまるかどうかは一概には言えない。
逆に、 S
の性質 p'
が R
にも当てはまるかどうかも一概には言えない。dis:Implement
(DISCore.dis
で定義) の性質r ∈ R ∧ R dis:Implement
I ⇒ r ∈ I
R dis:ISA
S ∧ S dis:Implement
I ⇒ R dis:Implement
I
R dis:subsetOf
S ∧ S dis:Implement
I
の時、一般には R dis:Implement
I
ではない。R dis:subsetOf
S ∧ R dis:Implement
I ⇒ S dis:Implement
I
R dis:Implement
I
の時、 I
に対する操作
(あるいはメッセージ) m
が R
にも適用できる。
逆に R
に対する操作 m'
が I
に適用できる操作とは限らない。R dis:Implement
I ∧ I dis:ISA
J ⇒ R dis:Implement
J
R dis:Implement
I ∧ I dis:subsetOf
J
の時、 R dis:Implement
J
とは限らない。R dis:subsetOf
dis:subsetOf
とする時、X R Y ∧ Y dis:subsetOf
Z
なら、 X dis:subsetOf
Z
だが、一般には X R Z
とは限らない。X dis:subsetOf
Y ∧ Y R Z
なら、 X dis:subsetOf
Z
だが、一般には X R Z
とは限らない。[3]
というわけでこの定義・定理を元に
lib/manakai/dis.pl
の
dis_load_classdef_element
と
dis_uri_ctype_match
を修正しました。
今まで処理の大部分が dis_uri_ctype_match
の無駄な継承鎖探索に費やされていたので、かなり実行速度が改善されました (がまだ遅い)。
(名無しさん 2005-02-16 04:18:01 +00:00)
[4] さて、現在メソッド名・属性名は camelCase になっていますが、 Perl 的ではないので underscore_style に変えます。 cdis2pm.pl の出力だけを変えるので、 dis ファイル内はソース・コードも含めて修正不要です。 外部で修正が必要なのは今のところ作りかけの DOM TS のコードだけ。
(名無しさん 2005-02-16 07:41:43 +00:00)
[5] domCamelCaseMethodName から perl_underscore_style_function_name への変換方法:
_
+ 小文字化。_
を挿入。_
と小文字に。これで、 URL
(HTMLDocument
) は url
に、
createLSParser
(DOMImplementationLS
) は create_ls_parser
に、
getAttributeNS
(Element
) は
get_attribute_ns
に、
localName
(Node
) は
local_name
に、
href
(HTMLAnchorElement
)
は href
になります。
DOM で規定されているメソッド・属性の名前はすべてカバーできるはずです。
Gecko 拡張の MozBinding
のような名前は _moz_binding
になります。
(名無しさん 2005-02-16 07:48:17 +00:00)
[6]
なお、内部用のメソッド・属性は以前から
dis での名前の最初に _
をつけることにしていましたので、
理論上は CamelCase のような名前の公開メソッドと camelCase のような名前の私的メソッドがあると衝突してしまいます。
現実には運用でカバーできるでしょう。できなければ私的名の _
を増やすことにします。
(名無しさん 2005-02-16 07:52:59 +00:00)
[7]
実際に >>5 の方法を適用してみると、
内部用の属性名で数字が入ったもの
(valueUTF16BE)
にうまく対応できませんでした。そこで大文字のところで適宜数字も認めることにしました。
(先の例は value_utf16be になります。)
なお、>>5 の方法の大文字
をすべて大文字・数字
に置き換えてしまうと
name2 が name_2
になってしまいます。今のところ DOM
にも manakai にもこのような形で数字が入ったメソッド名や属性名はないようなので、
気にしないことにしました。
(名無しさん 2005-02-16 08:17:05 +00:00)
[8]
>>7 この問題が起こりそうなのは CSS
の panose-1
記述子ですが、
DOM水準2 CSS では記述子に対応する特性を用意していない模様です。
他に問題となるのは Microsoft の
scrollbar-3dlight-color
特性で、 IE の DOM では
scrollbar3dLightColor
という名前になっています。ということは >>7 の動作でよいのかな。
(でもなんで Light
を capitalize するんだよ?)
(名無しさん 2005-02-16 08:30:26 +00:00)
[9]
SVG に x1
属性他があるのを発見してしまった。。。
(名無しさん 2005-02-16 08:35:25 +00:00)
[10] 今のアルゴリズム CURRENT では rfc3339Date が rfc_3_3_3_9_date になることがわかりました。
(名無しさん 2005-04-30 13:14:19 +00:00)
[11] manakai//Issue//1//9 に移動。 (名無しさん 2005-04-30 13:28:40 +00:00)