From afc9b77e8150b85a6963a5b38b62fc77fb37e7d0 Mon Sep 17 00:00:00 2001 From: Nicolas Guillouet <nicolas@meaningengines.com> Date: Tue, 30 Sep 2014 15:31:02 +0000 Subject: [PATCH] First version for SPARQLSelectRendererVisitor : only works with no linkkeys or with intersect simple linkkeys (have to complete with Equals linkkeys and composite linkkeys) --- lib/align.jar | Bin 16641 -> 16642 bytes lib/align.pom | 2 +- lib/alignsvc.jar | Bin 124385 -> 124388 bytes lib/alignsvc.pom | 2 +- lib/ontowrap.jar | Bin 61937 -> 61939 bytes lib/ontowrap.pom | 2 +- lib/procalign.jar | Bin 338926 -> 338930 bytes lib/procalign.pom | 2 +- .../renderer/GraphPatternRendererVisitor.java | 15 +- .../renderer/SPARQLSelectRendererVisitor.java | 34 +- test/input/equals_people_1.rdf | 70 +-- test/input/equals_people_2.rdf | 49 +- test/input/intersects_people_1.rdf | 29 +- test/input/intersects_people_2.rdf | 35 +- .../people_relation_equals_alignment.rdf | 77 +++ .../people_relation_intersects_alignment.rdf | 77 +++ test/src/SPARQLSelectRendererVisitorTest.java | 438 ++++++++++-------- 17 files changed, 548 insertions(+), 284 deletions(-) create mode 100644 test/input/people_relation_equals_alignment.rdf create mode 100644 test/input/people_relation_intersects_alignment.rdf diff --git a/lib/align.jar b/lib/align.jar index c827775110eb1fc89676be7837cc95aa26438ad3..66121e2c98c9def27c5b33a9b1f72016337f5e1d 100644 GIT binary patch delta 1899 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 bETWx)U7y20WmyQ01LE}5*<2mZRWbhoCDZFr delta 1906 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 diff --git a/lib/align.pom b/lib/align.pom index e464f8f9..bf4766d9 100644 --- a/lib/align.pom +++ b/lib/align.pom @@ -17,7 +17,7 @@ <groupId>org.semanticweb.owl</groupId> <artifactId>align</artifactId> <version>4.6</version> - <!-- Rev 1969M 11/09/2014 --> + <!-- Rev 1970M 30/09/2014 --> <name>The Alignment API</name> <description>The Alignment API is an API for manipulating ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/alignsvc.jar b/lib/alignsvc.jar index d13fcb3b2bb49fb58841a9cfdc059e44a4ae4ff8..8d27f201b1a488d2a3e1662862e5223a71c3d317 100644 GIT binary patch delta 5616 zcmZWs2V9Nc8-LF&6}MX&RMH>~4X!k3-HN11MM&`{m4*hP)UR7cR!CP)kxC+?J%mI` zQEAcCR%WD#Qs{r)_r0o%&xao8`+fFv&im9|$=h4WOIvHf#XSSV_%Q6)NrSUArRhgc z8kle`EpGXK)_~4@mwtZpd3!$hZFSGTJJ4MDT%~lSBxj62*cU~awSIWJXGhRiy`}LI z;(11If9zk7k}8oE|MW#NeZy*-Lv8b^8)aomWv$8%cllK%Slf)tevuhY81ble+rOCG zR!(yBO|>w=A2QE--7|9ECakD9M*E`5d^Q^B6Qi(nZTK0@W!l@BlEM{{6sId90ja52 znz`KE=SF6tCK1XSAuSYl^)!!DLhkY1TcevEji)*<5qZCAzqhASe~Z)S!FdUq@)z<} z865qPAT3p>w_fE|w3mxjSifw|5Hsz`ZG*GQ`5}+5eQk0dJp1iya8aw7|Akhey^r_2 zYra!t^`^6V>AkgL7ZZ(`l&aZd>y?i06>b#McRl{7LV6%>>*@@FF113&&OUSbE$3P8 zLW+g51vWZX8wW;r^D{pLHiv5~4LYT`eqqXQRNg#BI|6=Z56!k;7{b^Z+If1TmHqA6 zy0WvQH|gEUJxt3zr0F_%XQg?I!$;#VW@y^*UW<$k>bI=>Qv`U*68U$2`YJWItGKc8 zM-<(ByPoJH#i%T<QwDwB0(l-$#Y(<gJ*j<`FK=d-4O0En_zarnyR>T8joCHE1%Hly z09yAJ9CX&F?Ro#fyrboO^#xUFEB}>I@3Oz2D3Gb^D$$7f;%LLqqsCHr2y$#F2j+93 z31C$(P$qtkEifj28p>M;<0By;^Se2b8^cOz7^aQEvt>Y?RU<FV{Gcc~&~I)QSybk_ zxoIuGM7Bq>*#+%GFQw9U?kS&E-XPCdH&n=sl<A8M%39EBev*3^t#anklI3pUC9!^v z9(#}8IN~xdIk13{b6f9t(!na5@YEge`Bz;1`tCzh<-7IG)S$7<;T37Y*&6qCGdHRh zms(_uCN=e$CM+`5_P_l<CV*w?v9BKJx{Vwke0A15_O<zM+R6ZHXZLIe@qog}#<6l~ zL&xj<rKa`anD9d}Q%UudA?KMzJ}FH--6KD_c@oljno24kjr@9lOzT(8n8cjJwzKH3 zDKz>i+2|wg@^+?|j?2+!T(dlS(KK$m3;ocI=S8XV#g1>RHPX0!&0aB!bp`FiZfZEv zot#r89rlJUH?Myd^{9Nt{Swon9dCwh*Po-P?NjVrZh4oorM9X%%h3JNy1>(A^Q4V7 zZR#3Q(f^WMk>>hd{{yShaI7cETj}HSx~e6;wtHq<@2!7l%6RRt{<T_7$M-RxmnEmq z8;#o8++R>@vS+YMbVj$9K=VANs%yk*@yKHmuBN_pzwBrcp#u94&*uH`R8e?*GjC6% zbg`wHtX-z<`o2q41+zP!2GYHan^UegEomM06;*HSc)Vg`+gaJw-yOFE<cDukZ^)}j zN)CGDa@klRU{TNY^}ZFBn+;rUT)o<<`Bmd|<6&#J4*6Go%P#o1bZJ&!X8yd!+&_JB zkj>{9={4igDaK<_vtr_Oa=xi0U3=lzTk6eN!SdLm!yEO&we@XWmU%(M*Zd{UzYC)5 zr$^h_=kZvHoAxQhm7AYT4)oq~CR(q}JapM^bL-g0mS1X8_1kTwPiGuWp(jR$nb_;m zJGcjy{O6_lQme1W-*+EhN59b8{{khLsZY!XM6VjXFx03_Ham3T#g7rL2p(<iL!QfI zB6yop<nD|PRPGGm8Ip+b;i;|X2@v{zrc27&zjWwC|C^D3_Ao0k$A(Im*SBmc=L-ie zq+|<Md(G2%80RMWEdEVkxLZk`lB|Qbwn>bK!o#1{%dYx`8)`qbJ5AwE*x6>KT6&I2 z6}or8PA+9-`jVj5S8X95dC$Gy=bqsFQY|>xS^43xYD$E8zj*u0lHD11Z}M9xW8B3B zlJ8gEI_)`jOlkM!%j)yg)`%^e-eBx?pPq65SH<mwm<<Q|V}Dq&ZVHQRP`&Z2%%;#Q zxZO4XWdD_<Ojc^p9%@y^xKO9!iDoU&50dYh%(<?^*LLUL%+-zU$XZTyDBP7k&OdnC zWn`9W%D^t!MJ?2;pAM%L>*nsulgw%yX_|MaV)vlFue@@gXSDEe{W;AyZ5!(greBYK z5jdz{`}wMJ3gz3mi!IicH#4U#I`?4w``imTudS7uuDCmlN%w2+8OUySTI|k9RPcTv zAdw-)?B6F|v2#>-=-9Uv3w^ky#A~9c^*6;I3o#SBBwv(5#t>vs4;y`xkk8rt%i~Jj z*qh&Xegv5?Ry8V#YuyfUb?+Yap4(86mTsT)Nw;0+?hcL5`|5k1QWI*khFUr@He4!i z{z74>95-W}zW3Q_Wm8hlZH@N1J!N0djUIf%I&p2j#)@%c+2ReW(v=!w{N^;bt*o=u z52_F9W41>XKE&{^8{GN?%x0ZYPU1rE7)wJ%R|tR42BFc#Q4GU^0fuR?mK>2|eO8?Y z3!VbOoO~5-fOB&msQ%z1gnOFqbV5*Y4Fm$Xy03g6_Cy%NT$Q2F37`N6%E8R2YMz|; zZgs*0v+#g5X+$76k3yW3g{&k`XrUt02qO|Y28-KK3=V)*7orIDp8)}u^O3g%+bUc{ znIKvA#AMvzLM&dGMM0j5ssMLROlB<?LG#R&q!PmMhjal#xL<XhhY;NA)kp!p<X6H^ z@~=_AH$g&*7Y6U72<bQ-XwAYU_$(VNfkm}|mr8B~d>F1XZ522^jbNU&0L_HKd@ozD zm?#X4cK~Y%aL@tFC$h_*?Fh6;X^qpLGyg51k3y9F>=%*n7L<$zD!Tz*b{OgeX2I** zz(>Lk-2O+q)){=6Mr<PvzDE|f!b{tMA*6bM&jjz62hb<I=zD=oQX1F=^hjy356~th zcVECDBzVgYFbLI8en6OuD6N%6?=hWe7?wrFo2U#gwSejQhI@e(nQ-I*u%2jL{<~mc zOG^4ou#Qxw#GK!?5%r~<hwO`QB;d|3KL~t@#^mdTgC|@xd{ja&%ARXQ>7Io1;(<!O z?g=nV#-<qoc)5v?7?D7PR9nvia-<Y=9!QctV`IP$;_P-D5G9Yq;(-~3$l<N|>8-WM zdIT3Vi~!2{F^S+UIieMDEuvirxz7dv$3jSc5&)!jK{Bu;r5Pz;B`Mk50M4Y8e+$@= z5-lC9Bc&agz=e?TDKR8s7R&)Q+(ZaYojdQ&q+nP!H(3e8954;myaKfRYx!UfsaA3q z=n(_pEN?G+0hKKRZJZjg?k-pWWgj3uvj+&|o8AM-WcK}qK$fhM&_m!wb}+OEydqq? zJObu`sO=!V-liLk(_!fI2q?kcVlYfFI!b^s!1os@R|=L*?zC`6DcAt);Qdk{Cxc)U zq&x9Pa6+1ieKIP6ze|BMVMC@2wPIiazVs|qS!)3(qFfUzGlvB_hXqX-Sq2y~_zZAv zPZKOGIqVQlT8dUFUa0g0D1!iK_XN;EEIj-K=ujRjv%*wFVLd`9L%2K#&Up&>@f_j8 zrzk3A6?8Zs?nH;OxFe2dZPE{Nv=e7)!L7Y)^%h(`R}~#9vIaB-p=vppL)bMdM?j_~ z8<-_HnK1Dpz$_e}>&nV<Q$Jq;L<zT(&mo3sak!0fL&Rn9R3+POPzBP?Ie=@kejlL0 z;8*O(Z~Y!`@j+8$js`=8!vuFQo+FD9OojA6W*C*o%>57?fFVdGB9Frlxk3rHL8u7q z|HJ-;0}@9Fw%#)~+W`rb72yOsBz!i^c*YL#0S;`+B-r?C%ZkYqfPz(QRJsbG+j9S) zH0V(UL<#p{IKq7R2azEvQ}HBkWE~IMnfWnnIY(OARfOwLRT7icF{?%<oazY^$Ev|R z!fq;lc<Lo_*jEka5OzoJFIBycCe}?6!_+zK#!=v4Etn5YYk)LCH5}V`ELIA`bS%)7 z<Di}sCaE>TKy)(yiW)o*ItksQ10gu47R?_;mpswe1v91$1%~0n7*-1;!5uhI3zVkZ z5Mp3V)ON|`E=JF+JGwLs4*z4gf;Ew(Q5|x6)B<;*0W)j?A8fNg|L|3?%btbf+ifRs z0XXwH8<KgBpmPp5qzDsy!A#Y^M%Lt4yTDi}^869~HRg!m?G!bry&2H(T*<2x&6TsT z6_K^j8*0d*#P2xi3pzRi>XdSjcjSLBP)H_DQ)sy_fCQ0fEe?5XnF8J00{9`lo}CS& z9^o6eO~G09fc!$=!l6^!N$7JuP$1g-@uHyrf2h2+=r=P5jyTJlr&#f7085Af5*v_} z0{1Bp`l`-=zZ=*A&>9i`)nf|2t&#mSgy7IpuPM-TbV67iz@az0ra)TWK;WOkY->U^ zd7mk?ye1$<Sg66Ft-ceG%oJsE$c&m1<FX(0YXu7b^th_Q^KLPEKVr~j)8r^a52-<X z-eG4m`^lR8`2YQ6jrbEDNIqHzrbCMsc5NJ5Pz2!zCU7~T1J!v_bt7m>M9}ZYoCDqw zOj4!(1CqpK5t-6oA}dRoIHU;u(SHallMBV)H~Pdul3H;P(EiCga9!+`0Q5nP;r;t| ztB2!i%5Zrr5GTGu6PpO4bH36)p>HcNA;NGtylsC0BJfSeuq7OIREZ#y8EXX+1l2e= z?CCvJ@(wh81{_q)NRsN%#vW3|doE&Ch?<JJqsu|HV3E|!^XR%)x3S0RBN8Zn=O-W` zXxPr~!J2jiorxi#>KGt4d1Vc|SLYO=M);%nIUn2a7bp09P(Kdc^O+rNdomr!9xa~4 zE#rakKP8^rvHmW}rbJQ=ZC(F%W^w`hJLiBTQVp$SVo<M>9f(CI3M4C;ga(qq?8(HA z?$EvW1tr#p64T}=AC@w~=Y_vIfjH5bGg~dz@S$?!6KTl7H@z{1f9eL>y^FfRjQQkC z{b12<t5M`e0I6{{H0>6tme>ubaQGGwoQ#djY>fXWQkssG^f`QSrB5h{z}4Mo?Z!V9 zPTeR?hs+5`l{m#eAe7>4{Pxd>_y+k;7mOBP5*kDKC!hs^bA+blOsGjte#TC|LKZjW zPe8;@O1{B;ICS?e4v9i~FUm%xhus979t4d{LZbL)N-jomIMiD>p(P6CA0X9%KdR$6 z&iilz*Ci73?nS5jiY874VR|pyU?mQ1el!K5zGgRYVzEVqRpTh?_2MafSHvgF_Zpe1 WFPQ?(e2gCT%GY2fk60-(g8d&Lf;4mh delta 5500 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 Vp<z|%hV6m5Q^0^(paprb{{oAM!+HP! diff --git a/lib/alignsvc.pom b/lib/alignsvc.pom index add72875..ee44c82f 100644 --- a/lib/alignsvc.pom +++ b/lib/alignsvc.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo.align</groupId> <artifactId>alignsvc</artifactId> <version>4.6</version> - <!-- Rev 1969M 11/09/2014 --> + <!-- Rev 1970M 30/09/2014 --> <name>Alignment server</name> <description>A server for storing and sharing ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/ontowrap.jar b/lib/ontowrap.jar index af9d3895820977390dc10c833f613e66d5a03ac2..9743744fcbec5be588e54fe3465448415b1d73c9 100644 GIT binary patch delta 3040 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 delta 3017 zcmZ9Oc|cRw62@<CSdz#R1RF836cA)zR0v_O1}Go|i;7SdtFl$J2nrQSSSpAJf~U%} zfEu>Srb2*%vXqKg7vK@4QK%FMix8HeR5q*c=G?y5NApikelzpUoVjz)$r~YYUPzQ@ zyA!1-2tq=ThD^g;`K{#oOheX$I)CO(uDuq=>z*0)OsxBRMfJx+jBq!0ZT-Q6XCEc` z_SU!Tp$RNQiz_~;>p4;T$2{lmF3#R0RxWNVN?=j?UpT8A=zhWX{Dpt-ZIV{a_A1^* z-es!R?C2DKRipM@^_{%@6DA>Frc^uiGGAwFmc3I8tu&1+O7O@%Z0ZwO`E{TXL*(fH zg0qRlRVuJ6Y;ITXXLO8aX6r5sESbVV(-Ds$JAT&OVi#*)#sTmBC-XcN{KvL+?9|Q< zb0T~b;&R<PjL#`DO{Hj<BnhT|(CfUSIoz#VuC-q~A1SnN(wc26d)ew$YA1M3lrG7* z>vJfN9vS~cHT3uYwu6Lp9-7+43nCoVB4UjJ-P#85dsW*OelvAguv5|=dh$--td0Z6 zlkTF@YT_03XoKruK*6qZ$Nb2EFLH8cG)dcI!<yrp<(_m`g@i;F(A=Vbw;H;CI^?bF zz?SWo{Q7?WC_1t2jg4}i-^+s$!(1xAd7!1f!S-BHiZMH_>hPp-n%hM0a{8wWy0#?6 zQwJx~{gz&}i#-oEeV+DM5V+9S?&PqtU6m7b@mM=*l6A!5e!vf*OS$u-HEvhN+!E7W zmM(XsK8*NcXzUZ_oURQL#kEio+>p0+wKdJQ4D)>TKr`ug8QRm{g#}XDweECU@x!lH zqRe#5J|r}=QrQ*g_~+LNWlANrX15McUEkJAEDr9DX)GU+GE7x{a!Dq{m@sY;Tk`c5 zPLjJ8%|7ln#iw-m{AB-wJKVh!W-b}uAFyEfCo49}dW2lft0+<lt9fc0Wj{uVbGj4| zoXk%tf4w>D&GXdS+Mg!9PWSK(e*C_4@x}!|;>?31FWLRkDfx$fDIGT|5Z%bVkl0;c z@rZu4MYPC?xTI#3y6~BIs}7sn6i1<)`RY8!u0ip!zq6*CYlj?9eY$IN<e2NXH%pn( zuJirp$Tbl&)1|9lRbI}~_bso;>fQpj{&wnpx9QI3rBwp!fj?%q9;vGC_{^`sjjCgF z(=@@i*yxIg8RESsK+I)FJ*zF)`1Eqmfr!Z)C41ew9x?p1nO9hXl;gs%n!b2iW77NK z0nR=0!fJ2($632SWXU=uJfwKo=N#a^-oO|r6<u#%-kNROLp~C=r^`LvL6vQNO?gpO zC86v};F+kpn<E}RemY$-=IzlB-PDiu*<=^wDC=5)ciX<K_b(`(ydQ?_d_?s<d|&zJ z-LfWUdVI4Qx>iP~)#g%v93cAX-AesqlytR-vpsARt;;;TBJdEiFt9x??rZDjq^H9% zapoKEE%)6L_L~1YmeI2L6CPz~@AJ8Ka(4_%zbIw1`c2u}sww^_nyTKt4)@-rWy*5g z_p`tMSrZf53z^!9D0Sg{n5_covapO4-8Cwtb(Vj*O{zlA%bF7ONrI~HIenT|jHvW& z!Fo<(=k#vT#P}Tz_MrjURpXME?GsjIk?}nzrpiXMz5A|a+w3m4FbW@hNS-s`=k8Pc z_0);2(Ohn|rm<HZV_>7cX`}r<_ZmCzz>boNjt*mczbjEb8vbPlqP_y(041J{W%99| ztF#*awC%b@)-KbuH$B6ac|tX}w_2a;QA-|i>Ysf$zZ9>0boSEnh4xNS^>2eRssRou zJ`0~kTYcM2?76t@S%qVqL!)}j1?{Vm3d=8q`~O@@7xJWg8p`4h{TcA->@D)@(uQv9 zh|`D%i7%YfW%SM}{UJCxnY9$(;G}fgw9V&;x#EeeJzY{OS^n$l4g4}r1>cRfIJjW) zO6$C{wpW64CqFhn=o%B$j7cZ%TMrU9pZpM;5#&D7-y1_qitj9mDGj%;tm3C#^*bxJ zirxEN#FNGyi5sj0_Z5t*S2FUa-;sfgei{)wg24rSOJZH7A@3LcJ*Wim)QqO3;6l#) z0RftRwa7-{B6J6v08Mu+pW!~aHarqEx$I&=6S%;#gDyR+ySQ(bOC!E;{j?Qdklm~C zMU%%-6rOI+Tho?50&N~lpg1YZJMN{4DoL(~@Q#5^&I$;kV2mK!fm5hD2%1#o3B1_~ zFoi*|jI3k<$aO}*aYhE1O-ZlAZy6FI*~-b#M!Zb3qv=Gv@Z$t3T(ok&lli|`GB}q; zfrh-aB)kusGUD*XrOXp}45h#x&*xrj4}H%UZ-pYfAIrU9G**cNw7A!G;hE`8Y;~CD zn7{^FssyL;QuGJJxc=tB6cnEI+#$x_w;~uB+D~8u=CC%j1rO5+KY@f{b@;1rn2ye9 zgIpbL@N!rVqG=2n>0rnRWC-OnB<+KDh7^L#VE3*$^7p4CIR*re1QMh`+lU!q3lNVm zQMNwddaD3Op&YE%OGrnPBuGu7ril#*Yw;piQ4U3rCL)3u{w;=-BsbxX3;I+=wmSh; zAxiFf_yoW_rlVj4bqq%}p!DuhI{K#>L=1CPaD7xxGC<%Kh96i!JUOZfk=z&^_1ytc ziwy~Qj;+^}Y^yRq`MXSPTd`yWF<Dbcr6qJO9K$oUVeu(8f5mSA3gdVtwQ)Mi*ah+a zacx-BHyBD{VMqtGVqTJ&>cY@Z5@ZGxoJki&I5nT3qlqq%CQhipF85Mab0P@{@)+xl z<(hJ=LCpjUiY;SdD{e5%`IQPp0k7z2g$G0xf1!2^se0ilCvovLZ@?PyRNyqZ6ZT_W zuAuX_41%DF2x7CwhaL>Y!h_|p%~PZi$x8vmlXO%k6nIZ-WABS1RJh%>LJGk;nuGm2 zvs$ANf;);iWN<rF9{g)c4hAS6ZxC2ubAZYs2y;!q$48;En4<)irtqCAis)$N@&Dmq z(R$do2<c2J6Dxa09zh(|Xxsw1B2U;PtX6_EU{C8A{$sFM4Gw*E23W^iu(H=~`Yh(} z2BQn7>FBx)EU_gJPb<U1y^^n4sZ$YzYla}!Ym%mAVvaiiV{|=?jhvyQtN9SM&8R{& zfFavr;3WPSsLsL@0T|8F(Qk0nT&yOUFqlPii*(U@Y&wV4{y7pi%3*wSF$v6-D+19h zK30-vvckhmy1;G@M;>!nwmOKC>Yy|%;x2~enjmI3(J%oD&=6}9)&oZ|JYPVfn2rVs zu;;D@8pTR5<_U%har9h318Vbl2BUd8x@iD<x(-sosd@ZyWnox;@GtxkcsWm%$r+Ng F>OW&*{jvZ6 diff --git a/lib/ontowrap.pom b/lib/ontowrap.pom index be8652c9..e819f629 100644 --- a/lib/ontowrap.pom +++ b/lib/ontowrap.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo</groupId> <artifactId>ontowrap</artifactId> <version>4.6</version> - <!-- Rev 1969M 11/09/2014 --> + <!-- Rev 1970M 30/09/2014 --> <name>Ontology wrapping API</name> <description>An ontology wrapping API and library.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/lib/procalign.jar b/lib/procalign.jar index a364949e1a69d475ddfad54e0ff0f986ad7b8c3d..60843d890039c13d56d24baa5a6c6e80ab49ee07 100644 GIT binary patch delta 16007 zcmY*gbwCu`+h&WF?(SAP1Oe&pZV;qJP`Xy6OG;Q;X+%mvmPS%QQb15TB}6(!`Ig<i z-|t@k;qi^<jdSMA*_kuHrpXSc$!_UtfWWvI7}yvXG4V1fx45vQ<7Je#IHbi>qy?dO z%G=VPEbBfZjN!$7qaiIZz=cD0I-N%7INQ}b64dZ2zp665mp-DOu@lSNx09pLEvH1< zE+hO)kZr6+Z&PN&@L+gc?K=Eb)3vg<&NTG==s3>m>O`HiHvK64h^O@8b3;>zLfqAz zM828&w0TQwpER@CN^<jd7V@s=yRG-3J9^_7av!6;<cZr&3vhb-q^xvj=W@b6K1)=} zk+m&mYaZ$ydcVGrzic*IlXV?5+#}kOIrO;M=g`!BKQZn%1h3{!Ibhw7qU~^qo=ZCI z_vO;4Gw<UfJZFdDN8OqQX^-CI365aqoAg`0p09+par|27JOb+Au30<&@#EgQf|h6W ztBC*UOdTp<3Y@T&``Yv2NZ^awkK)40!cnM8h;@|_cdhz{r{d-T_NgF&nUkS(YQ$D) zWcO}{0|6xD*))-Z*2TGs*cNz;Swh_{UzB$6b7a?UCvC#}(yqx4frZ~oX)kDS8TvX> z^k(aaDgPM@Y>YnpZN>c`bvpo877$`w(oETSkbfiD<dJ^|*))*@#Yk0Co5sMd553R! z?a{kCVHJ1q=7z#nA=<Mi7IGR+S=>svY~-IV6uR5@7>|>7Roi-eNy@$%PsSwfpYQ)_ zqRiL!dNajdN>Po+JiIgC^kLnOjQl6=!+!OQ5kW)Aq!FlWymeGtEgVluc5<oPt-A#j z-^*gzx<B@#&06--U#$6c9R#mYBm+7?<~M)0n=p|w$#9U*<dB!IOCiQBZK~_zs=WCg zhZKfafe;y^F0D}Vd7FfJ+TF1vISeSBR$uqQ05iT!J|RbUUFZ4yc#PPeAM<p#<lo?C zdWB(TDkl$iRi?fv8tIXtf(Vy(pRf{`QV-ddiU_#H3c#93hj{>&sg3(1;YQHcJh#d; zr^SrPZ%c*WRi7M6?b;$~?f(7IVdG5S=q2#BFXy6U&J�*F)BJVPBrVIiyRhYb1R5 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 delta 16083 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 diff --git a/lib/procalign.pom b/lib/procalign.pom index 35babd57..92c9b3bc 100644 --- a/lib/procalign.pom +++ b/lib/procalign.pom @@ -17,7 +17,7 @@ <groupId>fr.inrialpes.exmo.align</groupId> <artifactId>procalign</artifactId> <version>4.6</version> - <!-- Rev 1969M 11/09/2014 --> + <!-- Rev 1970M 30/09/2014 --> <name>Reference implementation of the Alignment API</name> <description>Implementation of the Alignment API for manipulating ontology alignments.</description> <url>http://alignapi.gforge.inria.fr</url> diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java index 6994d1f4..9d66a3fb 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/GraphPatternRendererVisitor.java @@ -125,7 +125,6 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito queries = new LinkedHashMap<Object, List<String>>(); } - protected void initStructure() { varsIndexcount = 1; strBGP = ""; @@ -176,9 +175,10 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito return obj; } - protected void addToGP(String str){ + protected void addToGP(String str) { strBGP += str; } + protected String getGP() { return strBGP; } @@ -273,15 +273,14 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito return queries.get(referer).get(index); } - public String getQueryFromOnto1ToOnto2(Object referer){ + public String getQueryFromOnto1ToOnto2(Object referer) { return getQuery(referer, 1); } - - - public String getQueryFromOnto2ToOnto1(Object referer){ + + public String getQueryFromOnto2ToOnto1(Object referer) { return getQuery(referer, 0); } - + protected String createPrefixList() { String result = ""; for (String k : prefixList.keySet()) { @@ -673,7 +672,7 @@ public abstract class GraphPatternRendererVisitor extends IndentedRendererVisito if (size == 1 && valueRestriction != null && !inClassRestriction) { obj = valueRestriction.toString(); } else { - if (this.getClass() == SPARQLConstructRendererVisitor.class) { + if (this.getClass() == SPARQLConstructRendererVisitor.class || this.getClass() == SPARQLSelectRendererVisitor.class) { createVarName(); } objectsRestriction.add(obj); diff --git a/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java b/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java index 6c77da94..7f0b27e4 100644 --- a/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java +++ b/src/fr/inrialpes/exmo/align/impl/renderer/SPARQLSelectRendererVisitor.java @@ -37,7 +37,6 @@ import static fr.inrialpes.exmo.align.impl.renderer.GraphPatternRendererVisitor. import java.io.PrintWriter; import java.net.URI; -import java.util.ArrayList; import java.util.Hashtable; import java.util.LinkedList; import java.util.List; @@ -163,11 +162,11 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp public void visit(final LinkkeyEquals linkkeyEquals) throws AlignmentException { //Main part for selection // resetVariables("?s1", "?o1"); - resetS1("?o1"); +// resetS1("?o1"); Expression expr1 = linkkeyEquals.getExpression1(); expr1.accept(this); // resetVariables("?s2", "?o2"); - resetS2("?o2"); +// resetS2("?o2"); Expression expr2 = linkkeyEquals.getExpression2(); expr2.accept(this); //Retrieving intersect elements @@ -176,17 +175,17 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp + "WHERE " + NL + "{ " + NL); // resetVariables("?s1", "?o1"); - resetS1("?o1"); +// resetS1("?o1"); expr1.accept(this); // resetVariables("?s1", "?o2"); - resetS1("?o2"); +// resetS1("?o2"); expr1.accept(this); // resetVariables("?s2", "?o3"); - resetS2("?o3"); +// resetS2("?o3"); expr2.accept(this); addToGP("FILTER(?s1 != ?s2 && ?o2 != ?o1 && ?o3 = ?o1 && NOT EXISTS {" + NL); // resetVariables("?s2", "?o2"); - resetS2("?o2"); +// resetS2("?o2"); expr2.accept(this); addToGP("}) " + NL); addToGP("} " + NL); @@ -197,17 +196,17 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp + "WHERE " + NL + "{ " + NL); // resetVariables("?s1", "?o1"); - resetS1("?o1"); +// resetS1("?o1"); expr1.accept(this); // resetVariables("?s2", "?o2"); - resetS2("?o2"); +// resetS2("?o2"); expr2.accept(this); // resetVariables("?s2", "?o3"); - resetS2("?o3"); +// resetS2("?o3"); expr2.accept(this); addToGP("FILTER(?s1 != ?s2 && ?o2 != ?o3 && ?o2 = ?o1 && NOT EXISTS {" + NL); // resetVariables("?s1", "?o3"); - resetS1("?o3"); +// resetS1("?o3"); expr1.accept(this); addToGP("})" + NL); addToGP("}" + NL); @@ -221,11 +220,9 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp * @throws AlignmentException */ public void visit(final LinkkeyIntersects linkkeyIntersects) throws AlignmentException { -// resetVariables("?s1", "?o1"); resetS1("?o1"); Expression expr1 = linkkeyIntersects.getExpression1(); expr1.accept(this); -// resetVariables("?s2", "?o2"); resetS2("?o2"); Expression expr2 = linkkeyIntersects.getExpression2(); expr2.accept(this); @@ -236,18 +233,18 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp List<String> listGP = new LinkedList(); blanks = false; fromOnto1ToOnto2 = from1To2; - // :-( should find something better !! - if (fromOnto1ToOnto2) { +// :-( should find something better !! + if (from1To2) { resetVariables(expr1, "s1", "o"); } else { resetVariables(expr1, "s2", "o"); } expr1.accept(this); listGP.add(getGP()); - if (fromOnto1ToOnto2) { + if (from1To2) { resetVariables(expr2, "s2", "o"); } else { - resetVariables(expr1, "s1", "o"); + resetVariables(expr2, "s1", "o"); } expr2.accept(this); listGP.add(getGP()); @@ -264,8 +261,7 @@ public class SPARQLSelectRendererVisitor extends GraphPatternRendererVisitor imp if (hasLinkeys) { filter = "FILTER(?s1 != ?s2 && ?o2 = ?o1)"; listGP.add(getGP()); - } - // End of global variables + } String query = createSelect(listGP, filter); if (corese) { throw new AlignmentException("corese case NOT IMPLEMENTED for SPARQLSelectRendererVisitor !!"); diff --git a/test/input/equals_people_1.rdf b/test/input/equals_people_1.rdf index 8bd64169..37bab6c3 100644 --- a/test/input/equals_people_1.rdf +++ b/test/input/equals_people_1.rdf @@ -43,8 +43,8 @@ Tests are on two main elements tested on datas for one property : ### < ## n ##Intersects##CarolC3 ### < ## Q ##############CarolC4 -Nothing : ---> + Nothing : + --> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c0"><!-- CANNOT NO INTERSECTS (not same type) --> @@ -56,8 +56,8 @@ Nothing : <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"><!-- EQUALS --> + <!-- EQUALS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC1</exmo:nom> <exmo:nom>AliceC1_1</exmo:nom> @@ -67,17 +67,21 @@ Nothing : </rdf:Description> - - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"><!-- INTERSECTS --> + <!-- INTERSECTS for (nom, givenName) / Equals for (connait, knows) --> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC2</exmo:nom> <exmo:nom>AliceC2_1</exmo:nom> <exmo:nom>AliceC2_2</exmo:nom> + <exmo:connait>DaveC1_1</exmo:connait> + <exmo:connait>CarolC1_1</exmo:connait> + <exmo:connait>Ivan2</exmo:connait> <exmo:boitemel>alice1@gmail.com</exmo:boitemel> <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_1"><!-- INTERSECTS --> + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one more--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC3</exmo:nom> <exmo:nom>AliceC3_1</exmo:nom> @@ -86,11 +90,15 @@ Nothing : <exmo:nom>AliceC3_4</exmo:nom> <exmo:nom>AliceC3_5</exmo:nom> <exmo:nom>AliceC3_6</exmo:nom> + <exmo:connait>CarolC2_1</exmo:connait> + <exmo:connait>DaveC2_1</exmo:connait> + <exmo:connait>DaveC1_1</exmo:connait> <!-- givenName exist !--> <exmo:boitemel>alice1@gmail.com</exmo:boitemel> <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_1"><!-- INTERSECTS --> + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one less--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC4</exmo:nom> <exmo:nom>AliceC4_1</exmo:nom> @@ -99,12 +107,14 @@ Nothing : <exmo:nom>AliceC4_4</exmo:nom> <exmo:nom>AliceC4_5</exmo:nom> <exmo:nom>AliceC4_6</exmo:nom> + <exmo:connait>AliceC1_1</exmo:connait> + <exmo:connait>AliceC2_1</exmo:connait> <exmo:boitemel>alice1@gmail.com</exmo:boitemel> <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c1_1"> + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one different--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c1_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>DaveC1</exmo:nom> <exmo:nom>DaveC1_1</exmo:nom> @@ -113,12 +123,15 @@ Nothing : <exmo:nom>DaveC1_4</exmo:nom> <exmo:nom>DaveC1_5</exmo:nom> <exmo:nom>DaveC1_6</exmo:nom> + <exmo:connait>DaveC3_2_diff</exmo:connait> + <exmo:connait>CarolC3_2_diff</exmo:connait> + <exmo:connait>CarolC4_4</exmo:connait> <exmo:boitemel>dave@gmail.com</exmo:boitemel> <exmo:boitemel>dave1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c2_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c2_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>DaveC2</exmo:nom> <exmo:nom>DaveC2_1</exmo:nom> @@ -130,9 +143,9 @@ Nothing : <exmo:boitemel>dave@gmail.com</exmo:boitemel> <exmo:boitemel>dave1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c3_1"> + + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c3_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>DaveC3</exmo:nom> <exmo:nom>DaveC3_1</exmo:nom> @@ -145,8 +158,8 @@ Nothing : <exmo:boitemel>dave1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c4_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c4_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>DaveC4</exmo:nom> <exmo:nom>DaveC4_1</exmo:nom> @@ -159,9 +172,8 @@ Nothing : <exmo:boitemel>dave1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c1_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c1_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>CarolC1</exmo:nom> <exmo:nom>CarolC1_1</exmo:nom> @@ -173,8 +185,8 @@ Nothing : <exmo:boitemel>carol1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c2_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c2_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>CarolC2</exmo:nom> <exmo:nom>CarolC2_1</exmo:nom> @@ -186,9 +198,8 @@ Nothing : <exmo:boitemel>carol1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c3_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c3_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>CarolC3</exmo:nom> <exmo:nom>CarolC3_1</exmo:nom> @@ -200,8 +211,8 @@ Nothing : <exmo:boitemel>carol1@msn.com</exmo:boitemel> </rdf:Description> - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c4_1"> + <!-- INTERSECTS for (nom, givenName)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c4_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>CarolC4</exmo:nom> <exmo:nom>CarolC4_1_diff</exmo:nom> @@ -213,9 +224,8 @@ Nothing : <exmo:boitemel>carol1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_1"><!-- UNIQ --> + <!-- UNIQ --> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>Ivan1</exmo:nom> <exmo:boitemel>ivan@gmail.com</exmo:boitemel> diff --git a/test/input/equals_people_2.rdf b/test/input/equals_people_2.rdf index 3b0e3c68..a204be68 100644 --- a/test/input/equals_people_2.rdf +++ b/test/input/equals_people_2.rdf @@ -7,17 +7,17 @@ <!ENTITY foaf "http://xmlns.com/foaf/0.1/" > ]> <rdf:RDF xmlns="http://exmo.inrialpes.fr/connectors-data/people/" - xml:base="http://exmo.inrialpes.fr/connectors-data/people/" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:foaf="http://xmlns.com/foaf/0.1/" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xmlns:xsd="http://www.w3.org/2001/XMLSchema#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + xml:base="http://exmo.inrialpes.fr/connectors-data/people/" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:foaf="http://xmlns.com/foaf/0.1/" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <owl:Ontology rdf:about="http://exmo.inrialpes.fr/connectors-data/people/"> - <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> + <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> </owl:Ontology> - + <!-- EQUALS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC1</foaf:givenName> @@ -27,15 +27,20 @@ <foaf:mbox>alice2@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName) / Equals for (connait, knows)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC2</foaf:givenName> <foaf:givenName>AliceC2_1</foaf:givenName> <foaf:givenName>AliceC2_2_diff</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#dave_c1_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#carol_c1_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#ivan_2" /> <foaf:mbox>alice2@gmail.com</foaf:mbox> <foaf:mbox>alice2@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one less--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC3</foaf:givenName> @@ -45,10 +50,13 @@ <foaf:givenName>AliceC3_4</foaf:givenName> <foaf:givenName>AliceC3_5_diff</foaf:givenName> <foaf:givenName>AliceC3_6</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#dave_c2_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#carol_c2_2" /> <foaf:mbox>alice1@gmail.com</foaf:mbox> <foaf:mbox>alice1@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one more --> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_2"><!-- INTERSECTS --> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC4</foaf:givenName> @@ -58,10 +66,14 @@ <foaf:givenName>AliceC4_4_diff</foaf:givenName> <foaf:givenName>AliceC4_5_diff</foaf:givenName> <foaf:givenName>AliceC4_6_diff</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#dave_c1_2" /> <foaf:mbox>alice1@gmail.com</foaf:mbox> <foaf:mbox>alice1@msn.com</foaf:mbox> </rdf:Description> - + + <!-- INTERSECTS for (nom, givenName) / INTERSECTS for (connait, knows) => knows one different--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c1_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>DaveC1</foaf:givenName> @@ -70,10 +82,14 @@ <foaf:givenName>DaveC1_3</foaf:givenName> <foaf:givenName>DaveC1_4</foaf:givenName> <foaf:givenName>DaveC1_5</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#dave_c3_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#carol_c3_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#ivan_2" /> <foaf:mbox>dave@gmail.com</foaf:mbox> <foaf:mbox>dave2@msn.com</foaf:mbox> </rdf:Description> - + + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c2_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>DaveC2</foaf:givenName> @@ -85,7 +101,7 @@ <foaf:mbox>dave@gmail.com</foaf:mbox> <foaf:mbox>dave2@msn.com</foaf:mbox> </rdf:Description> - + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c3_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -99,7 +115,7 @@ <foaf:mbox>dave1@msn.com</foaf:mbox> </rdf:Description> - + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#dave_c4_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -114,7 +130,7 @@ <foaf:mbox>dave1@msn.com</foaf:mbox> </rdf:Description> - + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c1_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -129,6 +145,7 @@ <foaf:mbox>carol1@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c2_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -143,6 +160,7 @@ <foaf:mbox>carol1@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c3_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -157,6 +175,7 @@ <foaf:mbox>carol1@msn.com</foaf:mbox> </rdf:Description> + <!-- INTERSECTS for (nom, givenName)--> <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#carol_c4_2"> <rdf:type rdf:resource="&foaf;Person"/> @@ -171,9 +190,9 @@ <foaf:mbox>carol1@msn.com</foaf:mbox> </rdf:Description> - + <!-- UNIQ --> <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_2"><!-- UNIQ --> + rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>Ivan2</foaf:givenName> <foaf:mbox>ivan@gmail.com</foaf:mbox> diff --git a/test/input/intersects_people_1.rdf b/test/input/intersects_people_1.rdf index dd7779ef..3f417be8 100644 --- a/test/input/intersects_people_1.rdf +++ b/test/input/intersects_people_1.rdf @@ -8,32 +8,37 @@ <!ENTITY exmo "http://exmo.inrialpes.fr/connectors-core/" > ]> <rdf:RDF xmlns="http://exmo.inrialpes.fr/connectors-data/people/" - xml:base="http://exmo.inrialpes.fr/connectors-data/people/" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:foaf="http://xmlns.com/foaf/0.1/" - xmlns:exmo="http://exmo.inrialpes.fr/connectors-core/" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xmlns:xsd="http://www.w3.org/2001/XMLSchema#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + xml:base="http://exmo.inrialpes.fr/connectors-data/people/" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:foaf="http://xmlns.com/foaf/0.1/" + xmlns:exmo="http://exmo.inrialpes.fr/connectors-core/" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <owl:Ontology rdf:about="http://exmo.inrialpes.fr/connectors-data/people/"> - <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> + <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> </owl:Ontology> - - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"><!-- EQUALS --> + <!-- EQUALS for (nom, givenName) / Intersects for (connait, knows)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC1</exmo:nom> <exmo:nom>AliceC1_1</exmo:nom> <exmo:nom>AliceC1_2</exmo:nom> + <exmo:connait>AliceC3_1_diff</exmo:connait> + <exmo:connait>AliceC2_1_diff</exmo:connait> <exmo:boitemel>alice1@gmail.com</exmo:boitemel> <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> - - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"><!-- INTERSECTS on AliceC2--> + + <!-- INTERSECTS on AliceC2 for (nom, givenName) / Equals for (connait, knows)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"> <rdf:type rdf:resource="&exmo;Personne"/> <exmo:nom>AliceC2</exmo:nom> <exmo:nom>AliceC2_1</exmo:nom> <exmo:nom>AliceC2_2</exmo:nom> + <exmo:connait>AliceC3_1_diff</exmo:connait> + <exmo:connait>AliceC4_1_diff</exmo:connait> <exmo:boitemel>alice1@gmail.com</exmo:boitemel> <exmo:boitemel>alice1@msn.com</exmo:boitemel> </rdf:Description> diff --git a/test/input/intersects_people_2.rdf b/test/input/intersects_people_2.rdf index 8b0f1345..5917be00 100644 --- a/test/input/intersects_people_2.rdf +++ b/test/input/intersects_people_2.rdf @@ -7,36 +7,43 @@ <!ENTITY foaf "http://xmlns.com/foaf/0.1/" > ]> <rdf:RDF xmlns="http://exmo.inrialpes.fr/connectors-data/people/" - xml:base="http://exmo.inrialpes.fr/connectors-data/people/" - xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" - xmlns:foaf="http://xmlns.com/foaf/0.1/" - xmlns:owl="http://www.w3.org/2002/07/owl#" - xmlns:xsd="http://www.w3.org/2001/XMLSchema#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + xml:base="http://exmo.inrialpes.fr/connectors-data/people/" + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:foaf="http://xmlns.com/foaf/0.1/" + xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns:xsd="http://www.w3.org/2001/XMLSchema#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <owl:Ontology rdf:about="http://exmo.inrialpes.fr/connectors-data/people/"> - <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> + <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/> </owl:Ontology> - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2"><!-- EQUALS --> + <!-- EQUALS for (nom, givenName) / Intersects for (connait, knows) --> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC1</foaf:givenName> <foaf:givenName>AliceC1_1</foaf:givenName> <foaf:givenName>AliceC1_2</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_2" /> <foaf:mbox>alice2@gmail.com</foaf:mbox> <foaf:mbox>alice2@msn.com</foaf:mbox> </rdf:Description> - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"><!-- INTERSECTS on AliceC2--> + <!-- INTERSECTS on AliceC2 for (nom, givenName) / Equals for (connait, knows)--> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC2</foaf:givenName> <foaf:givenName>AliceC2_1_diff</foaf:givenName> <foaf:givenName>AliceC2_2_diff</foaf:givenName> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_2" /> + <foaf:knows rdf:resource="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_2" /> <foaf:mbox>alice2@gmail.com</foaf:mbox> <foaf:mbox>alice2@msn.com</foaf:mbox> </rdf:Description> - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_2"><!-- UNIQ --> + <!-- UNIQ --> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c3_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC3_1_diff</foaf:givenName> <foaf:givenName>AliceC3_2_diff</foaf:givenName> @@ -47,8 +54,9 @@ <foaf:mbox>alice1@gmail.com</foaf:mbox> <foaf:mbox>alice1@msn.com</foaf:mbox> </rdf:Description> - - <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_2"><!-- UNIQ --> + + <!-- UNIQ --> + <rdf:Description rdf:about="http://exmo.inrialpes.fr/connectors-data/people#alice_c4_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>AliceC4</foaf:givenName> <foaf:givenName>AliceC4_1_diff</foaf:givenName> @@ -61,8 +69,9 @@ <foaf:mbox>alice1@msn.com</foaf:mbox> </rdf:Description> + <!-- UNIQ --> <rdf:Description - rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_2"><!-- UNIQ --> + rdf:about="http://exmo.inrialpes.fr/connectors-data/people#ivan_2"> <rdf:type rdf:resource="&foaf;Person"/> <foaf:givenName>Ivan2</foaf:givenName> <foaf:mbox>ivan@gmail.com</foaf:mbox> diff --git a/test/input/people_relation_equals_alignment.rdf b/test/input/people_relation_equals_alignment.rdf new file mode 100644 index 00000000..6c608667 --- /dev/null +++ b/test/input/people_relation_equals_alignment.rdf @@ -0,0 +1,77 @@ +<?xml version='1.0' encoding='utf-8' standalone='no'?> +<rdf:RDF xmlns='http://knowledgeweb.semanticweb.org/heterogeneity/alignment#' + xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' + xmlns:ns0='http://exmo.inrialpes.fr/align/service#' + xmlns:xsd='http://www.w3.org/2001/XMLSchema#' + xmlns:align='http://knowledgeweb.semanticweb.org/heterogeneity/alignment#' + xmlns:edoal='http://ns.inria.org/edoal/1.0/#'> + <Alignment rdf:about="http://localhost:8089/alid/1394718240757/976"> + <xml>yes</xml> + <level>2EDOAL</level> + <type>?*</type> + <pretty>test1</pretty> + <ns0:cached>Thu Mar 13 14:44:05 CET 2014</ns0:cached> + <ns0:stored>null</ns0:stored> + <time>34</time> + <ns0:ouri2>http://purl.org/ontology/mo/</ns0:ouri2> + <id>http://localhost:8089/alid/1394718240757/976</id> + <ns0:ouri1>http://exmo.inrialpes.fr/connectors/example_musical_work_desc/</ns0:ouri1> + <method>fr.inrialpes.exmo.align.impl.method.SubsDistNameAlignment</method> + <onto1> + <Ontology rdf:about="http://exmo.inrialpes.fr/connectors/example_musical_work_desc/"> + <location>/home/tests/example_musical_work_desc.owl</location> + <formalism> + <Formalism align:name="OWL2.0" align:uri="http://www.w3.org/2002/07/owl#"/> + </formalism> + </Ontology> + </onto1> + <onto2> + <Ontology rdf:about="http://purl.org/ontology/mo/"> + <location>http://purl.org/ontology/mo/</location> + <formalism> + <Formalism align:name="OWL2.0" align:uri="http://www.w3.org/2002/07/owl#"/> + </formalism> + </Ontology> + </onto2> + <map> + <Cell rdf:about="http://exmo.inrialpes.fr/connectors#cell1"> + <entity1> + <edoal:Class rdf:about="http://exmo.inrialpes.fr/connectors-core/Personne"/> + </entity1> + <entity2> + <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> + </entity2> + <relation>=</relation> + <measure rdf:datatype='http://www.w3.org/2001/XMLSchema#float'>1.0</measure> + <edoal:linkkey> + <edoal:Linkkey> + <edoal:binding> + <edoal:Equals> + <edoal:property1> + <edoal:Property rdf:about="http://exmo.inrialpes.fr/connectors-core/connait" /> + </edoal:property1> + <edoal:property2> + <edoal:Property> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation> + <edoal:compose rdf:parseType="Collection"> + <edoal:RelationCoDomainRestriction> + <edoal:class> + <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> + </edoal:class> + </edoal:RelationCoDomainRestriction> + <edoal:Relation rdf:about="http://xmlns.com/foaf/0.1/knows" /> + </edoal:compose> + </edoal:Relation> + <edoal:Property rdf:about="http://xmlns.com/foaf/0.1/givenName" /> + </edoal:compose> + </edoal:Property> + </edoal:property2> + </edoal:Equals> + </edoal:binding> + </edoal:Linkkey> + </edoal:linkkey> + </Cell> + </map> + </Alignment> +</rdf:RDF> diff --git a/test/input/people_relation_intersects_alignment.rdf b/test/input/people_relation_intersects_alignment.rdf new file mode 100644 index 00000000..fa72e0f1 --- /dev/null +++ b/test/input/people_relation_intersects_alignment.rdf @@ -0,0 +1,77 @@ +<?xml version='1.0' encoding='utf-8' standalone='no'?> +<rdf:RDF xmlns='http://knowledgeweb.semanticweb.org/heterogeneity/alignment#' + xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' + xmlns:ns0='http://exmo.inrialpes.fr/align/service#' + xmlns:xsd='http://www.w3.org/2001/XMLSchema#' + xmlns:align='http://knowledgeweb.semanticweb.org/heterogeneity/alignment#' + xmlns:edoal='http://ns.inria.org/edoal/1.0/#'> + <Alignment rdf:about="http://localhost:8089/alid/1394718240757/976"> + <xml>yes</xml> + <level>2EDOAL</level> + <type>?*</type> + <pretty>test1</pretty> + <ns0:cached>Thu Mar 13 14:44:05 CET 2014</ns0:cached> + <ns0:stored>null</ns0:stored> + <time>34</time> + <ns0:ouri2>http://purl.org/ontology/mo/</ns0:ouri2> + <id>http://localhost:8089/alid/1394718240757/976</id> + <ns0:ouri1>http://exmo.inrialpes.fr/connectors/example_musical_work_desc/</ns0:ouri1> + <method>fr.inrialpes.exmo.align.impl.method.SubsDistNameAlignment</method> + <onto1> + <Ontology rdf:about="http://exmo.inrialpes.fr/connectors/example_musical_work_desc/"> + <location>/home/tests/example_musical_work_desc.owl</location> + <formalism> + <Formalism align:name="OWL2.0" align:uri="http://www.w3.org/2002/07/owl#"/> + </formalism> + </Ontology> + </onto1> + <onto2> + <Ontology rdf:about="http://purl.org/ontology/mo/"> + <location>http://purl.org/ontology/mo/</location> + <formalism> + <Formalism align:name="OWL2.0" align:uri="http://www.w3.org/2002/07/owl#"/> + </formalism> + </Ontology> + </onto2> + <map> + <Cell rdf:about="http://exmo.inrialpes.fr/connectors#cell1"> + <entity1> + <edoal:Class rdf:about="http://exmo.inrialpes.fr/connectors-core/Personne"/> + </entity1> + <entity2> + <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> + </entity2> + <relation>=</relation> + <measure rdf:datatype='http://www.w3.org/2001/XMLSchema#float'>1.0</measure> + <edoal:linkkey> + <edoal:Linkkey> + <edoal:binding> + <edoal:Intersects> + <edoal:property1> + <edoal:Property rdf:about="http://exmo.inrialpes.fr/connectors-core/connait" /> + </edoal:property1> + <edoal:property2> + <edoal:Property> + <edoal:compose rdf:parseType="Collection"> + <edoal:Relation> + <edoal:compose rdf:parseType="Collection"> + <edoal:RelationCoDomainRestriction> + <edoal:class> + <edoal:Class rdf:about="http://xmlns.com/foaf/0.1/Person"/> + </edoal:class> + </edoal:RelationCoDomainRestriction> + <edoal:Relation rdf:about="http://xmlns.com/foaf/0.1/knows" /> + </edoal:compose> + </edoal:Relation> + <edoal:Property rdf:about="http://xmlns.com/foaf/0.1/givenName" /> + </edoal:compose> + </edoal:Property> + </edoal:property2> + </edoal:Intersects> + </edoal:binding> + </edoal:Linkkey> + </edoal:linkkey> + </Cell> + </map> + </Alignment> +</rdf:RDF> diff --git a/test/src/SPARQLSelectRendererVisitorTest.java b/test/src/SPARQLSelectRendererVisitorTest.java index 766e88bc..1aad28cb 100644 --- a/test/src/SPARQLSelectRendererVisitorTest.java +++ b/test/src/SPARQLSelectRendererVisitorTest.java @@ -9,7 +9,6 @@ import fr.inrialpes.exmo.align.impl.renderer.SPARQLSelectRendererVisitor; import fr.inrialpes.exmo.align.test.Utils; import java.io.PrintWriter; import java.io.StringWriter; -import java.net.URI; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; @@ -17,7 +16,6 @@ import java.util.Properties; import org.semanticweb.owl.align.Cell; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; -import static org.testng.Assert.fail; import org.testng.annotations.Test; /** @@ -40,7 +38,6 @@ public class SPARQLSelectRendererVisitorTest { Enumeration<Cell> cells = alignment.getElements(); Cell cell = cells.nextElement(); - //Without any service => String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" @@ -52,173 +49,20 @@ public class SPARQLSelectRendererVisitorTest { + "}\n"; assertEquals(renderer.getQueryFromOnto1ToOnto2(cell), expectedQuery); -// //With service on first -// URI remoteURI1 = new URI("http://example.org/data.rdf"); -// URI remoteURI2 = new URI("http://example2.org/data.rdf"); -// expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" -// + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" -// + "SELECT ?s1 ?s2" -// + "WHERE {\n" -// + "SERVICE <http://example.org/data.rdf> {" -// + "?s1 rdf:type ns0:RootElement .\n" -// + "}\n" -// + "?s2 rdf:type ns1:MusicalWork .\n" -// + "}\n"; -// assertEquals(renderer.getQuery(cell, remoteURI1, null), expectedQuery); -// -// //With service on second -// expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" -// + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" -// + "SELECT ?s1 ?s2" -// + "WHERE {\n" -// + "?s1 rdf:type ns0:RootElement .\n" -// + "SERVICE <http://example2.org/data.rdf> {" -// + "?s2 rdf:type ns1:MusicalWork . \n" -// + "?s2 ns1:opus ?o1" -// + "}\n" -// + "}\n"; -// assertEquals(renderer.getQuery(cell, null, remoteURI2), expectedQuery); -// -// -// //With service on all -// expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" -// + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" -// + "SELECT ?s1 ?s2" -// + "WHERE {\n" -// + "SERVICE <http://example1.org/data.rdf> {" -// + "?s1 rdf:type ns0:RootElement .\n" -// + "}\n" -// + "SERVICE <http://example2.org/data.rdf> {" -// + "?s2 rdf:type ns1:MusicalWork . \n" -// + "}\n" -// + "}\n"; -// assertEquals(renderer.getQuery(cell, remoteURI1, remoteURI2), expectedQuery); - } - - @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey", "QueryFromSimpleLinkkeyFromIntersects"}) - public void QueryFromSimpleLinkkeyFromEquals() throws Exception { - //With Equals Linkkey => throw Exception, I already don't know to do it, could be performances innefficiente ... - String alignmentFileName = "people_equals_alignment.rdf"; - EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); - StringWriter stringWriter = new StringWriter(); - PrintWriter writer = new PrintWriter(stringWriter); - SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); - Properties properties = new Properties(); - renderer.init(properties); - alignment.render(renderer); - - assertEquals(alignment.nbCells(), 1); - Enumeration<Cell> cells = alignment.getElements(); - Cell cell = cells.nextElement(); - //Without any service - String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" - + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" - + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" + expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" + + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" + + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" + "SELECT DISTINCT ?s1 ?s2 \n" + "WHERE {\n" - + "?s1 rdf:type ns0:Personne .\n" - + "?s2 rdf:type ns1:Person .\n" - + "?s1 ns0:nom ?o1 .\n" - + "?s2 ns1:givenName ?o2 .\n" - + "MINUS { \n" - + "SELECT DISTINCT ?s1 ?s2 \n" - + "WHERE \n" - + "{ \n" - + "?s1 ns0:nom ?o1 .\n" - + "?s1 ns0:nom ?o2 .\n" - + "?s2 ns1:givenName ?o3 .\n" - + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && ?o3 = ?o1 && NOT EXISTS {\n" - + "?s2 ns1:givenName ?o2 .\n" - + "}) \n" - + "} \n" - + "} \n" - + "MINUS {\n" - + "SELECT DISTINCT ?s1 ?s2 \n" - + "WHERE \n" - + "{ \n" - + "?s1 ns0:nom ?o1 .\n" - + "?s2 ns1:givenName ?o2 .\n" - + "?s2 ns1:givenName ?o3 .\n" - + "FILTER(?s1 != ?s2 && ?o2 != ?o3 && ?o2 = ?o1 && NOT EXISTS {\n" - + "?s1 ns0:nom ?o3 .\n" - + "})\n" - + "}\n" - + "}\n" - + "FILTER(?s1 != ?s2 && ?o2 = ?o1)\n" + + "?s2 rdf:type ns0:RootElement .\n" + + "?s1 rdf:type ns1:MusicalWork .\n" + + "FILTER(?s1 != ?s2)\n" + "}\n"; -// System.out.println("QUERY 1 : " + expectedQuery); -// System.out.println("QUERY 2 : " + renderer.getQueryFromOnto1ToOnto2(cell)); - String query = renderer.getQueryFromOnto1ToOnto2(cell);//Where ?p1 is in onto1 -// System.out.println("QueryFromOnto1ToOnto2 : \n" + query); - assertEquals(query, expectedQuery); - - Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); - Query selectQuery = QueryFactory.create(query); - String[] expectedS1 = { - "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"}; - String[] expectedS2 = { - "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2",}; -// Utils.showResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); - HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); - Collection<String> resultValues = allResultValues.get("s1"); - assertEquals(resultValues.size(), expectedS1.length); - for (String expected : expectedS1) { - assertTrue(resultValues.contains(expected), "For expected : " + expected); - } - - resultValues = allResultValues.get("s2"); - assertEquals(resultValues.size(), expectedS2.length); - for (String expected : expectedS2) { - assertTrue(resultValues.contains(expected), "For expected : " + expected); - } - - //With from onto2ToOnto1 - query = renderer.getQueryFromOnto2ToOnto1(cell);//Where ?p1 is in onto2 -// System.out.println("QueryFromOnto2ToOnto1 : \n" + query); - values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); - selectQuery = QueryFactory.create(query); -// Utils.showResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); - allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); - - resultValues = allResultValues.get("s1"); - assertEquals(resultValues.size(), expectedS1.length); - for (String expected : expectedS2) {//Change here - assertTrue(resultValues.contains(expected), "For expected : " + expected); - } - - resultValues = allResultValues.get("s2"); - assertEquals(resultValues.size(), expectedS2.length); - for (String expected : expectedS1) {//Change here - assertTrue(resultValues.contains(expected), "For expected : " + expected); - } - - -// URI remoteURI1 = new URI("http://example.org/data.rdf"); -// URI remoteURI2 = new URI("http://example.org/data.rdf"); -// String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" -// + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" -// + "SELECT ?s1 ?s2" -// + "WHERE {\n" -// + "SERVICE <http://example1.org/data.rdf> {" -// + "?s1 rdf:type ns0:RootElement .\n" -// + "?s1 ns0:number ?o1 ." -// + "}\n" -// + "SERVICE <http://example2.org/data.rdf> {" -// + "?s2 rdf:type ns1:MusicalWork . \n" -// + "?s2 ns1:opus ?o1" -// + "}\n" -// + "}\n"; -// -// assertEquals(renderer.getQuery(cell, remoteURI1, remoteURI2), expectedQuery); + assertEquals(renderer.getQueryFromOnto2ToOnto1(cell), expectedQuery); } @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey"}) public void QueryFromSimpleLinkkeyFromIntersects() throws Exception { - //With Equals Linkkey => throw Exception, I already don't know to do it, could be performances innefficiente ... String alignmentFileName = "people_intersects_alignment.rdf"; EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); StringWriter stringWriter = new StringWriter(); @@ -243,7 +87,7 @@ public class SPARQLSelectRendererVisitorTest { // FILTER(?s1 != ?s2 && ?o2 = ?o1) // } String query = renderer.getQueryFromOnto1ToOnto2(cell); -// System.out.println("QueryFromSimpleLinkkeyFromIntersects : " + query); +// System.out.println("QUERY = " + query); Model values = Utils.loadValues(new String[]{"intersects_people_1.rdf", "intersects_people_2.rdf"}); Query selectQuery = QueryFactory.create(query); @@ -251,10 +95,10 @@ public class SPARQLSelectRendererVisitorTest { ResultSet results = selectQueryExec.execSelect(); String[] expectedS1 = { "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1", - "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1",}; + "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"}; String[] expectedS2 = { "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2", - "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2",}; + "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"}; HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(results); Collection<String> resultValues = allResultValues.get("s1"); assertEquals(resultValues.size(), expectedS1.length); @@ -267,31 +111,259 @@ public class SPARQLSelectRendererVisitorTest { for (String expected : expectedS2) { assertTrue(resultValues.contains(expected)); } + //Ok for other sens : + query = renderer.getQueryFromOnto2ToOnto1(cell); + values = Utils.loadValues(new String[]{"intersects_people_1.rdf", "intersects_people_2.rdf"}); - // With remote services -// URI remoteURI1 = new URI("http://example.org/data.rdf"); -// URI remoteURI2 = new URI("http://example.org/data.rdf"); + selectQuery = QueryFactory.create(query); + selectQueryExec = QueryExecutionFactory.create(selectQuery, values); + results = selectQueryExec.execSelect(); + allResultValues = Utils.getResultValues(results); + resultValues = allResultValues.get("s1"); + assertEquals(resultValues.size(), expectedS2.length); + for (String expected : expectedS2) { + assertTrue(resultValues.contains(expected), "For expected : " + expected); + } + + resultValues = allResultValues.get("s2"); + assertEquals(resultValues.size(), expectedS1.length); + for (String expected : expectedS1) { + assertTrue(resultValues.contains(expected)); + } + } +// +// @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey", "QueryFromSimpleLinkkeyFromIntersects"}) +// public void QueryFromSimpleLinkkeyFromEquals() throws Exception { +// String alignmentFileName = "people_equals_alignment.rdf"; +// EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); +// StringWriter stringWriter = new StringWriter(); +// PrintWriter writer = new PrintWriter(stringWriter); +// SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); +// Properties properties = new Properties(); +// renderer.init(properties); +// alignment.render(renderer); +// +// assertEquals(alignment.nbCells(), 1); +// Enumeration<Cell> cells = alignment.getElements(); +// Cell cell = cells.nextElement(); +// //Without any service // String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" -// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors#>\n" -// + "PREFIX ns1:<http://purl.org/ontology/mo/>\n" -// + "SELECT ?s1 ?s2" +// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" +// + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" +// + "SELECT DISTINCT ?s1 ?s2 \n" // + "WHERE {\n" -// + "SERVICE <http://example1.org/data.rdf> {" -// + "?s1 rdf:type ns0:RootElement .\n" -// + "?s1 ns0:number ?o1 ." +// + "?s1 rdf:type ns0:Personne .\n" +// + "?s2 rdf:type ns1:Person .\n" +// + "?s1 ns0:nom ?o1 .\n" +// + "?s2 ns1:givenName ?o2 .\n" +// + "MINUS { \n" +// + "SELECT DISTINCT ?s1 ?s2 \n" +// + "WHERE \n" +// + "{ \n" +// + "?s1 ns0:nom ?o1 .\n" +// + "?s1 ns0:nom ?o2 .\n" +// + "?s2 ns1:givenName ?o3 .\n" +// + "FILTER(?s1 != ?s2 && ?o2 != ?o1 && ?o3 = ?o1 && NOT EXISTS {\n" +// + "?s2 ns1:givenName ?o2 .\n" +// + "}) \n" +// + "} \n" +// + "} \n" +// + "MINUS {\n" +// + "SELECT DISTINCT ?s1 ?s2 \n" +// + "WHERE \n" +// + "{ \n" +// + "?s1 ns0:nom ?o1 .\n" +// + "?s2 ns1:givenName ?o2 .\n" +// + "?s2 ns1:givenName ?o3 .\n" +// + "FILTER(?s1 != ?s2 && ?o2 != ?o3 && ?o2 = ?o1 && NOT EXISTS {\n" +// + "?s1 ns0:nom ?o3 .\n" +// + "})\n" // + "}\n" -// + "SERVICE <http://example2.org/data.rdf> {" -// + "?s2 rdf:type ns1:MusicalWork . \n" -// + "?s2 ns1:opus ?o1" // + "}\n" +// + "FILTER(?s1 != ?s2 && ?o2 = ?o1)\n" // + "}\n"; -// -// assertEquals(renderer.getQuery(cell, remoteURI1, remoteURI2), expectedQuery); - } +// String query = renderer.getQueryFromOnto1ToOnto2(cell);//Where ?p1 is in onto1 +// System.out.println("QueryFromSimpleLinkkeyFromEquals expected Query : " + expectedQuery); +//// assertEquals(query, expectedQuery); +// +// Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); +// Query selectQuery = QueryFactory.create(query); +// String[] expectedS1 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1"}; +// String[] expectedS2 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2",}; +// HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); +// Collection<String> resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS1) { +// assertTrue(resultValues.contains(expected), "For expected : " + expected); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS2) { +// assertTrue(resultValues.contains(expected), "For expected : " + expected); +// } +// +// //With from onto2ToOnto1 +// query = renderer.getQueryFromOnto2ToOnto1(cell);//Where ?p1 is in onto2 +// values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); +// selectQuery = QueryFactory.create(query); +// allResultValues = Utils.getResultValues(QueryExecutionFactory.create(selectQuery, values).execSelect()); +// +// resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS2) {//Change here +// assertTrue(resultValues.contains(expected), "For expected : " + expected); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS1) {//Change here +// assertTrue(resultValues.contains(expected), "For expected : " + expected); +// } +// } +// +// @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {})//"QueryFromSimpleLinkkeyFromIntersects" +// public void QueryFromRelationLinkkeyAndIntersects() throws Exception { +// String alignmentFileName = "people_relation_intersects_alignment.rdf"; +// EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); +// StringWriter stringWriter = new StringWriter(); +// PrintWriter writer = new PrintWriter(stringWriter); +// SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); +// Properties properties = new Properties(); +// renderer.init(properties); +// alignment.render(renderer); // +// assertEquals(alignment.nbCells(), 1); +// Enumeration<Cell> cells = alignment.getElements(); +// Cell cell = cells.nextElement(); +// +// Model values = Utils.loadValues(new String[]{"intersects_people_1.rdf", "intersects_people_2.rdf"}); +// +// String query = renderer.getQueryFromOnto1ToOnto2(cell); +// String expectedQuery = "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>\n" +// + "PREFIX ns0:<http://exmo.inrialpes.fr/connectors-core/>\n" +// + "PREFIX ns1:<http://xmlns.com/foaf/0.1/>\n" +// + "SELECT DISTINCT ?s1 ?s2 \n" +// + "WHERE {\n" +// + "?s1 rdf:type ns0:Personne .\n" +// + "?s2 rdf:type ns1:Person .\n" +// + "?s1 ns0:connait ?o1 .\n" +// + "?s2 ns1:knows ?o2 .\n" +// + "?o2 rdf:type ns1:Person .\n" +// + "?o2 ns1:givenName ?o3 .\n" +// + "FILTER(?s1 != ?s2 && ?o3 = ?o1)\n" +// + "}"; +// System.out.println("QueryFromRelationLinkkeyAndIntersects expectedQuery : " + expectedQuery); +// System.out.println("query : " + query); +//// assertEquals(expectedQuery, query); +// Query selectQuery = QueryFactory.create(query); +// QueryExecution selectQueryExec = QueryExecutionFactory.create(selectQuery, values); +// ResultSet results = selectQueryExec.execSelect(); +// String[] expectedS1 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_1", +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"}; +// String[] expectedS2 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c1_2", +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"}; +// +// HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(results); +// Collection<String> resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS1) { +// assertTrue(resultValues.contains(expected)); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS2) { +// assertTrue(resultValues.contains(expected)); +// } +// //On other sens : +// query = renderer.getQueryFromOnto2ToOnto1(cell); +// selectQuery = QueryFactory.create(query); +// selectQueryExec = QueryExecutionFactory.create(selectQuery, values); +// results = selectQueryExec.execSelect(); +// +// allResultValues = Utils.getResultValues(results); +// resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS2) { +// assertTrue(resultValues.contains(expected)); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS1) { +// assertTrue(resultValues.contains(expected)); +// } +// } +// +// @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromSimpleLinkkeyFromEquals"}) +// public void QueryFromRelationLinkkeyAndEquals() throws Exception { +// //With Equals Linkkey => throw Exception, I already don't know to do it, could be performances innefficiente ... +// String alignmentFileName = "people_relation_equals_alignment.rdf"; +// EDOALAlignment alignment = Utils.loadAlignement(alignmentFileName); +// StringWriter stringWriter = new StringWriter(); +// PrintWriter writer = new PrintWriter(stringWriter); +// SPARQLSelectRendererVisitor renderer = new SPARQLSelectRendererVisitor(writer); +// Properties properties = new Properties(); +// renderer.init(properties); +// alignment.render(renderer); +// +// assertEquals(alignment.nbCells(), 1); +// Enumeration<Cell> cells = alignment.getElements(); +// Cell cell = cells.nextElement(); +// String query = renderer.getQueryFromOnto1ToOnto2(cell); +//// System.out.println("QueryFromSimpleLinkkeyFromIntersects : " + query); +// Model values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); +// +// Query selectQuery = QueryFactory.create(query); +// QueryExecution selectQueryExec = QueryExecutionFactory.create(selectQuery, values); +// ResultSet results = selectQueryExec.execSelect(); +// String[] expectedS1 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_1"}; +// String[] expectedS2 = { +// "http://exmo.inrialpes.fr/connectors-data/people#alice_c2_2"}; +// HashMap<String, Collection<String>> allResultValues = Utils.getResultValues(results); +// Collection<String> resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS1) { +// assertTrue(resultValues.contains(expected)); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS2) { +// assertTrue(resultValues.contains(expected)); +// } +// +// //Other sens +// query = renderer.getQueryFromOnto2ToOnto1(cell); +//// System.out.println("QueryFromSimpleLinkkeyFromIntersects : " + query); +// values = Utils.loadValues(new String[]{"equals_people_1.rdf", "equals_people_2.rdf"}); +// +// selectQuery = QueryFactory.create(query); +// selectQueryExec = QueryExecutionFactory.create(selectQuery, values); +// results = selectQueryExec.execSelect(); +// allResultValues = Utils.getResultValues(results); +// resultValues = allResultValues.get("s1"); +// assertEquals(resultValues.size(), expectedS2.length); +// for (String expected : expectedS2) { +// assertTrue(resultValues.contains(expected)); +// } +// +// resultValues = allResultValues.get("s2"); +// assertEquals(resultValues.size(), expectedS1.length); +// for (String expected : expectedS1) { +// assertTrue(resultValues.contains(expected)); +// } +// +// } + // @Test(groups = {"full", "impl", "raw"}, dependsOnMethods = {"QueryFromWithoutLinkkey", "QueryFromSimpleLinkkeyFromEquals"}) -// public void HaveTodo() throws Exception { +// public void QueryFromSimpleLinkkeyFromIntersectsAndRelation() throws Exception { // fail("HAVE TODO : with (in + eq) => OPTIONAL (with SERVICE call on remote) / many correspondances / With transformations / On local (FROM ...) or remote sparql endpoint (SERVICE) "); // } - } -- GitLab