- From: Jeni Tennison <jeni@jenitennison.com>
- Date: Fri, 11 Sep 2009 19:32:55 +0100
- To: "public-rdf-in-xhtml-tf.w3.org list" <public-rdf-in-xhtml-tf@w3.org>
On 11 Sep 2009, at 16:36, Shane McCarron wrote: > It is my belief that the following are NOT equivalent from a > processing perspective (assume the foaf prefix is declared, the blah > prefix is not): > > • <span about="#shane" property="foaf:name" datatype="">Shane</span> > • <span about="#shane" property="foaf:name" > datatype="blah:blah">Shane</span> > The first item explicitly requests a text literal. The second item > requests a datatype that is undefined (illegal, invalid, whatever). > I maintain that in a conforming processor the second item would NOT > generate any triple. I don't think that's what the spec currently says. An illegal value as above causes an *attribute* that is present (ie there is a datatype attribute there) and a value that is empty (because illegal CURIEs are ignored). Step 9 says that a typed literal is created if: "@datatype is present, and does not have an empty value, and is not set to rdf:XMLLiteral." In this case, datatype is present but it has an empty value, so we don't create a typed literal. The next possibility is that it's a plain literal, if it meets any of the conditions: • @content is present; • or all children of the [current element] are text nodes; • or there are no child nodes (in which case the literal value is the empty string); • or the body of the [current element] does have non-text child nodes but @datatype is present, with an empty value. In this case, all children of the current element are text nodes, so the object is a plain literal and the triple should be: <#shane> foaf:name "Shane" . In the case where the element did contain elements: <span about="#shane" property="foaf:name" datatype="blah:blah"><em>Shane</em></span> I think the fourth of the clauses -- "or the body of the [current element] does have non-text child nodes but @datatype is present, with an empty value." -- comes into action, because there is a datatype attribute present but it has an empty value (because its value is illegal). So we again get the triple: <#shane> foaf:name "Shane" . I don't think there's any language in the specification that indicates that the entire triple will be omitted if the datatype attribute is illegal. Creating a plain literal seems to be a reasonable fallback when the datatype is unknown. > I think the same is true for our treatment of @property, @about, and > @resource. It is explicitly NOT true for @rel, @rev, and (maybe) > @typeof because of their ability to cause bnodes to be created. Do > you disagree? And can you answer in one page or less? :P FWIW, I disagree about property, because it also has the power (through the setting of [skip element] in step 4) to determine whether or not bnodes are created to complete any hanging triples. This is Philip's example. With no property attribute: <p xmlns:ex="http://example.org/" about="http://example.com/" rel="ex:rel1"> <span content="Content 1"> <span about="http://example.net/">Test 1</span> </span> </p> we should generate: <http://example.com/> <http://example.org/rel1> <http://example.net/ > . With a legal property attribute: <p xmlns:ex="http://example.org/" about="http://example.com/" rel="ex:rel2"> <span property="ex:prop" content="Content 2"> <span about="http://example.net/">Test 2</span> </span> </p> we should generate: <http://example.com/> <http://example.org/rel2> _:bnode1 . _:bnode1 <http://example.org/prop> "Content 2" . The final example being an illegal property attribute which means that the property is still *present* (causing the creation of a bnode) but does not create triples of its own: <p xmlns:ex="http://example.org/" about="http://example.com/" rel="ex:rel3"> <span property="bogus:bogus" content="Content 3"> <span about="http://example.net/">Test 3</span> </span> </p> we should generate: <http://example.com/> <http://example.org/rel2> _:bnode2 . For @about, @resource, @href and @src, the wording is "by using the URI from @{attribute}, if present, obtained according to the section on CURIE and URI Processing;". I think the "if present" here refers to "the URI from @{attribute}" rather than just "@{attribute}", such that if @about does not resolve to a URI there is no value present and it is as if the entire attribute had not been there. So: <p xmlns:ex="http://example.org/" about="http://example.com/"> <span about="[bogus:bogus]" property="ex:prop">Test</span> </p> results in the triple: <http://example.com/> <http://example.org/prop> "Test" . It would make things clearer all round if the specification used phraseology that specifically included the possibility of illegal values and made it explicit where it's talking about *values* being present and where about *attributes* being present in relevant places, such as: "_the_ @datatype _attribute_ is present, and does not have an empty _or illegal_ value, and is not set to rdf:XMLLiteral." "or the body of the [current element] does have non-text child nodes but _the_ @datatype _attribute_ is present, with an empty _or illegal_ value." "Additionally, if _the_ @property _attribute_ is not present then the [skip element] flag is set to 'true';" Cheers, Jeni -- Jeni Tennison http://www.jenitennison.com
Received on Friday, 11 September 2009 18:33:30 UTC