- From: Nathan <nathan@webr3.org>
- Date: Thu, 30 Sep 2010 14:05:45 +0100
- To: RDFA Working Group <public-rdfa-wg@w3.org>
Hi All,
aside: Will take all of this feedback and merge it in to a single
document/mail with all IDL etc in the near future.
I've finished up a first implementation of the RDFa API using the
interfaces as per my last big mail, so far only implemented an NT parser
though!, good news is it's pretty good for a lot of things, certainly
read related.. not so on the creation side. Moving on to specifics..
0: working with triples as a sequence rather than an index (s[p][o]) is
really, really, difficult for many things - imho one should/must be able
to get a hash of property->object for each subject easily from a
DataStore - I'm going to try a few different methods out tonight and
will send feedback / some alternatives.
1: IRIs are a complete PITA to work with, like really, for example here
is the real code for (if property is foaf:knows) ->
triple.property.toString() ==
data.context.resolveCurie('foaf:knows').toString()
on the one hand they need to be strings, and on the other we need curie
resolution etc in there - I know IRI could extend String in js without a
problem and this would be v nice to work with, but needs some thought on
how best to approach from an RDFa API perspective.
2: the create*** methods really need to be on the DataContext interface,
it's a complete pita to work with when they're on DataStore or DocumentData.
3: we could do with specifying that implementations must implement
TypedLiteralConverters for all xsd numerical types
(xsd:int/double/decimal/unsigned* positive* etc.)
4: convertType has the type as optional? think this may be a bug as it's
required (unless I'm really missing something?)
5: DataStore could do with a toArray() method returning
sequence<RDFTriple> - it really helps and is a good practical addition.
6: DataParser is dependent on having access to both the create***
methods and the convertType functionality, thus it needs to either have
a constructor which accepts DataContext (dependency injection) if the
create methods are moved here, else accepting DocumentData - if not here
then as a required argument on DataParser.parse and process.
7: CURIE resolution, specifically casing of the prefix needs defined,
very much appears it should be case insensitive, as in XSD:boolean ==
xsd:boolean and both resolve.
8: relative URI resolution, and 'base', it seems like DataContext needs
to have a 'base' which it's working off, and that can be modified with a
setBase method, this is needed (currently) for CURIE resolution, and for
relative uri resolution. Also DataParser needs to be aware of a base for
many serializations and where the base is not set in the document.
9: the form of name for registerParser() and getParser() needs to be
decided and specified soon. Also it's a weird area, because with many
parsers you have one per media-type, however in HTML land you need
different ones for different profiles - I'm unsure what the best
approach is, but would say that we definitely need to tell people what
to pass in to get the parser they want back!
10: it would be nice for users to be able to get back a list of existing
prefix maps in the data context, this would be handy for some
serializers as well.
11: we *need* to ensure that TypedLiterals are created even when we
don't have a converter for the type - after working with the API it
makes no sense at all to have "13"^^xsd:short fail to create a
triple/typedliteral because there's no converter - rather we need a way
to test if a TypedLiteral has a native value or not.
12: creating RDF really isn't nice with this API, it works perfectly,
but it's so verbose it's certainly off-putting - for instance here's the
code to create these two triples { :me foaf:name "Nathan"@en;
cert:decimal 65537 } ->
data.context.setMapping( "" , "http://webr3.org/nathan#" );
data.context.setMapping( "cert" , "http://www.w3.org/ns/auth/cert#" );
var iri = data.createIRI(":me");
var blanknode = data.createBlankNode();
var plainliteral = data.createPlainLiteral("Nathan", "en" );
var typedliteral = data.createTypedLiteral("65537", "^^xsd:int" );
var t1 = data.createTriple(iri, data.context.resolveCurie('foaf:name')
, plainliteral );
var t2 = data.createTriple(blanknode,
data.context.resolveCurie('cert:decimal') , typedliteral );
13: Need to define what the `value` + toString() of TypedLiteral and
PlainLiteral should be, especially PlainLiteral. As in should it have \t
or a tab, likewise for \r \n and for special chars, unicode etc.
14: RDFTriple.toString returns NTriples, which means there is a
dependency on a *full* NTriples serializer in the API - makes sense but
I'd strongly suggest we provide this functionality with full toNT
methods on all RDF Interfaces, any implementation of the API already has
this dependency, we're just not exposing it atm.
Think that's almost everything,
Best,
Nathan
Received on Thursday, 30 September 2010 13:06:54 UTC