DEIM Forum 2018 G2-4 CSS 305-8550 1-2 305-8550 1-2 113-8657 1-1-1 E-mail: nsuzuki@slis.tsukuba.ac.jp, s1721657@s.tsukuba.ac.jp, ayekwon@mail.ecc.u-tokyo.ac.jp CSS HTML/XML D DTD R CSS CSS D R CSS r D XML r CSS CSS 4 CSS 1 DTD conp DTD P NP DTD PSPACE 1. CSS, DTD, XML, CSS HTML XML Doc- Book [1] MathML [2] CSS ul li {font-color:red} CSS CSS CSS CSS HTML/XML CSS CSS DTD CSS CSS r DTD D D XML r r D 1 DTD CSS 2 CSS c {font-family:sans-serif} 1 CSS c a 3 CSS a f {font-family:serif} f b c f 4 5 CSS CSS CSS CSS CSS CSS 1 CSS CSS CSS > + 1 DTD DTD conp DTD 4 1 conp DTD CSS 2 1 R1 R2 CSS R1 CSS r r R2 r CSS CSS 2 r
CSS Geneves CSS [3] DTD CSS Bosch CSS [4] Mazinanian CSS [5], [6] DTD DTD CSS CSS HTML FireBug [7] Chrome Developer Tools [8] HTML Hague HTML5 CSS [9] Mesbah HTML CSS [10] HTML DTD Web XML 1 CSS HTML/XML HTML/XML CSS r r r r HTML/XML XPath XPath p DTD D D p XML Benedikt [11] DTD XPath Montazerian child XPath DTD [12] DTD XPath [13] Ishihara MRW-DTD DTD DTD [14] XPath XPath CSS CSS DTD 2. 2. 1 CSS Σ Σ t v v l(v) s s = s s = l(v) s v >, + sel len(sel) sel sel = a > c len(sel) = 3 s, s (v, v ) t s v s v v v s s (v, v ) s v s v v v s > s (v, v ) s v s v v v s s (v, v ) s v s v v v s + s (v, v ) sel = s 1 c 1 s 2 c 2 s 3 s n 1 c n 1 s n (v, v ) t s i c i n v = v 1, v 2,, v n = v 2 < = i < = n s i 1 c i 1 s i (v i 1, v i) sel (v, v ) CSS sel p:v sel p v 1 CSS r r sel(r) r prop(r) sel sel head(sel) sel tail(sel) r = a b + c p:v sel(r) = a b + c prop(r) = p head(sel(r)) = a tail(sel(r)) = c CSS r tail(sel(r)) sel spec(sel) sel = a + c spec(sel) = 2 spec(sel) sel CSS CSS R CSS r R index R(r) R = [r, r, r ] index R(r) = 1 index R(r ) = 3 r R r R t t v CSS r R r v t v sel(r) (v, v) CSS r R sel(r ) v (v, v) prop(r) = prop(r ) (a) spec(sel(r)) > spec(sel(r )) (b) 1 CSS CSS CSS sel {p 1 : v 1, p 2 : v 2} CSS sel p 1 : v 1 sel p 2 : v 2
1 CSS DTD > + DTD DTD PSPACE ( 7) + - conp-hard ( 1) conp-hard ( 1) P NP ( 6) + - conp-hard ( 2) conp-hard ( 2) PSPACE ( 7) + - conp-hard ( 3) conp-hard ( 3) P NP ( 6) + - conp-hard ( 4) conp-hard ( 4) P NP ( 6) + + - conp-hard ( 2,4) conp-hard ( 2,4) + + + + - + + + + R1 PTIME ( 8) + + + + R2 PTIME ( 9) PSPACE ( 7) conp-hard ( 1 4) conp-hard ( 1 4) spec(sel(r)) = spec(sel(r )) index R(r) > index R(r ) CSS CSS CSS CSS {,>} > CSS 2. 2 DTD CSS DTD 2 D = (d, s) d Σ Σ s Σ a Σ d(a) a book DTD <!ELEMENT book (title, author+)> <!ELEMENT author (name, age)> <!ELEMENT title (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> DTD 2 (d, book) d(book) = title author + d(author) = name age d(title) = d(name) = d(age) = ϵ t DTD D = (d, s) t s t n d(l(n)) l(n 1)l(n 2) l(n m) t D n 1, n 2,, n m n R CSS r R. D t r r D R CSS DTD D CSS R CSS r R r D R 3. CSS CSS DTD DTD e Σ 1 e e DTD D D e e Kleene e DTD D D DTD D = (d, s) (1)b d(a) (2) c c a b d(c) b a a a a D 3. 1 CSS DTD CSS 1 CSS { } CSS DTD conp : 3DNF-tautology conp [15] CSS 3DNF-tautology 3DNF ϕ ϕ ϕ ϕ ϕ = (l 11 l 12 l 13) (l 21 l 22 l 23) (l m1 l m2 l m3) 3DNF l ij {x 1, x 2,, x n} ϕ (x 1 x 3 x 4) (x 1 x 4 x 3)
D t r 1, r 2,, r m 1 b ϕ ϕ CSS > conp 2 CSS {>} CSS DTD conp 2 1 2 ϕ DTD D CSS CSS R CSS r R DTD D = (d, s) d(s) = X 1T X 1F d(x 1T ) = d(x 1F ) = X 2T X 2F d(x 2T ) = d(x 2F ) = X 3T X 3F d(x n 1T ) = d(x n 1F ) = X nt X nf. d(x nt ) = d(x nf ) = b d(b) = ϵ 2 D X it x i X if x i D ϕ CSS R R = [r 1, r 2,, r m, r B] r i = L i1 L i2 L i3 b p:v i (1 < = i < = m) r B = b p:v L ij { X kt if l ij = x k L ij = (1< = i < = m, 1< = j < = 3) (1) X kf if l ij = x k ϕ r B D R ( ) ϕ ϕ (l i1 l i2 l i3) D t b CSS r i = L i1 L i2 L i3 b p:v i spec(r i) > spec(r B) r B b r B ( ) D t r B t b : 1 3DNF-tautology ϕ = (l 11 l 12 l 13) (l 21 l 22 l 23) (l m1 l m2 l m3) 3DNF DTD D = (d, s) 1 CSS R R = [r 1, r 2,, r m, r B] r B = b p:v r i (1 < = i < = m) > r i = L i1 > > > > L }{{} i2 > > > > }{{} > > dist(l i1, L i2) L i3 > > > > b p:v }{{} i > dist(l i3, b) dist(l i2, L i3) L ij (1) L ij {X kt, X kf } L ij+1 {X k T, X k F, b} dist(l ij, L ij+1) dist(l ij, L ij+1) { k k 1 if L ij+1 {X k = T, X k F } n k if L ij+1 = b n ϕ ϕ i (x 2 x 5 x 7) n = 9 r i = X 2T > > > X 5F > > X 7T > > > b p : v i (2) 1 ϕ r B D R CSS CSS conp 3 CSS { } CSS DTD conp : 1 3DNF-tautology ϕ = (l 11 l 12 l 13) (l 21 l 22 l 23) (l m1 l m2 l m3) 3DNF ϕ DTD D
3 3 4 DTD CSS CSS R CSS r R DTD D = (d, s) d(s) = (X 1T X 1F )(X 2T X 2F ) (X nt X nf )b d(x it ) = d(x if ) = ϵ (1 < = i < = n) d(b) = ϵ 3 D CSS R R = [r 1, r 2,, r m, r B] r i r B r i = L i1 L i2 L i3 b p:v i (1 < = i < = m) r B = b p:v L ij (1) 1 ϕ r B D R + CSS conp 4 CSS {+} CSS DTD conp : 3 ϕ = (l 11 l 12 l 13) (l 21 l 22 l 23) (l m1 l m2 l m3) 3DNF DTD D 3 CSS R R = [r 1, r 2,, r m, r B] r B = b p : v r i CSS r i = L i1 + + + + L }{{} i2 + + + + }{{} + + dist(l i1, L i2) L i3 + + + + b p:v }{{} i + dist(l i3, b) dist(l i2, L i3) L ij (1) dist() (2) ϕ r B D R 3. 2 CSS DTD DTD 3. 2. 1 DTD 5 CSS {,>,+, } CSS DTD P NP : NP DTD D = (d, s) CSS R CSS r R k < = n v 1 = v i1, v i2,, v ik = v n (i) (ii) path = v 1, v 2,, v n 4 (i) path D D t path path D v 1 t spath j = v ij, v ij +1,, v ij+1 j v ij j + 1 v ij+1 path 1 < = j < = k 1 spath j j i j < = h < = i j+1 1 v h+1 v h j i j < = h < = i j+1 1 v h+1 v h (ii) sel(r) path r R sel(r ) path prop(r ) = prop(r) (a)spec(sel(r )) > spec(sel(r)) (b)spec(sel(r )) = spec(sel(r)) index R(r ) > index R(r) (i) (ii) path D DTD path D (i) (ii) D R NP CSS P NP A A CSS 1 A (i) (ii) 2 (1) yes r r 3. 2. 2 DTD DTD 5 CSS r > + 5
6 Q a(b h ) Q b (c h ) 4 4 v 1, v 5, v 7, v 10 v 1 v 10 Q a M h (a) q 0 q s s δ a δ a M h (a) δ v δ a δ v δ v a Σ b d(a) c d(b) Q a b h Q a(b h ) Q a(b h ) = {q Q a q δ a(q, b h ), q Q a} 5 DTD (i) (ii) path path sel(r) (i) (ii) 6 CSS {>,+} CSS DTD P NP CSS DTD DTD 5 DTD D = (d, s) DTD d(s) = ab d(a) = ϵ d(b) = sc d(c) = ϵ D DTD D = (d, s) Σ DTD Σ v = {a v a Σ} Σ h = {a h a Σ} Σ v Σ h d(a) d(a) b b h d h (a) M h (a) = (Q a, Σ h, δ a, q0 a, F a) d h (a) ϵ NFA r CSS r D DTD NFAM M = (Q, Σ h Σ v, δ, q 0, F ) Q δ F Q Q = Q a {q 0, q s} a Σ q Q a(b h ) d h (a) b δ v(q, c v) c d(b) q Q a(b h ) c v Q b (c h ) 6) Q s(c h ) q = q s c d(s) Q b (c h ) a Σ d(a) b δ v(q, c v) = d(b) c q Q a(b h ) δ δ a δ v {q s} q = q 0 c = s v δ a(q, c) a Σ c Σ h q Q a δ(q, c) = δ v(q, c) a Σ c Σ v q Q a F r r = s 1c 1s 1 c n 1s n p : v F sel(r) c n 1 s n { q Q δ(q, (s n) v) c n 1 {, >} F = q Q δ(q, (s n) h ) c n 1 {+, } 5 r = a c p : v F = {q2} b 7 CSS {,>,+, } CSS DTD PSPACE : sel = s 1c 1s 2 c n 1s n sel re(sel) re(sel) = c 0s 1c 1s 2 c n 1s n
0 < = i < = n (Σ v) (a) i = 0 c (b) i > i = = 1 c i 1 = (Σ h ) c i 1 = ϵ c i 1 {>, +} 1 < = i < = n (s i) v s i Σ i = 1 c i 1 {, >} s i = a Σa v s i = c i 1 {, >} (s i) h s i Σ c i 1 {+, } a Σa h s i = c i 1 {+, } sel = a b > c re(sel) = (Σ v) a v(σ h ) b h c v DTD r R DTD D R 1 D DTD M 2 sel(r) re(sel(r)) 3 r 1, r 2,, r k R r CSS 1 < = i < = k tail(sel(r i)) = tail(sel(r)) prop(r i) = prop(r) (a) spec(sel(r i)) > spec(sel(r)) (b) spec(sel(r i)) = spec(sel(r)) index R(r i) > index R(r) 1 < = i < = k sel(r i) re(sel(r i)) 4 L(re(sel(r))) L(M) = L(re(sel(r i))) L(M). 1< = i< = k r (4) PSPACE [16] PSPACE 4. CSS CSS 1 DTD DTD 4. 1 CSS R CSS r R CSS R r C R(r) C R(r) = {r R tail(sel(r)) = tail(sel(r )), prop(r) = prop(r ), 7 DTD spec(sel(r )) > spec(sel(r)) (spec(sel(r )) = spec(sel(r)) index R(r ) > index R(r))}. 8 D DTD R CSS r R CSS R1 r D R R1: C R(r) = : 7 r re(sel(r)) R1 r re(sel(r)) D DTD 4. 2 CSS C R(r) = 2 DTD CSS D = (d, s) Σ DTD D DTD G(D) (V, E) V = Σ E = {l l l d(l) } D = (d, a) d(a) = bc + d(c) = fe d(e) = c d(b) = d(f) = ϵ DTD D DTD 7 CSS r G(D) s head(sel(r)) tail(sel(r)) r R2 R2: len(sel(r)) < = 2 r C R(r) len(sel(r )) = 2 R2 C R(r) CSS c CR(r) c CR(r) c = {r C R(r) cmb(sel(r )) = c} c {, >,, +} cmb(sel(r )) sel(r ) len(sel(r )) = 2 sel(r ) 1
head(c c R(r)) = {head(sel(r )) r C c R(r)} R = [r 1, r 2, r 3, r 4] r 1 = a b p:v 1, r 2 = b p:v 2 r 3 = c b p : v 3 r 4 = d b p : v 4 C R(r 1) = {r 3, r 4} head(c R (r 1)) = {c, d} 8 cmb(sel(r)) = R2 len(sel(r)) = 2 sel(r) (2) Skip head(c R (r)) G(D) (3) (5) G(D) head(sel(r)) tail(sel(r)) r CSS p DTD D = (d, s), R2 CSS R CSS r R 1 D DTD G(D) 2 Skip head(c R (r)) 3 G(D) s head(sel(r)) Skip head(sel(r)) s 4 G(D) head(sel(r)) tail(sel(r)) Skip tail(sel(r)) head(sel(r)) 5 G(D) 3 tail(sel(r)) e a e (4) b e / head(c > R (r)) c L(d(e)) str str tail(sel(r)) head(c + R (r)) str tail(sel(r)) head(cr (r)) str tail(sel(r)) 6 8 CheckUnsatisfiability 9 D DTD R CSS r R CSS R2 r D R CheckUnsatisfiability CheckUnsatisfiability O( D + R ) D = d(a) d(a) a Σ d(a) 5. DTD CSS CSS first-child last-child R1 R2 CSS [1] N. Walsh, DocBookCssStylesheets. https://github.com/ docbook/wiki/wiki/docbookcssstylesheets/. [2] B. Bos, D. Carlisle, P.D.F. Ion, B.R. Miller, and eds., A MathML for CSS profile,. https://www.w3.org/tr/mathmlfor-css/. [3] P. Geneves, N. Layaida, and V. Quint, On the analysis of cascading style sheets, Proceedings of the 21st International Conference on World Wide Web, pp.809 818, 2012. [4] M. Bosch, P. Genevès, and N. Layaïida, Automated refactoring for size reduction of CSS style sheets, Proceedings of the 2014 ACM Symposium on Document Engineering, pp.13 16, 2014. [5] D. Mazinanian, N. Tsantalis, and A. Mesbah, Discovering refactoring opportunities in cascading style sheets, Proceedings of the 22Nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp.496 506, 2014. [6] D. Mazinanian and N. Tsantalis, Migrating cascading style sheets to preprocessors by introducing mixins, Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering, pp.672 683, 2016. [7] Firebug Working Group, FireBug. https://www.getfirebug.com/. [8] Google Inc., Chrome developer tools. https://developers. google.com/web/tools/chrome-devtools/. [9] M. Hague, A.W. Lin, and C.H.L. Ong, Detecting redundant CSS rules in HTML5 applications: A tree rewriting approach, SIGPLAN Not., vol.50, no.10, pp.1 19, Oct. 2015. [10] A. Mesbah and S. Mirshokraie, Automated analysis of CSS rules to support style maintenance, Proceedings of the 34th International Conference on Software Engineering, pp.408 418, 2012. [11] M. Benedikt, W. Fan, and F. Geerts, XPath satisfiability in the presence of DTDs, J. ACM, vol.55, no.2, pp.8:1 8:79, May 2008. [12] M. Montazerian, P.T. Wood, and S.R. Mousavi, XPath query satisfiability is in ptime for real-world DTDs, Proceedings of the 5th International Conference on Database and XML Technologies, pp.17 30, 2007. [13] N. Suzuki, Y. Fukushima, and K. Ikeda, Satisfiability of simple XPath fragments under duplicate-free DTDs, IE- ICE Transactions, vol.96-d, no.5, pp.1029 1042, 2013. [14] Y. Ishihara, N. Suzuki, K. Hashimoto, S. Shimizu, and T. Fujiwara, XPath satisfiability with parent axes or qualifiers is tractable under many of real-world DTDs, Proceedings of the 14th International Symposium on Database Programming Languages, 2013. [15] M. Garey and D. Johnson, Computers and Intractability - A Guide to the Theory of NP-Completeness, W.H. Freeman, 1979. [16] L.J. Stockmeyer and A.R. Meyer, Word problems requiring exponential time(preliminary report), Proceedings of the Fifth Annual ACM Symposium on Theory of Computing, pp.1 9, 1973.