Re: FPWD Review Request: HTML+RDFa

>> The "CURIE and URI Processing" section says "any value that is not a
>> 'curie' according to the definition in the section CURIE Syntax
>> Definition MUST be ignored". The "Sequence" section refers to e.g.
>> "the URI from @about, if present, obtained according to the section on
>> CURIE and URI Processing", and I think it's clear it should be
>> considered not-present if it's not a valid CURIE. So <span
>> about="[bogus:bogus]" src="http://example.org/"> should ignore @about
>> and use @src, and that's all okay. (Some implementations still get
>> this wrong, though.)
> I think your interpretation is the correct one, and I think there is a
> test case to this effect already.  If it were not ignored, then @about
> would be interpreted as @about="" and that would refer to the current
> document and supercede @src.  Michael or Manu, can you confirm there is
> already a test case for this?

AFAIK not precisely this case. What comes closest are TC35-37 and TC42.
FWIW, I guess we can add one TC concerning this, if desired.

Cheers,
      Michael

-- 
Dr. Michael Hausenblas
LiDRC - Linked Data Research Centre
DERI - Digital Enterprise Research Institute
NUIG - National University of Ireland, Galway
Ireland, Europe
Tel. +353 91 495730
http://linkeddata.deri.ie/
http://sw-app.org/about.html



