- From: Richard Cyganiak <richard@cyganiak.de>
- Date: Wed, 18 May 2011 19:05:17 +0100
- To: Steve Harris <steve.harris@garlik.com>, Alex Hall <alexhall@revelytix.com>
- Cc: RDF Working Group WG <public-rdf-wg@w3.org>
Alex, Steve,
On 2011-05-13, at 19:20, Alex Hall wrote:
> 3. There are probably countless instances of the following logic deployed in existing systems (I cut-and-pasted this directly from my own code):
> 
> public Literal(String lexicalValue, String language, URI datatype) {
>  ...
>  if (language != null && datatype != null) {
>    throw new IllegalArgumentException("An RDF literal may not have both a language and a datatype.");
>  }
>  ...
> }
Implementations *could* choose to *internally* represent "xsd:string" as "no datatype". If you have existing code, then this is perhaps the easiest way to go, as it only requires changes in the input part (turn xsd:string into null) and when asking for the datatype of a literal (if null, return xsd:string). Since "no datatype" in concrete syntaxes would be syntactic sugar for xsd:string, that all works out fine.
On 13 May 2011, at 22:37, Steve Harris wrote:
> More concerning is code like:
> 
> Literal(String lexicalValue, Resource lang_or_dt)
> {
> 	if (typeof(lang_or_dt) == Literal) {
> 		/* it has a language tag */
> 	} else if (typeof(lang_or_dt) == URI) {
> 		/* it has a datatype */ 
> 	} else {
> 		/* it has neither */
> 	}
> }
> 
> We have a lot of such code.
Well, yeah, that's a bit awkward, but again you could choose to make it an internal convention that typeof(lang_or_dt) != URI means the type is really xsd:string.
Best,
Richard
Received on Wednesday, 18 May 2011 18:05:46 UTC