clerezza-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r...@apache.org
Subject [08/14] clerezza git commit: CLEREZZA-966: moved stable serializer to rdf folder
Date Thu, 23 Apr 2015 20:41:12 GMT
http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/libby.foaf
----------------------------------------------------------------------
diff --git a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/libby.foaf b/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/libby.foaf
deleted file mode 100644
index c35551e..0000000
--- a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/libby.foaf
+++ /dev/null
@@ -1,581 +0,0 @@
-<?xml version="1.0"?>
-
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-        xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
-	xmlns:rss="http://purl.org/rss/1.0/"
-        xmlns:foaf="http://xmlns.com/foaf/0.1/"
-        xmlns="http://xmlns.com/foaf/0.1/"
-        xmlns:dc="http://purl.org/dc/elements/1.1/"
-	xmlns:wot="http://xmlns.com/wot/0.1/"
-        xmlns:wn="http://xmlns.com/wordnet/1.6/"
-	xmlns:ical="http://www.w3.org/2002/12/cal/ical#"
-        xmlns:cert="http://www.w3.org/ns/auth/cert#"
-        xmlns:rsa="http://www.w3.org/ns/auth/rsa#"
- >
-
-	<rsa:RSAPublicKey>
-		<rsa:public_exponent cert:decimal="65537" />
-		<rsa:modulus cert:hex="a6ba714e909a05a437bafc269b2cdda72a318fbab610aac95f74207ca2288c78cb95e48b78fcb6fdd63971375d11076483413a70ef9647867d5f9faa1c0f726252b793ab5407bed90f17e50bd0482b42c5f569fda5c4ad7d62bfeaa777f6799a7772dde8ff62f0e07ab29d11f70fac9ee79c4108914f020347319f58622f18f5" />
-		<cert:identity>
-			<foaf:Person rdf:about="http://swordfish.rdfweb.org/people/libby/rdfweb/webwho.xrdf#me" />
-		</cert:identity>
-	</rsa:RSAPublicKey>
-
-<rdf:Description rdf:about="http://swordfish.rdfweb.org/people/libby/rdfweb/webwho.xrdf">
-<foaf:maker>
-<foaf:Person>
-<foaf:name>Libby Miller</foaf:name>
-<foaf:nick>libby</foaf:nick>
-<foaf:mbox_sha1sum>01e253737c46286ff7cc1183be05ab64fea15438</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>f68e81ac6289ffd7391bd2c53ab1dc6447d09a2e</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>80f78952ba7c71bc9a0a38de415692922a3f6024</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>289d4d44325d0b0218edc856c8c3904fa3fd2875</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>f68e81ac6289ffd7391bd2c53ab1dc6447d09a2e</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>01e253737c46286ff7cc1183be05ab64fea15438</foaf:mbox_sha1sum>
-<foaf:depiction rdf:resource="http://swordfish.rdfweb.org/people/libby/libby.jpg" />
-
-
-<!--
-<rdfs:seeAlso>
-	<ical:Vcalendar
-rdf:about="http://ilrt.org/people/libby/calendar/exportrred20030414.rdf"/>
-</rdfs:seeAlso>
--->
-
-<foaf:homepage rdf:resource="http://nicecupoftea.org"/>
-<foaf:weblog rdf:resource="http://planb.nicecupoftea.org/"/>
-
-<rdfs:seeAlso rdf:resource="http://swordfish.rdfweb.org/people/libby/rdfweb/libby-biblio.rdf" />
-<rdfs:seeAlso rdf:resource="http://swordfish.rdfweb.org/people/libby/rdfweb/libby-foaf.rdf"/>
-<rdfs:seeAlso
-rdf:resource="http://swordfish.rdfweb.org/discovery/2001/08/codepict/scutterplan.rdf"/>
-
-<foaf:workplaceHomepage rdf:resource="http://www.joost.com"/>
-
-<foaf:interest rdf:resource="http://dev.joost.com/widgets/"/>
-<foaf:interest rdf:resource="http://rdfweb.org"/>
-<foaf:interest rdf:resource="http://lists.w3.org/Archives/Public/www-rdf-calendar/"/>
-<foaf:interest rdf:resource="http://lists.w3.org/Archives/Public/www-rdf-rules/" />
-<foaf:interest rdf:resource="http://rdfweb.org/people/damian/2001/10/RDFAuthor/" />
-<foaf:interest rdf:resource="http://www.w3.org/RDF/" />
-<foaf:interest rdf:resource="http://www.w3.org/2000/01/sw/" />
-
-
-<foaf:currentProject>
-	<foaf:Project>
-		<dc:title>RDFWeb codepiction</dc:title>
-		<dc:description>A demonstrator of codepiction of people in photos in RDFWeb</dc:description>
-		<dc:identifier rdf:resource="http://swordfish.rdfweb.org/discovery/2001/08/codepict/"/>
-	</foaf:Project>
-</foaf:currentProject>
-
-<foaf:subscribesTo
-rdf:resource="http://www.economics.ltsn.ac.uk/events/events.xml"/>
-
- <wot:accountInfo>
-  <wot:WebAccount>
-   <wot:accountName>General use</wot:accountName>
-   <wot:accountDescription>A general purpose low security login for
-photos, files etc.</wot:accountDescription>
-   <wot:userid>libby</wot:userid>
-   <wot:cryptedPassword>liJPZp286OEMEl</wot:cryptedPassword>
-   <wot:passwordHint>(this should be encrypted to the users public
-key?</wot:passwordHint>
-  </wot:WebAccount>
- </wot:accountInfo>
-
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>f30065df6b58584bd16373eee43c9f8e2ffb9a76</mbox_sha1sum>
-<mbox_sha1sum>89a38611df70f827f2c7c13c334bd48cbe0dc97b</mbox_sha1sum>
-<name>Damian Steer</name>
-<foaf:nick>shellac</foaf:nick>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
- <Person>
-<mbox_sha1sum>362ce75324396f0aa2d3e5f1246f40bf3bb44401</mbox_sha1sum>
-<mbox_sha1sum>748934f32135cfcf6f8c06e253c53442721e15e7</mbox_sha1sum>
-<name>Dan Brickley</name>
-<foaf:nick>danbri</foaf:nick>
-<foaf:nick>bandri</foaf:nick>
-</Person>
-
-</foaf:knows>
-<foaf:knows>
- <Person>
-<mbox_sha1sum>eda070d04d7495fa13e43cf964526d62b60a0566</mbox_sha1sum>
-<name>Max Froumentin</name>
-<foaf:nick>maxf</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>0a5eaa538253e5f5fdecf0c81065052f18f0ab25</mbox_sha1sum>
-<name>Craig Dibble</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>46554fe08bec8edd3e94281377d641666ce7ecb5</mbox_sha1sum>
-<name>Martin Poulter</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>1839a1cc2e719a85ea7d9007f587b2899cd94064</mbox_sha1sum>
-<name>Amy van der Hiel</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>35022e505e6a64c05837eccf4beb5d8f981a4e5a</mbox_sha1sum>
-<mbox_sha1sum>1cf334c4f66a790b9b388768d4f07e1efea40773</mbox_sha1sum>
-<name>Jim Ley</name>
-<foaf:nick>jibberjim</foaf:nick>
-
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Chris Croome</name>
-<mbox_sha1sum>3622df31544ccc1c46c014195083f36f9a99a348</mbox_sha1sum>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Nadia Heninger</name>
-<mbox_sha1sum>584328833bca45b9342e976291f1b55ca8d405cd</mbox_sha1sum>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Earle Martin</name>
-<mbox_sha1sum>f31433ec4215e283bb07d19aa17779ad5245c796</mbox_sha1sum>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Nick Gibbins</name>
-<mbox_sha1sum>28339a9a36ee4e330da9613958efb89e2961c6cb</mbox_sha1sum>
-<foaf:nick>nmg</foaf:nick>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Leigh Dodds</name>
-<mbox_sha1sum>1bca73e5c6916c738d6ec7cc0597ad0e395e7ace</mbox_sha1sum>
-<foaf:nick>ldodds</foaf:nick>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Jonathan Chetwynd</name>
-<mbox_sha1sum>fa39428e74171a48bf7a52c737b59b290ac3c9fe</mbox_sha1sum>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Daniel Krech</name>
-<mbox_sha1sum>3665f4f2370ddd6358da4062f3293f6dc7f39b7c</mbox_sha1sum>
-<foaf:nick>eikeon</foaf:nick>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>P&#228;r Lanner&#246;</name>
-<mbox_sha1sum>2482e2c8a03f35a41782e0f8d620f715b944003a</mbox_sha1sum>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>878573be8bbd41dba97f9f376d29c29533fcb299</mbox_sha1sum>
-<name>Matt Biddulph</name>
-<foaf:nick>mattb</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
-<Person>
-<mbox_sha1sum>f0e7ea3139fbe45e76b904bdb755fb0b9fce2572</mbox_sha1sum>
-<name>Matthew Miller</name>
-</Person>
-
-
-
-</foaf:knows>
-<foaf:knows>
- <Person>
-<mbox_sha1sum>542ebbcab0da94d1a5f5d6f1cb6ac9e8a9d9158e</mbox_sha1sum>
-<name>Sarah Miller</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>4829af19130151de1c4def299d73d33f33dee0fb</mbox_sha1sum>
-<name>Jo Walsh</name>
-<foaf:nick>zool</foaf:nick>
-</Person>
-</foaf:knows>
-
-<foaf:knows>
- <Person>
-<mbox_sha1sum>c66b1cf8ee172f06b7b41f9e6257623ba14eab5f</mbox_sha1sum>
-<name>Sean B. Palmer</name>
-<foaf:nick>sbp</foaf:nick>
-</Person>
-
-</foaf:knows>
-
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>9f33f246b39a77c1fdff99df1938ef5dac8b20e9</mbox_sha1sum>
-<name>Liz Dibble</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
- <Person>
-
- <mbox_sha1sum>632054bd9d1d119f99d6858ef64d3f13a3caab87</mbox_sha1sum>
-<name>Liz Turner</name>
-<foaf:nick>ephidrina</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>7e572a9e12f2e2fac40039b3986a59daf47c9de6</mbox_sha1sum>
-<name>Big James</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>fd991c34194a4428e70cdcc8068deaa6f35464fe</mbox_sha1sum>
-<name>Edd Dumbill</name>
-<foaf:nick>edd</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>8e26096857d5a99f23bff38a520892e336b56f7d</mbox_sha1sum>
-<name>William Loughborough</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>26cbe7a75effa2ccc5c144a43fc57e19b292393e</mbox_sha1sum>
-<name>Wendy Chisholm</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>a74399757727c5f4a48e63921b8cc206f73d5fe</mbox_sha1sum>
-<name>Charles McCathieNevile</name>
-<foaf:nick>chaals</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>970987f991961f2553a1bf2574166fa29befbccb</mbox_sha1sum>
-<name>Dave Beckett</name>
-<foaf:nick>dajobe</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>702f38a6bae2aa171191a71e2769f4daf3ef8833</mbox_sha1sum>
-<name>Liddy Nevile</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>867ac51a36819bbc36620c41edecdc1372fb75dc</mbox_sha1sum>
-<name>Jan Grant</name>
-<foaf:nick>jang</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>8ff4ac9258e86bf5b5df2e8db23672e023c5d9dc</mbox_sha1sum>
-<name>Paul Shabajee</name>
-<foaf:nick>pshab</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>8f2f0c59ae2203bd238093e01c3954d10f90b1fb</mbox_sha1sum>
-<name>Kate Sharp</name>
-<foaf:nick>kates</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>e2d67791b2a0ce3441c0c770f94daa130b4e6d95</mbox_sha1sum>
-<mbox_sha1sum>5697bf372610b25e0058f5f62cc75276d9606d44</mbox_sha1sum>
-<name>Eric Prud'hommeaux</name>
-<foaf:nick>ericp</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>69b6e650e8223013c086b0c7b275037a6c6be8eb</mbox_sha1sum>
-<name>Margaret Hart</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>94b6eb0c835f928c5ed565dc3ed1a355ac1b41e5</mbox_sha1sum>
-<name>Dan Connolly</name>
-<foaf:nick>danc</foaf:nick>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>7ebde4f3ecdd8ff3899cf268d20c0227bd23602f</mbox_sha1sum>
-<name>David Miller</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
-<Person>
-<mbox_sha1sum>fd1c7fa497930b8b24e3998927fcebe63509ef20</mbox_sha1sum>
-<name>Eric Miller</name>
-</Person>
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>1a29b5b983c8e5fc1f953eccfd384496c3ddc161</mbox_sha1sum>
-<name>Judith Miller</name>
-</Person>
-
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Lars Marius Garshol</name>
-<mbox_sha1sum>a598db95e98e4c9e88d0b5f6741106df16ef139b</mbox_sha1sum>
-<foaf:nick>larsbot</foaf:nick>
-</Person>
-</foaf:knows>
-
-
-<foaf:knows>
-<Person>
- <mbox_sha1sum>917a511baeebf5adb3265fd5323fa7bc516f2852</mbox_sha1sum>
-<name>Kal Ahmed</name>
-</Person>
-</foaf:knows>
-
-
-<foaf:knows>
-<Person>
-<mbox_sha1sum>fdbafa77a1c811b1f9dd1b73c701ee281bfbdf69</mbox_sha1sum>
-<name>Mary Nishikawa</name>
-</Person>
-</foaf:knows>
-
-
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>feb7e9a206907a123e3f66d276b79549f1a7f3de</mbox_sha1sum>
-<name>Aaron Swartz</name>
-<foaf:nick>aaronsw</foaf:nick>
-</Person>
-
-</foaf:knows>
-<foaf:knows>
-
- <Person>
-<mbox_sha1sum>f87f3b42808adf5e7f60c5df0eb98e1091d7d222</mbox_sha1sum>
-<name>Nicole Sullivan</name>
-<foaf:nick>nicole</foaf:nick>
-</Person>
-
-</foaf:knows>
-
-<foaf:knows>
-<Person>
-<name>Alberto Reggiori</name>
-<mbox_sha1sum>e2a4008e49a394a2d46150b7d6488cd52be327e1</mbox_sha1sum>
-<mbox_sha1sum>1fe426b4986ce38f3be5aa84f4db5193302000c6</mbox_sha1sum>
-<rdfs:seeAlso
-rdf:resource="http://www.asemantics.com/people/alberto.rdf"/>
-<foaf:nick>alberto</foaf:nick>
-</Person>
-</foaf:knows>
-
-
-<foaf:knows>
-<foaf:Person>
-<foaf:mbox_sha1sum>b2cee56f16bc7ce9c1a3f594588056119f25e2e2</foaf:mbox_sha1sum>
-<foaf:mbox_sha1sum>21477c8c0299c976e64b729c8f09fc3f8be307f2</foaf:mbox_sha1sum>
-<foaf:name>Dirk-Willem van Gulik</foaf:name>
-<rdfs:seeAlso
-rdf:resource="http://www.asemantics.com/people/dirkx.rdf"/>
-<foaf:nick>dirkx</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
-<foaf:Person>
-<foaf:mbox_sha1sum>56dbb0962ec28e8d3f77868a0ef9ba70f09f9a92</foaf:mbox_sha1sum>
-<foaf:name>Zavisa Bjelogrlic</foaf:name>
-<rdfs:seeAlso rdf:resource="http://www.asemantics.com/people/zac.rdf"/>
-<foaf:nick>binzac</foaf:nick>
-
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
-<foaf:Person>
-<foaf:mbox_sha1sum>31c52c8f19a0c1c79addf0e87d80418ece756865</foaf:mbox_sha1sum>
-<foaf:name>David Norheim</foaf:name>
-<rdfs:seeAlso
-rdf:resource="http://www.asemantics.com/people/david.rdf"/>
-</foaf:Person>
-</foaf:knows>
-
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>669fe353dbef63d12ba11f69ace8acbec1ac8b17</foaf:mbox_sha1sum>
-<foaf:name>Danny Ayers</foaf:name>
-<foaf:nick>danja</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>6bdc3a6be4cc72c578d4ab01a618bbd9563bcd5b</foaf:mbox_sha1sum>
-<foaf:name>Graham Klyne</foaf:name>
-<foaf:nick>gk</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>ffff2cddff6ce89ad0d25ffccc4f0051caf8d6e0</foaf:mbox_sha1sum>
-<foaf:name>Masahide Kanzaki</foaf:name>
-<foaf:nick>masaka</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>44bc4fed584a2d1ac8fc55206db67656165d67fd</foaf:mbox_sha1sum>
-<foaf:name>Steve Harris</foaf:name>
-<foaf:nick>swh</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>65b983bb397fb71849da910996741752ace8369b</foaf:mbox_sha1sum>
-<foaf:name>Morten Frederiksen</foaf:name>
-<foaf:nick>mortenf</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>dae368b5acd44c3cbe9ba8d25c1e54df3391ea8c</foaf:mbox_sha1sum>
-<foaf:name>Jipp</foaf:name>
-<foaf:nick>jipp</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>f80a0f19d2a0897b89f48647b2fb5ca1f0bc1cb8</foaf:mbox_sha1sum>
-<foaf:name>Greg Williams</foaf:name>
-<foaf:nick>kasei</foaf:nick>
-</foaf:Person>
-</foaf:knows>
-
-<foaf:knows>
- <foaf:Person>
-<foaf:mbox_sha1sum>927ed281057a507d882338eb57f74551f6771325</foaf:mbox_sha1sum>
-<foaf:name>Ludovic Hirlimann</foaf:name>
-<foaf:nick>lhirlimann</foaf:nick>
-<rdfs:seeAlso rdf:resource="http://perso.hirlimann.net/~ludo/foaf.rdf"/>
-</foaf:Person>
-</foaf:knows>
-
-
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-11.rdf">
-	<dc:title>Rome and the day before sparqling</dc:title>
-	</wn:Gallery-3>
-</rdfs:seeAlso>
-
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-12.rdf">
-	<dc:title>Sparqling days in Monte Sansavino</dc:title>
-	</wn:Gallery-3>
-</rdfs:seeAlso>
-
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-13.rdf">
-	<dc:title>More Sparqling fun</dc:title>
-	</wn:Gallery-3>
-</rdfs:seeAlso>
-
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-14.rdf">
-	<dc:title>post sparql-relaxation</dc:title>
-	</wn:Gallery-3>
-
-</rdfs:seeAlso>
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-15.rdf">
-	<dc:title>Sightseeing - Sienna</dc:title>
-	</wn:Gallery-3>
-
-</rdfs:seeAlso>
-<rdfs:seeAlso>
-	<wn:Gallery-3 rdf:about="http://libby.asemantics.com/2005/04/pictures/2005-04-16.rdf">
-	<dc:title>Via Cassia to Rome</dc:title>
-	</wn:Gallery-3>
-
-</rdfs:seeAlso>
-
-
-</foaf:Person>
-
-</foaf:maker>
-
-</rdf:Description>
-</rdf:RDF>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-literals-test001.rdf
----------------------------------------------------------------------
diff --git a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-literals-test001.rdf b/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-literals-test001.rdf
deleted file mode 100644
index 433df3c..0000000
--- a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-literals-test001.rdf
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<!--
-  Copyright World Wide Web Consortium, (Massachusetts Institute of
-  Technology, Institut National de Recherche en Informatique et en
-  Automatique, Keio University).
- 
-  All Rights Reserved.
- 
-  Please see the full Copyright clause at
-  <http://www.w3.org/Consortium/Legal/copyright-software.html>
-
-  Issue: rdf-charmod-literals
-
-  Description: Legal NFC character sequence in the literal.
-
-    White test case from
-     http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Apr/0016.html
-
-  $Id: test001.rdf,v 1.1 2002/04/29 10:35:03 jgrant Exp $
-
--->
-
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:eg="http://example.org/">
-   <!-- Dürst registers himself as a creator of the Charmod WD. -->
-
-   <rdf:Description rdf:about="http://www.w3.org/TR/2002/WD-charmod-20020220">
-
-   <!-- The ü below is a single character #xFC in NFC
-        (encoded as two UTF-8 octets #xC3 #xBC)  -->
-      <eg:Creator eg:named="Dürst"/>
-
-   </rdf:Description>
-</rdf:RDF>

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test001.rdf
----------------------------------------------------------------------
diff --git a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test001.rdf b/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test001.rdf
deleted file mode 100644
index 038a7ac..0000000
--- a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test001.rdf
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<!--
-  Copyright World Wide Web Consortium, (Massachusetts Institute of
-  Technology, Institut National de Recherche en Informatique et en
-  Automatique, Keio University).
- 
-  All Rights Reserved.
- 
-  Please see the full Copyright clause at
-  <http://www.w3.org/Consortium/Legal/copyright-software.html>
-
-  Issue: http://www.w3.org/2000/03/rdf-tracking/#rdf-charmod-uris
-  Test:  1
-  Author: Jeremy Carroll, HP
-
-  Description:
-        Non US-ASCII characters are permitted in the uriref labels
-        on the RDF graph. The % escaping algorithm is not applied
-        during graph construction.
-
-  $Id: test001.rdf,v 1.1 2002/04/29 09:46:57 dbeckett2 Exp $
--->
-
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:eg="http://example.org/#">
-
-  <!-- The é below is a single Unicode character #xE9 in
-       Unicode Normal Form C, NFC (here encoded as
-       two UTF-8 octets #C3,#A9) -->
-
-   <rdf:Description rdf:about="http://example.org/#André">
-      <eg:owes>2000</eg:owes>
-   </rdf:Description>
-</rdf:RDF>

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test002.rdf
----------------------------------------------------------------------
diff --git a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test002.rdf b/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test002.rdf
deleted file mode 100644
index 7d83d5e..0000000
--- a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/rdf-charmod-uris-test002.rdf
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-<!--
-  Copyright World Wide Web Consortium, (Massachusetts Institute of
-  Technology, Institut National de Recherche en Informatique et en
-  Automatique, Keio University).
- 
-  All Rights Reserved.
- 
-  Please see the full Copyright clause at
-  <http://www.w3.org/Consortium/Legal/copyright-software.html>
-
-  Issue: http://www.w3.org/2000/03/rdf-tracking/#rdf-charmod-uris
-  Test:  2
-  Author: Jeremy Carroll, HP
-
-  Description:
-        An explicit % escaped URI is treated like any other US ASCII URI. 
-        Non US-ASCII characters are permitted in the uriref labels
-        on the RDF graph. The % escaping algorithm is not applied
-        during graph construction.
-
-  $Id: test002.rdf,v 1.1 2002/04/29 09:46:57 dbeckett2 Exp $
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:eg="http://example.org/#">
- 
-  <!-- The %C3%A9 below corresponds to é under the standard
-        %-escaping algorithm for URIs. -->
-
-   <rdf:Description rdf:about="http://example.org/#Andr%C3%A9">
-      <eg:owes>2000</eg:owes>
-   </rdf:Description>
-</rdf:RDF> 

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/xml-canon-test001.rdf
----------------------------------------------------------------------
diff --git a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/xml-canon-test001.rdf b/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/xml-canon-test001.rdf
deleted file mode 100644
index 884fa22..0000000
--- a/rdf.stable.serializer/src/test/resources/org/apache/clerezza/rdf/stable/serializer/xml-canon-test001.rdf
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
-   http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-
-
-<!--
-  Copyright World Wide Web Consortium, (Massachusetts Institute of
-  Technology, European Research Consortium for Informatics and
-  Mathematics, Keio University).
- 
-  All Rights Reserved.
- 
-  Please see the full Copyright clause at
-  <http://www.w3.org/Consortium/Legal/copyright-software.html>
-
-  Description: Demonstrating XML Literal canonicalisation
-
-  $Id: test001.rdf,v 1.1 2003/08/18 10:09:29 jgrant Exp $
-
--->
-
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:eg="http://example.org/">
-
-
-  <rdf:Description rdf:about="http://www.example.org/a">
-    <eg:prop rdf:parseType="Literal"><br /></eg:prop>
-  </rdf:Description>
-
-</rdf:RDF>
-

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/pom.xml
----------------------------------------------------------------------
diff --git a/rdf/pom.xml b/rdf/pom.xml
index de62088..ca3d6f7 100644
--- a/rdf/pom.xml
+++ b/rdf/pom.xml
@@ -53,6 +53,7 @@
         <module>ontologies</module>
         <module>rdfa</module>
         <module>simple.storage</module>
+        <module>stable.serializer</module>
         <module>storage.web</module>
         <module>file.storage</module>
         <module>utils</module>

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/LICENSE
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/LICENSE b/rdf/stable.serializer/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/rdf/stable.serializer/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/pom.xml
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/pom.xml b/rdf/stable.serializer/pom.xml
new file mode 100644
index 0000000..317e892
--- /dev/null
+++ b/rdf/stable.serializer/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>clerezza</artifactId>
+        <groupId>org.apache.clerezza</groupId>
+        <version>7-SNAPSHOT</version>
+        <relativePath />
+    </parent>
+    <groupId>org.apache.clerezza</groupId>
+    <artifactId>rdf.stable.serializer</artifactId>
+    <packaging>bundle</packaging>
+    <version>1.0.0-SNAPSHOT</version>
+    <name>Clerezza - RDF Stable Serializer</name>
+    <description>A SerializingProvider that prodocues a stable output. This means
+        if the graph to be serialized changes a little, then also the output 
+        changes a little.</description>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.clerezza.commons-rdf</groupId>
+            <artifactId>commons-rdf-api</artifactId>
+            <version>0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.clerezza</groupId>
+            <artifactId>rdf.core</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.clerezza</groupId>
+            <artifactId>rdf.jena.serializer</artifactId>
+            <scope>test</scope>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.clerezza</groupId>
+            <artifactId>rdf.jena.parser</artifactId>
+            <scope>test</scope>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.clerezza</groupId>
+            <artifactId>rdf.utils</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializer.java
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializer.java b/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializer.java
new file mode 100644
index 0000000..0342bf6
--- /dev/null
+++ b/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializer.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.stable.serializer;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.HashMap;
+
+import org.apache.clerezza.commons.rdf.BlankNode;
+import org.apache.clerezza.commons.rdf.Literal;
+import org.apache.clerezza.commons.rdf.Triple;
+import org.apache.clerezza.commons.rdf.Graph;
+import org.apache.clerezza.commons.rdf.IRI;
+import org.apache.clerezza.rdf.ontologies.XSD;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A serializer that can serialze RDF Graphs into N-Triples format.
+ *
+ * NOTE: This is a special purpose serializer to be used with
+ * {@link org.apache.clerezza.rdf.stable.serializer.StableSerializerProvider}.
+ * Instances are assumed to be short-lived and not used concurrently.
+ *
+ * @author Daniel Spicar (daniel.spicar@access.uzh.ch)
+ */
+class NTriplesSerializer {
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    private long genSymCounter = 0;
+    private HashMap<BlankNode, String> bNodeLabels;
+
+    /**
+     * Resets the counter to zero that constitutes
+     * the numerical part of blank node labels.
+     */
+    void resetGenSymCounter() {
+        genSymCounter = 0;
+    }
+
+    /**
+     * Serializes a given Graph using the N-Triples format.
+     *
+     * @param os
+     *                An outputstream.
+     * @param tc
+     *                the triples of the graph to be serialized.
+     */
+    void serialize(OutputStream os, Graph tc) {
+        try {
+            bNodeLabels = new HashMap<BlankNode, String>(tc.size() / 2);
+
+            for (Triple t : tc) {
+                if (t.getSubject() instanceof BlankNode) {
+                    os.write(serializeBlankNode((BlankNode) t.getSubject()).getBytes());
+                } else {
+                    os.write(serializeIRI(
+                            (IRI) t.getSubject()).getBytes());
+                }
+
+                os.write((t.getPredicate().toString() + " ").getBytes());
+
+                if (t.getObject() instanceof BlankNode) {
+                    os.write(serializeBlankNode((BlankNode) t.getObject()).getBytes());
+                    os.write(".\n".getBytes());
+                } else {
+                    if (t.getObject() instanceof Literal) {
+                        os.write((serializeLiteral((Literal) t.getObject()) +
+                                ".\n").getBytes());
+                    } else {
+                        os.write((serializeIRI((IRI) t.getObject()) +
+                                ".\n").getBytes());
+                    }
+                }
+            }
+        } catch (IOException ex) {
+            logger.error("Exception while serializing graph: {}", ex);
+        }
+    }
+
+    private String serializeIRI(IRI uriRef) {
+        StringBuffer sb = new StringBuffer("<");
+        escapeUtf8ToUsAscii(uriRef.getUnicodeString(), sb, true);
+        sb.append("> ");
+
+        return sb.toString() ;
+    }
+
+    private String serializeBlankNode(BlankNode bNode) {
+        if (bNodeLabels.containsKey(bNode)) {
+            return bNodeLabels.get(bNode) + " ";
+        } else {
+            String label = "_:b" + genSymCounter++;
+            bNodeLabels.put(bNode, label);
+            return label + " ";
+        }
+    }
+    
+    private String serializeLiteral(Literal literal) {
+        StringBuffer sb = new StringBuffer("\"");
+        escapeUtf8ToUsAscii(literal.getLexicalForm(), sb, false);
+        sb = sb.append("\"");
+
+        if(literal.getDataType().equals(XSD.string)) {
+            if(literal.getLanguage() != null &&
+                    !literal.getLanguage().toString().equals("")) {
+
+                sb.append("@");
+                sb.append(literal.getLanguage().toString());
+            }
+        } else {
+            sb.append("^^<");
+            escapeUtf8ToUsAscii(
+                    literal.getDataType().getUnicodeString(), sb, false);
+            sb.append(">");
+        } 
+
+        sb.append(" ");
+
+        return sb.toString() ;
+    }
+
+    private void escapeUtf8ToUsAscii(String input, StringBuffer sb, boolean uri) {
+
+        for (int i = 0; i < input.length(); ++i) {
+            char c = input.charAt(i);
+            int val = (int) c;
+            if (c == '\t') {
+                sb.append("\\t");
+            } else if (c == '\n') {
+                sb.append("\\n");
+            } else if (c == '\r') {
+                sb.append("\\r");
+            } else if (c == '"') {
+                sb.append("\\\"");
+            } else if (c == '\\') {
+                sb.append("\\\\");
+            } else if ((val >= 0x0 && val <= 0x8) || (val >= 0xB && val <= 0xC) 
+                    || (val >= 0xE && val <= 0x1F)
+                    || (val >= 0x7F && val <= 0xFFFF)) {
+                sb.append("\\u");
+                sb.append(getIntegerHashString(val, 4));
+            } else if (val >= 0x10000 && val <= 0x10FFFF) {
+                sb.append("\\U");
+                sb.append(getIntegerHashString(val, 8));
+            } else {
+                if (uri && (c == '>' || c == '<')) {
+                    sb.append("\\u");
+                    sb.append(getIntegerHashString(val, 4));
+                } else {
+                    sb.append(c);
+                }
+            }
+        }
+    }
+
+    private String getIntegerHashString(int val, int length) {
+        StringBuffer sb = new StringBuffer();
+        String hex = Integer.toHexString(val);
+        for(int i = 0; i < length - hex.length(); ++i) {
+            sb.append("0");
+        }
+        sb.append(hex);
+
+        return sb.toString().toUpperCase();
+    }
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerProvider.java
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerProvider.java b/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerProvider.java
new file mode 100644
index 0000000..f25c5d3
--- /dev/null
+++ b/rdf/stable.serializer/src/main/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerProvider.java
@@ -0,0 +1,468 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.stable.serializer;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.clerezza.commons.rdf.BlankNode;
+import org.apache.clerezza.commons.rdf.ImmutableGraph;
+import org.apache.clerezza.commons.rdf.Literal;
+import org.apache.clerezza.commons.rdf.RDFTerm;
+import org.apache.clerezza.commons.rdf.Triple;
+import org.apache.clerezza.commons.rdf.Graph;
+import org.apache.clerezza.commons.rdf.IRI;
+import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
+import org.apache.clerezza.rdf.core.serializedform.SerializingProvider;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
+import org.apache.clerezza.rdf.utils.GraphNode;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ * Credits:
+ *
+ * Blank node labeling algorithm by Jeremy J. Carroll (see "Signing RDF Graphs",
+ * HP technical report 2003)
+ *
+ * Minimum Self-contained ImmutableGraph (MSG) decomposition algorithm by
+ * Giovanni Tummarello, Christian Morbidoni, Paolo Puliti, Francesco Piazza,
+ * Università Politecnica delle Marche, Italy
+ * (see "Signing individual fragments of an RDF graph", 14th International
+ * World Wide Web Conference WWW2005, Poster track, May 2005, Chiba, Japan)
+ */
+
+/**
+ * A {@link org.apache.clerezza.rdf.core.serializedform.SerializingProvider} that tries
+ * to provide similar results when serializing graphs. Specifically it tries to
+ * label blank nodes deterministically with reasonable complexity.
+ *
+ * This serializer does not guarantee a deterministic result but it may minimize
+ * the amount of modified lines in serialized output.
+ *
+ * @author Daniel Spicar (daniel.spicar@access.uzh.ch)
+ */
+@Component
+@Service(SerializingProvider.class)
+@SupportedFormat({SupportedFormat.N_TRIPLE})
+public class StableSerializerProvider implements SerializingProvider {
+
+    @Property(description="Specifies maximum amount of blank nodes " +
+    "labeling recursions, may increase performance at the expense of stability " +
+            "(0 = no limit).", intValue=0)
+    public static final String MAX_LABELING_ITERATIONS = "max_labeling_iterations";
+
+    private int maxLabelingIterations = -1;
+
+    private final Logger logger = LoggerFactory.getLogger(getClass());
+
+    protected void activate(ComponentContext cCtx) {
+        maxLabelingIterations = (Integer) cCtx.getProperties().
+            get(MAX_LABELING_ITERATIONS);
+        logger.info("StableSerializerProvider activated");
+    }
+
+    @Override
+    public void serialize(OutputStream os, Graph tc,
+            String formatIdentifier) {
+
+        try {
+            List<String> lines = new LinkedList<String>();
+            List<MSG> msgs = decomposeGraphToMSGs(tc);
+            NTriplesSerializer serializer = new NTriplesSerializer();
+
+            computeMsgHashes(msgs, "MD5");
+
+            for (MSG msg : msgs) {
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                serializer.serialize(baos, msg.tc);
+                BufferedReader serializedGraph =
+                        new BufferedReader(new StringReader(baos.toString()));
+                lines.addAll(labelBlankNodes(serializedGraph, msg.hash));
+            }
+
+            Collections.sort(lines);
+            for (String l : lines) {
+                os.write((l + "\n").getBytes());
+            }
+        } catch (IOException ex) {
+            logger.error("Exception while parsing serialized graph: {}", ex);
+        } catch (NoSuchAlgorithmException ex) {
+            logger.error("Exception while trying to generate graph hash: {}", ex);
+        }
+    }
+
+    private List<MSG> decomposeGraphToMSGs(Graph tc) {
+
+        Graph tmp = new SimpleGraph();
+        tmp.addAll(tc);
+
+        List<MSG> msgSet = new LinkedList<MSG>();
+
+        while (tmp.size() > 0) {
+            Triple triple = tmp.iterator().next();
+            Graph msgTc = new SimpleGraph();
+
+            boolean containsBlankNode = fillMSG(triple, tmp, msgTc);
+            MSG msg = new MSG(msgTc);
+            msg.containsBlankNodes = containsBlankNode;
+            msgSet.add(msg);
+        }
+
+        return msgSet;
+    }
+
+    private boolean fillMSG(Triple triple, Graph tc,
+            Graph msg) {
+
+        boolean containsBlankNode = false;
+
+        RDFTerm resource = triple.getSubject();
+        if (resource instanceof BlankNode) {
+            containsBlankNode = true;
+        } else {
+            resource = triple.getObject();
+            if (resource instanceof BlankNode) {
+                containsBlankNode = true;
+            }
+        }
+        if (containsBlankNode) {
+            GraphNode gn = new GraphNode(resource, tc);
+            ImmutableGraph context = gn.getNodeContext();
+            msg.addAll(context);
+            tc.removeAll(context);
+        } else {
+            msg.add(triple);
+            tc.remove(triple);
+        }
+        return containsBlankNode;
+    }
+
+    private List<String> labelBlankNodes(BufferedReader serializedGraph,
+            String prefix) throws IOException {
+
+        String line = null;
+        List<String> lines = new LinkedList<String>();
+
+        long commentedIdentifiers = 0;
+        while ((line = serializedGraph.readLine()) != null) {
+            try {
+                commentedIdentifiers = commentBlankNodeLabels(line,
+                        commentedIdentifiers, lines);
+            } catch (IOException ex) {
+                logger.error("Exception while trying to parse line: "
+                        + line + "\n{}", ex);
+            }
+        }
+
+        Collections.sort(lines);
+
+        Map<String, Long> labels = new HashMap<String, Long>();
+        long[] counters = {1, commentedIdentifiers}; //counter[0] = genSymCounter
+        long commentedIdentifierBefore;
+        int ctr = 0;
+        do {
+            commentedIdentifierBefore = counters[1];
+            counters = generateBlankNodeLabels(lines, labels, counters[0],
+                    counters[1], prefix);
+            applyLabels(lines, labels, prefix);
+            Collections.sort(lines);
+            if(++ctr == maxLabelingIterations) {
+                break;
+            }
+        } while (counters[1] > 0 && commentedIdentifierBefore != counters[1]);
+
+        if (counters[1] > 0) {
+            labelBlankNodesNonDeterministically(lines, counters, labels, prefix);
+        }
+
+        return lines;
+    }
+
+
+    private long[] generateBlankNodeLabels(List<String> lines,
+            Map<String, Long> labels, long genSymCounter, long comments,
+            String prefix) {
+
+        for (int i = 1; i <= lines.size(); ++i) {
+            StringBuilder previousLine = i > 1 ?new StringBuilder(lines.get(i - 2)) : new StringBuilder();
+            StringBuilder currentLine = new StringBuilder(lines.get(i - 1));
+            StringBuilder nextLine = new StringBuilder();
+            if (i < lines.size()) {
+                nextLine.append(lines.get(i));
+            }
+
+            String currentLineWithoutComments = stripComments(currentLine);
+            if (stripComments(previousLine).equals(currentLineWithoutComments) ||
+                    stripComments(nextLine).equals(currentLineWithoutComments)) {
+                continue;
+            }
+
+            int indexOfObject = checkObject(currentLineWithoutComments);
+            if (indexOfObject != -1) {
+                genSymCounter = applyGenSymIdentifier(labels, genSymCounter,
+                        currentLine, indexOfObject, prefix);
+                --comments;
+            }
+
+            int indexOfSubject = checkSubject(currentLineWithoutComments);
+            if (indexOfSubject != -1) {
+                genSymCounter = applyGenSymIdentifier(labels, genSymCounter,
+                        currentLine, indexOfSubject, prefix);
+                --comments;
+            }
+
+            lines.set(i - 1, currentLine.toString());
+        }
+
+        long[] result = {genSymCounter, comments};
+        return result;
+    }
+
+    private void applyLabels(List<String> lines, Map<String, Long> labels,
+            String prefix) {
+
+        for (int i = 0; i < lines.size(); ++i) {
+            StringBuilder line = new StringBuilder(lines.get(i));
+
+            int indexOfObject = checkObject(stripComments(line));
+            if (indexOfObject != -1) {
+                int indexOfComment = line.lastIndexOf("#_:");
+                String identifier =
+                        line.substring(indexOfComment + 1, line.length());
+
+                if (labels.containsKey(identifier)) {
+                    line.delete(indexOfComment, line.length());
+                    line.delete(indexOfObject, indexOfObject + 1);
+                    line.insert(indexOfObject, "_:" + prefix +
+                            labels.get(identifier));
+                }
+            }
+
+            int indexOfSubject = checkSubject(stripComments(line));
+            if (indexOfSubject != -1) {
+                int indexOfComment = line.lastIndexOf("#_:");
+                String identifier =
+                        line.substring(indexOfComment + 1, line.length());
+
+                if (labels.containsKey(identifier)) {
+                    line.delete(indexOfComment, line.length());
+                    line.delete(indexOfSubject, indexOfSubject + 1);
+                    line.insert(indexOfSubject, "_:" + prefix +
+                            labels.get(identifier));
+                }
+            }
+
+            lines.set(i, line.toString());
+        }
+    }
+
+    private long commentBlankNodeLabels(String line, long commentedIdentifiers,
+            List<String> lines) throws IOException {
+
+        StringReader lineReader = new StringReader(line);
+        int data = lineReader.read();
+        while (data != -1) {
+            if (data == '<') {
+                //skip until end tag
+                while ((data = lineReader.read()) != '>') {
+                    checkForEndOfStream(data);
+                }
+            } else if (data == '"') {
+                break;
+            } else if (data == '_') {
+                if ((data = lineReader.read()) == ':') {
+                    String identifier = "_:";
+                    while ((data = lineReader.read()) != ' ') {
+                        checkForEndOfStream(data);
+                        identifier = identifier.concat(
+                                Character.toString((char) data));
+                    }
+                    line = line.replaceFirst(identifier, "~");
+                    line = line.concat(" #" + identifier);
+                    ++commentedIdentifiers;
+                    checkForEndOfStream(data);
+                }
+            }
+            data = lineReader.read();
+        }
+        lines.add(line);
+        return commentedIdentifiers;
+    }
+
+    private long applyGenSymIdentifier(Map<String, Long> labels,
+            long genSymCounter, StringBuilder currentLine, int where,
+            String prefix) {
+
+        int index = currentLine.lastIndexOf("#_:");
+        String identifier =
+                currentLine.substring(index + 1, currentLine.length()).trim();
+        currentLine.delete(index, currentLine.length());
+        if (!labels.containsKey(identifier)) {
+            labels.put(identifier, genSymCounter++);
+        }
+        currentLine.delete(where, where + 1);
+        currentLine.insert(where, "_:" + prefix + labels.get(identifier));
+
+        return genSymCounter;
+    }
+
+    private void labelBlankNodesNonDeterministically(List<String> lines,
+            long[] counters, Map<String, Long> labels, String prefix) {
+
+        for (int i = 0; i < lines.size(); ++i) {
+            StringBuilder currentLine = new StringBuilder(lines.get(i));
+            String currentLineWithoutComments = stripComments(currentLine);
+            int indexOfObject = checkObject(currentLineWithoutComments);
+            if (indexOfObject != -1) {
+                counters[0] = applyGenSymIdentifier(labels, counters[0],
+                        currentLine, indexOfObject, prefix);
+                --(counters[1]);
+            }
+            int indexOfSubject = checkSubject(currentLineWithoutComments);
+            if (indexOfSubject != -1) {
+                counters[0] = applyGenSymIdentifier(labels, counters[0],
+                        currentLine, indexOfSubject, prefix);
+                --(counters[1]);
+            }
+            lines.set(i, currentLine.toString());
+        }
+        Collections.sort(lines);
+    }
+
+    private void checkForEndOfStream(int data) throws IOException {
+        if (data == -1) {
+            throw new IOException("Parsing Error!");
+        }
+    }
+
+    private int checkObject(String line) {
+        int index = -1;
+        if (line.charAt((index = line.length() - 3)) == '~') {
+            return index;
+        }
+        return -1;
+    }
+
+    private int checkSubject(String line) {
+        if (line.charAt(0) == '~') {
+            return 0;
+        }
+        return -1;
+    }
+
+
+    private String stripComments(StringBuilder line) {
+        if (line.length() < 3) {
+            return "";
+        }
+        return line.substring(0, line.lastIndexOf(" .") + 2);
+    }
+
+    private void computeMsgHashes(List<MSG> msgs, String algorithm)
+            throws NoSuchAlgorithmException {
+
+        MessageDigest md = MessageDigest.getInstance(algorithm);
+        HashSet<String> computedHashes = new HashSet<String>(msgs.size());
+
+        for(MSG msg : msgs) {
+            if(!msg.containsBlankNodes) {
+                //hash is needed only for b-node labelling
+                continue;
+            }
+            List<String> tripleHashes = new ArrayList<String>(msg.tc.size());
+            for (Triple t : msg.tc) {
+                StringBuilder tripleHash = new StringBuilder();
+                if (!(t.getSubject() instanceof BlankNode)) {
+                    tripleHash.append(((IRI) t.getSubject()).hashCode());
+                }
+                tripleHash.append(t.getPredicate().hashCode());
+                if (!(t.getObject() instanceof BlankNode)) {
+                    if (t.getObject() instanceof Literal) {
+                        tripleHash.append(((Literal) t.getObject()).
+                                toString().hashCode());
+                    } else {
+                        tripleHash.append(((IRI) t.getObject()).hashCode());
+                    }
+                }
+                tripleHashes.add(tripleHash.toString());
+            }
+            Collections.sort(tripleHashes);
+            StringBuilder msgHash = new StringBuilder();
+            for(String tripleHash : tripleHashes) {
+                msgHash.append(tripleHash);
+            }
+
+            md.update(msgHash.toString().getBytes());
+
+            String hexString;
+            if(computedHashes.add((hexString = getHashHexString(md.digest())))){
+                msg.hash = hexString;
+            } else {
+                md.update(String.valueOf(
+                        System.currentTimeMillis()).getBytes());
+                while(!computedHashes.add(
+                        (hexString = getHashHexString(md.digest())))) {
+                    md.update(String.valueOf(
+                            System.currentTimeMillis()).getBytes());
+                }
+                msg.hash = hexString;
+            }
+        }
+    }
+
+    private String getHashHexString(byte[] hash) {
+        StringBuilder hexString = new StringBuilder();
+        for (int i = 0; i < hash.length; i++) {
+            String hex = Integer.toHexString(0xFF & hash[i]);
+            if (hex.length() == 1) {
+                hexString.append('0');
+            }
+            hexString.append(hex);
+        }
+        return hexString.toString();
+    }
+
+    private static class MSG {
+
+        final Graph tc;
+        String hash = null;
+        boolean containsBlankNodes = false;
+
+        MSG(Graph tc) {
+            this.tc = tc;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/main/resources/META-INF/services/org.apache.clerezza.rdf.core.serializedform.SerializingProvider
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/main/resources/META-INF/services/org.apache.clerezza.rdf.core.serializedform.SerializingProvider b/rdf/stable.serializer/src/main/resources/META-INF/services/org.apache.clerezza.rdf.core.serializedform.SerializingProvider
new file mode 100644
index 0000000..8a9b397
--- /dev/null
+++ b/rdf/stable.serializer/src/main/resources/META-INF/services/org.apache.clerezza.rdf.core.serializedform.SerializingProvider
@@ -0,0 +1 @@
+org.apache.clerezza.rdf.jena.serializer.JenaSerializerProvider
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/DocumentationStabilityTest.java
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/DocumentationStabilityTest.java b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/DocumentationStabilityTest.java
new file mode 100644
index 0000000..5f511fa
--- /dev/null
+++ b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/DocumentationStabilityTest.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.stable.serializer;
+
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.clerezza.commons.rdf.ImmutableGraph;
+import org.apache.clerezza.commons.rdf.Graph;
+import org.apache.clerezza.commons.rdf.IRI;
+import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
+import org.apache.clerezza.commons.rdf.impl.utils.TripleImpl;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class DocumentationStabilityTest {
+    
+    @Test
+    public void RDFTestCases() throws Exception {
+        
+        Parser parser = Parser.getInstance();
+        ImmutableGraph tc1 = parser.parse(
+                getClass().getResourceAsStream("documentation-example.nt"), SupportedFormat.N_TRIPLE);
+        final Set<String> lines1 = serializeToLines(tc1);
+        Graph tc2 = new SimpleGraph();
+        tc2.addAll(tc1);
+        //add <bundle:///intro> <http://clerezza.org/2009/08/documentation#after> <bundle://org.apache.clerezza.platform.documentation/intro> .
+        tc2.add(new TripleImpl(new IRI("bundle:///intro"), 
+                new IRI("http://clerezza.org/2009/08/documentation#after"), 
+                new IRI("bundle://org.apache.clerezza.platform.documentation/intro")));
+        final Set<String> lines2 = serializeToLines(tc2);
+        lines2.removeAll(lines1);
+        Assert.assertEquals(1, lines2.size());
+    }
+    
+    private Set<String> serializeToLines(Graph tc) throws UnsupportedEncodingException {
+        StableSerializerProvider ssp = new StableSerializerProvider();
+        final ByteArrayOutputStream os1 = new ByteArrayOutputStream();
+        ssp.serialize(os1, tc, SupportedFormat.N_TRIPLE);
+        return new HashSet<String>(Arrays.asList(new String(os1.toByteArray(), "utf-8").split("\n")));
+        
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializerTest.java
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializerTest.java b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializerTest.java
new file mode 100644
index 0000000..b3d3292
--- /dev/null
+++ b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/NTriplesSerializerTest.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.stable.serializer;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+
+import junit.framework.Assert;
+
+import org.apache.clerezza.commons.rdf.ImmutableGraph;
+import org.apache.clerezza.commons.rdf.Graph;
+import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/**
+ *
+ * @author daniel
+ */
+@RunWith(Parameterized.class)
+public class NTriplesSerializerTest {
+
+    private String inputFileName;
+    private String format;
+
+    public NTriplesSerializerTest(String inputFileName, String format) {
+        this.inputFileName = inputFileName;
+        this.format = format;
+    }
+
+    @Parameterized.Parameters
+    public static Collection<String[]> inputFileNames() {
+        return Arrays.asList(new String[][] {
+            {"amp-in-url-test001.rdf", "application/rdf+xml"},
+            {"datatypes-test001.rdf", "application/rdf+xml"},
+            {"datatypes-test002.rdf", "application/rdf+xml"},
+            {"rdf-charmod-literals-test001.rdf", "application/rdf+xml"},
+            {"rdf-charmod-uris-test001.rdf", "application/rdf+xml"},
+            {"rdf-charmod-uris-test002.rdf", "application/rdf+xml"},
+            {"xml-canon-test001.rdf", "application/rdf+xml"},
+            {"css3deps.rdf", "application/rdf+xml"},
+            {"agenda_62.rdf", "application/rdf+xml"},
+            {"Talks.rdf", "application/rdf+xml"},
+            {"elvisimp.rdf", "application/rdf+xml"},
+            //{"images.xrdf", "application/rdf+xml"}, //large
+            {"libby.foaf", "application/rdf+xml"}
+        });
+    }
+
+    @Test
+    public void RDFTestCases() {
+        NTriplesSerializer nts = new NTriplesSerializer();
+
+        Parser parser = Parser.getInstance();
+        ImmutableGraph deserializedGraphOld = parser.parse(
+                getClass().getResourceAsStream(inputFileName), format);
+
+        Graph tc = new SimpleGraph();
+        tc.addAll(deserializedGraphOld);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        nts.serialize(baos, tc);
+
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+        ImmutableGraph deserializedGraphNew = parser.parse(bais, "application/n-triples");
+
+        Assert.assertEquals(deserializedGraphNew, deserializedGraphOld);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/d7fb079c/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerGraphTest.java
----------------------------------------------------------------------
diff --git a/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerGraphTest.java b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerGraphTest.java
new file mode 100644
index 0000000..2637f8d
--- /dev/null
+++ b/rdf/stable.serializer/src/test/java/org/apache/clerezza/rdf/stable/serializer/StableSerializerGraphTest.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.rdf.stable.serializer;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.clerezza.commons.rdf.ImmutableGraph;
+import org.apache.clerezza.commons.rdf.Graph;
+import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
+import org.apache.clerezza.rdf.core.serializedform.Parser;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+/**
+ *
+ * @author daniel
+ */
+@RunWith(Parameterized.class)
+public class StableSerializerGraphTest {
+    private String inputFileName;
+    private String format;
+
+    public StableSerializerGraphTest(String inputFileName, String format) {
+        this.inputFileName = inputFileName;
+        this.format = format;
+    }
+
+    @Parameterized.Parameters
+    public static Collection<String[]> inputFileNames() {
+        return Arrays.asList(new String[][]{
+                    {"amp-in-url-test001.rdf", "application/rdf+xml"},
+                    {"datatypes-test001.rdf", "application/rdf+xml"},
+                    {"datatypes-test002.rdf", "application/rdf+xml"},
+                    {"rdf-charmod-literals-test001.rdf", "application/rdf+xml"},
+                    {"rdf-charmod-uris-test001.rdf", "application/rdf+xml"},
+                    {"rdf-charmod-uris-test002.rdf", "application/rdf+xml"},
+                    {"xml-canon-test001.rdf", "application/rdf+xml"},
+                    {"css3deps.rdf", "application/rdf+xml"},
+                    {"agenda_62.rdf", "application/rdf+xml"},
+                    {"Talks.rdf", "application/rdf+xml"},
+                    {"elvisimp.rdf", "application/rdf+xml"}, 
+                    //{"images.xrdf", "application/rdf+xml"}, //large
+                    {"libby.foaf", "application/rdf+xml"}
+                });
+    }
+
+    @Test
+    public void RDFTestCases() {
+        StableSerializerProvider ssp = new StableSerializerProvider();
+
+        Parser parser = Parser.getInstance();
+        ImmutableGraph deserializedGraphOld = parser.parse(
+                getClass().getResourceAsStream(inputFileName), format);
+
+        Graph tc = new SimpleGraph();
+        tc.addAll(deserializedGraphOld);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ssp.serialize(baos, tc, "application/n-triples");
+
+        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+
+        ImmutableGraph deserializedGraphNew = parser.parse(bais, "application/n-triples");
+
+        Assert.assertEquals(deserializedGraphOld, deserializedGraphNew);
+
+    }
+}


Mime
View raw message