SPO(G) is not a new syntax, nor a format or a protocol. It is, however, a syntactic profile and a convention.
<sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="g"/> <variable name="s"/> <variable name="p"/> <variable name="o"/> </head> <results> ... </results> </sparql>
I have previously written about exchange of named RDF graphs through the use of quads-in-zips, and while that approach works just fine, it needs to be implemented on both sides of the exchange.
This is also true for SPO(G), but with SPARQL implementations being widespread, the export side is already in place all around the web, and the import side is quite easily implemented — I have sent an implementation of SPARQLXMLResultLoader for ARC to bengee, and while he is also busy working on a streaming serialiser, it seems likely it’ll be a part of a coming release of ARC.
As can be seen from the example, SPO(G) is simply a constrained SPARQL Query Results XML Format: It needs to have three or four variables,
o must be present, with
g being optional (making it YARS). For all results, all variables must be bound.
SPO(G) isn’t as compact as quads-in-zips, but there’s no reason for it not to be compressed during exchange, either through a manual process or via the usual gzip-encoding on-the-fly.
I should perhaps write it up properly, but I think I’d rather go off and implement it for Redland.