My feelings are strong towards one-line-per-fact.

    Large RDF data sets have validity problems,  and the difficulty of 
convincing publishers that this matters indicates that this situation will 
continue.

    I’ve thought a bit about the problem of the “streaming converter from 
Turtle to N-Triples”.  It’s true that this can be done in a streaming manner 
most of the time,  but there is a stack that can get infinitely deep in Turtle 
so you can’t say,  strictly,  that memory consumption is bounded.

    It’s also very unclear to me how exactly to work around broken records and 
restart the parser in the general case.  It’s not hard to mock up examples 
where a simple recovery mechanism works,  but I dread the thought of developing 
one for commercial use where I’d probably be playing whack-a-mole for edge 
cases for years.

    There was a gap of quite a few years in the lare-90’s when there weren’t 
usable open-source web browsers because a practical web browser had to:  (1) 
read broken markup,  and (2) render it exactly the same as Netscape 3.  
Commercial operations can get things like this done by burning out programmers, 
 who finally show up at a standup meeting one day,  smash their laptop and 
stomp out.  It’s not so easy in the open source world where you’re forced to 
use carrots and not sticks.

    So far as compression v. inner format I also have some thoughts because for 
every product I’ve made in the last few years I always tried a few different 
packaging methods before releasing something to final.

    Gzip eats up a lot of the ‘markupbloat’ in N-Triples because recently used 
IRIs and prefixes will be in the dictionary.  The minus is that the dictionary 
isn’t very big,  so the contents of the dictionary itself are bloated;  there 
isn’t much entropy there,  but the same markupbloat gets repeated hundreds of 
times;  if you just put the prefixes in a hash table that might be more like 
1000 bytes total to represent that.  When you prefix-compress RDF and gzip it 
then,  you’ve got the advantage that the dictionary contains more entropy than 
it would otherwise.  Even though gzip is not cutting out so much markup bloat,  
it is compressing off a better model of the document so you get better results.

    As has been pointed out,  sorting helps.  If you sort in ?s ?p ?o . order 
it helps,  partially because the sorting itself removes entropy (There are N! 
possible unsorted files and only one sorted one) and obviously the dictionary 
is being set up to roll together common ?s and ?s ?p’s the way turtle does.

    Bzip’s ability to work like a markov chain with the element of chance taken 
out is usually more effective at compression than gzip is,  but I’ve noticed 
some exceptions.  In the original :BaseKB products,  all of the nodes looked 
like

<http://rdf.basekb.com/ns/m.112az>

I found my ?s ?p ?o sorted data compressed better with gzip than bzip,  and 
perhaps the structure of the identifiers had something to do with it.

A big advantage of bzip tha is that the block-based nature of the compression 
means that blocks can be compressed and decompressed in parallel (pbzip2 is a 
drop-in replacements for bzip2),  so that the possible top speed of 
decompressing bzip data is in principle unlimited,  even though bzip is a more 
expensive algorithm  Hadoop in version 1.1.0+ can even automatically decompress 
a bzip2 file and split the result into separate mappers.  Generally system 
performance is better if you read data out of pre-split gzip,  but it is just 
so easy to load a big bz2 in HDFS and point a lot of transistors at it.

I am very much against blank nodes for ‘wiki-ish’ data that is shared between 
systems.  The fact that Freebase reifies “blank nodes” as CVTs means that we 
can talk about them on the outside,  reason about them,  and then name them in 
order to interact with them on the live Freebase system.  By their nature,  
blank nodes defy the “anyone, anything, anywhere” concept because they can’t be 
referred to.  In the case of OWL that’s a feature not a bug because you can 
really close the world because nobody can add anything to a lisp-list without 
introducing a new node.  Outside tiny tiny T-Boxes (say SUMO size),  internal 
DSLs like SPIN,  or expressing algebraic sorts of things (i.e. describe the 
mixed eigenstates of quarks in some Hadron),  the mainstream of linked data 
doesn’t use them.

Personally I’d like to see the data published in Quad form and have the 
reification data expressed in the context field.  As much as possible,  the 
things in the (?s ?p ?o) fields should make sense as facts.  Ideally you could 
reuse one ?c node for a lot of facts,  such as if a number of them came in one 
transactions.  You could ask for the ?c fields (show me all estimates for the 
population of Berlin from 2000 to the present and who made them) or you could 
go through the file of facts and pick the ?c’s that provide the point of view 
that you need the system to have.

_______________________________________________
Wikidata-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikidata-l

Reply via email to