> From: Shane McCarron <shane@aptest.com>
> Date: Tue, 08 Sep 2009 11:19:46 -0500
> To: Philip Taylor <pjt47@cam.ac.uk>
> Cc: Mark Birbeck <mark.birbeck@webbackplane.com>, Manu Sporny
> <msporny@digitalbazaar.com>, HTML WG <public-html@w3.org>, RDFa TF list
> <public-rdf-in-xhtml-tf@w3.org>
> Subject: Re: FPWD Review Request: HTML+RDFa
> Resent-From: RDFa TF list <public-rdf-in-xhtml-tf@w3.org>
> Resent-Date: Tue, 08 Sep 2009 16:20:56 +0000
> 
> Philip,
> 
> Thanks for taking the time to respond so thoroughly.  In general I agree
> with Mark that the RDFa Syntax Recommendation could have done a better
> job of tightening its relationship to the Namespaces in XML
> Recommendation.  I also agree that if there are pathological cases that
> are *important* they should be covered by a test suite.  What is
> "pathological" and what is "important" are obviously subjective, and
> test suite authors spend lots of time debating such things.
> 
> I have some detailed comments in line.
> 
> Philip Taylor wrote:
>> Shane McCarron wrote:
>>> I would not object to providing examples of extraction algorithms as
>>> guidance.  We already do this for CURIEs somewhere...  But I do not
>>> think it is a good idea to normatively define code.
>> 
>> I agree the spec shouldn't normatively define code. When I said it
>> "needs to define the prefix mapping extraction algorithm in precise
>> detail" I was thinking of something much more abstract than real code,
>> though it should still be clear and unambiguous on all the relevant
>> details.
>> 
>> Currently I don't see anything in the specs other than vague
>> references to the Namespaces in XML spec ("Since CURIE mappings are
>> created by authors via the XML namespace syntax [XMLNS] an RDFa
>> processor MUST take into account the hierarchical nature of prefix
>> declarations" in rdfa-syntax, "CURIE prefix mappings specified using
>> xmlns: must be processed using the rules specified in the [Namespaces
>> in XML] Recommendation" in HTML5+RDFa), and I want it to be clearer
>> about exactly which rules are applied and how they are adapted for
>> non-XML content, because otherwise I can produce lots of test cases
>> where I can't work out what the spec says the output must be. (I don't
>> care how an implementation computes the output, I just want to know
>> what the output is.)
> Well... Hmm... My opinion differs with yours on this.  That reference,
> while in prose, is not vague at all.  It is a normative reference to a
> related W3C Recommendation that defines precisely the syntactic
> requirements for what is and is not a legal xmlns: attribute declaration
> (see, for example, section 3 - Declaring Namespaces).  As an implementor
> of RDFa Syntax, it is my responsibility to ensure I am either 1) using a
> library to parse my input that already knows about the requirements of
> the Namespaces in XML Recommendation, or 2) implement those requirements
> myself.  Either way, the requirements are clear (and yes, my
> implementation is somewhat broken).
> 
> Further, since the RDFa Syntax Recommendation is only concerned about
> the "syntax" of those prefix declarations, and has no semantic
> requirements beyond that for the use of XML Namespaces, it should be
> clear that parts of the Namespaces in XML Recommendation that deal with
> how XML Namespaces effect the declaration of elements and attributes is
> irrelevant for an RDFa Syntax - conforming processor.
> 
> (Note - I would be very comfortable adding such language in the RDFa
> Syntax Errata document immediately.  I will bring it up at the next Task
> Force call.)
> 
>> 
>>> The processing model in the current RDFa Syntax Recommendation is
>>> sufficiently precise for anyone to understand what must be done in
>>> the face of both conforming and non-conforming input.  The edge
>>> conditions people keep bringing up (what happens if xmlns:="" is
>>> defined, etc) are all degenerate cases of the general case of prefix
>>> declaration that does not match the syntax definition.  If it doesn't
>>> match the syntax definition, it is illegal.
>> 
>> Which syntax definition? In http://www.w3.org/TR/rdfa-syntax/ I can
>> only find a definition of the CURIE syntax, which is not relevant to
>> the issue of handling xmlns:="...".
> True.  That's what the XML Namespaces Recommendation is for.  And it
> tightly defines the syntax.  Anything that does not conform to that
> syntax is not a legal CURIE prefix declaration, and therefore would be
> ignored.
>> 
>> (In most cases the CURIE syntax restriction is sufficient - you can't
>> have rel="0:test" (it will just be ignored) so it doesn't really
>> matter how xmlns:0="..." was processed. But you can write rel=":test",
>> so it matters how xmlns:="..." interacts with that. And you can write
>> rel="ex:test" and xmlns:ex="" (empty value, illegal in Namespaces in
>> XML 1.0), so it matters how that is handled too.)
> The XML Namespaces Recommendation clearly says what is illegal,
> including xmlns:="...".  The RDFa Syntax Recommendation clearly states
> that there is no way to define a local default CURIE prefix mapping, and
> that rel=":next" is interpreted in the context of the XHTML Vocabulary
> URI.  So no, I don't think there is any room for misinterpretation or
> difference among implementations here.
> 
>> 
>> 
>> Presumably http://www.w3.org/TR/REC-xml-names/#NT-PrefixedAttName is
>> the relevant syntax definition for namespace prefix declarations, but
>> rdfa-syntax doesn't explicitly refer to that. It's implicit when using
>> RDFa in XHTML, because XHTML is based on top of xml-names and you'll
>> get a well-formedness error if you try writing these invalid things,
>> but that doesn't automatically apply when using HTML instead.
> RDFa Syntax DOES explicitly, normatively incorporate the XML Namespaces
> Recommendation.  It also explicitly, normatively says that the XML
> Namespace *syntax* is what is used to declare CURIE prefix mappings.  I
> wouldn't mind explaining in an errata that the syntax is defined at
> http://www.w3.org/TR/REC-xml-names/#NT-PrefixedAttName - would that help
> address your concerns?
>> 
>> Should the non-syntactic xml-names constraints be required too? e.g.
>> what triples should I get if I write the following HTML:
>> 
>>   <p xmlns:xml="http://example.org/" property="xml:test">Test</p>
>> 
>>   <p xmlns:xmlns="http://www.w3.org/2000/xmlns/"
>> property="xmlns:test">Test</p>
>> 
>>   <p xmlns:ex="http://www.w3.org/2000/xmlns/" property="ex:test">Test</p>
>> 
>> (which all violate the Namespace Constraints in xml-names)? I presume
>> these should all be ignored too, but implementers have not been doing
>> that, so evidently it is not sufficiently obvious.
> Such prefix declarations are illegal, and therefore MUST be ignored by a
> conforming RDFa Processor.  Do all processors do so today?  I doubt it.
> Could they?  Of course.  Should they?  Of course.  Would it break
> anything in the wild if they started doing so tomorrow?  No way.  These
> are good but pathological cases.  I would be happy to add test cases for
> them.  But in the end, whether we test for these cases or not in no way
> changes the definition of RDFa as it was published.  We have these
> constraints by normative reference already.
>> 
>> 
>>> If it is illegal, it is ignored.  What more does one need in a
>>> normative spec?
>> 
>> For RDFa-in-HTML, I'd like it to explicitly state what "illegal"
>> means, e.g. whether those Namespace Constraints should be applied in
>> non-XML-based versions of HTML. It doesn't need to redefine things
>> that are defined elsewhere, but it should explicitly refer to concepts
>> like PrefixedAttName and Namespace Constraints that are being used by
>> the RDFa-in-HTML processing model, because I don't think they are
>> obvious otherwise.
> I agree that all the prefix syntax declaration constraints should apply
> to both the XHTML and HTML versions of RDFa.  I think they do already
> because of the normative inclusion of the XML Namespaces Recommendation,
> but if you think it would help clarify things I am happy to 1) add an
> errata as I mentioned above, and 2) support adding some explicit text to
> the RDFa-in-HTML working draft.
>> 
>> 
>> For both RDFa-in-HTML and RDFa-in-XHTML, I'd also like it to slightly
>> more clearly state what "ignored" means:
>> 
>> The "CURIE and URI Processing" section says "any value that is not a
>> 'curie' according to the definition in the section CURIE Syntax
>> Definition MUST be ignored". The "Sequence" section refers to e.g.
>> "the URI from @about, if present, obtained according to the section on
>> CURIE and URI Processing", and I think it's clear it should be
>> considered not-present if it's not a valid CURIE. So <span
>> about="[bogus:bogus]" src="http://example.org/"> should ignore @about
>> and use @src, and that's all okay. (Some implementations still get
>> this wrong, though.)
> I think your interpretation is the correct one, and I think there is a
> test case to this effect already.  If it were not ignored, then @about
> would be interpreted as @about="" and that would refer to the current
> document and supercede @src.  Michael or Manu, can you confirm there is
> already a test case for this?
>> 
>> But it also says "if @property is not present then the [skip element]
>> flag is set to 'true'" - is an invalid CURIE meant to be considered
>> not-present here too (even though there's no reference to the CURIE
>> and URI Processing section)? i.e. should the output from:
>> 
>>     <p about="http://example.com/" rel="next">
>>       <span property="bogus:bogus">
>>         <span about="http://example.net/">Test</span>
>>       </span>
>>     </p>
>> 
>> include the triple '<http://example.com/>
>> <http://www.w3.org/1999/xhtml/vocab#next> <http://example.net/>' or
>> not? Implementations differ.
> The rules are to be applied consistently.  If there are no legal values
> in an attribute declaration, an implementation MUST act as if that
> attribute declaration were not present at all.  Again, I believe there
> are test cases that do this now, and it surprises me that you say
> implementations differ on this.  In the case of @property, I would
> support adding errata to clarify that this behaves as @about behaves if
> that would satisfy your concern.
>> 
>> It also says "If the [current element] contains no @rel or @rev
>> attribute" - is the attribute meant to be ignored (acting as if the
>> element didn't have the attribute at all) if it contains only invalid
>> CURIEs (or if it contains no values)? i.e. should the output from:
>> 
>>   <p xmlns:ex="http://example.org/" rel="bogus:bogus"
>> property="ex:test" href="http://example.org/href">Test</p>
>> 
>> include the triple '<http://example.org/href>
>> <http://example.org/test> "Test".' or '<> <http://example.org/test>
>> "Test".'? Implementations again differ.
> As above - all illegal attribute interpretations should be consistent
> throughout.  @rel or @rev with no legal values MUST be treated as if the
> attribute were not present at all.
>> 
>> The test suite should be extended to cover these cases, in order to
>> detect these differences between implementations (because at least one
>> must be buggy), if it doesn't already (I haven't checked). But I think
>> the RDFa Syntax spec should also be updated to be clear about the
>> expected behaviour, because I've tried to read it carefully and I'm
>> still not confident enough to know what the output should be.
> Understood.  We will discuss this at a Task Force meeting and see if
> there is a way to introduce a blanket statement via the errata.
> However, again, I believe there is no conflict in the spec as written
> currently.  There is ALWAYS room for misinterpretation in every spec.
> We can tighten the language and attempt to make the language more
> consistent. 
>> 
>> 
>>> I could come up with a nearly infinite collection of illegal
>>> declarations for each of the attributes that are addressed in the
>>> RDFa Syntax specification.  However, they would all fall into the
>>> same class - illegal.  When you are doing testing, you don't do
>>> "exhaustive" or even "thorough" testing of anything that is
>>> sufficiently complex.  It is impossible.  Instead, you do
>>> "equivalence class testing".  Identify a couple of use cases from
>>> each class of processing for a given interface, test those, and trust
>>> that the other values in the class will behave the same way.  For
>>> example, I would not test every single possible prefix name when
>>> exercising a CURIE processing library.  It is not just impossible, it
>>> is also uninteresting.  I would test some good ones and make sure
>>> they work.  I would test some bad ones and make sure they are
>>> ignored.  Then I would move on.
>> 
>> I would want to write tests that find bugs. There are lots of
>> different classes of bugs when handling illegal input - you might
>> forget to check the prefix is non-zero length, or forget to check it's
>> an NCName, or forget to check the value is non-empty, or forget to
>> check the value is not the xml or xmlns URI, or you might use the 4th
>> Edition of XML instead of the 5th, etc. There are dozens of mistakes
>> that people can (and apparently do) make when implementing this. Those
>> mistakes are not all equivalent, so they should each be tested as
>> separate equivalence classes, and it needs a lot more than a few tests
>> of illegal input.
>> 
>> (I agree that each class doesn't need to be tested exhaustively - e.g.
>> a few non-NCName prefixes are enough to detect bugs if implementations
>> aren't correctly checking for NCNames, and there's no need to test
>> thousands of non-NCNames because that's very unlikely to find any more
>> bugs. But I don't think anyone's ever proposed testing thousands of
>> non-NCNames, so I presume that's not really what you're concerned about.)
>> 
> 
> No, I'm not.  Poor testing is my personal soap box.  Sorry if I came off
> as attacking your testing methodology.  In general, I believe it is
> important to always identify each equivalence class.  There are several
> in the case the of XML Namespace prefix syntax, and it is a good idea to
> exercise each of them.  There are several in the case of CURIE
> interpretation in attribute values, and those should be exercised as well.
> 
> What I *personally* avoid is adding tests to make sure something no
> longer works wrong. Conformance testing is about ensuring all
> implementations work *right* in the presence of correct and incorrect
> usage. Failure or regression testing is about adding tests that exercise
> a reported failure. Once that reported failure is fixed, that test will
> never fail again.  Therefore, such tests check to make sure an
> implementation no longer works wrong.  It doesn't make it a bad test,
> but such tests are almost always exercising members of a class of input
> that SHOULD have been exercised by conformance testing in the first
> place.  Rather than add a hodge-podge of tests that touch on specific
> failure cases, I strive to define/update the related general equivalence
> class.  That way you are categorizing the test correctly and exercising
> the general feature, as opposed to the specific failure.
> 
> But as I said, that's my personal soap box.  I have been standing on it,
> beating my breast and shouting, for 25 years.  For some reason, there
> are people who remain unconvinced.  :-P
> 
> Shane P. McCarron                          Phone: +1 763 786-8160 x120
> Managing Director                            Fax: +1 763 786-8180
> ApTest Minnesota                            Inet: shane@aptest.com
> 
> 
> 

Received on Tuesday, 8 September 2009 16:36:03 UTC