- From: Mark Birbeck <mark.birbeck@formsPlayer.com>
- Date: Thu, 15 Nov 2007 09:47:58 +0000
- To: Ben Adida <ben@adida.net>
- Cc: RDFa <public-rdf-in-xhtml-tf@w3.org>
Hi Ben, Ok...I realise we need to see 'other' rules, and I did say that I would do that. I was trying to keep the threads separate though, so as to show the problems caused by your rules--I thought that might be easier for people to deal with. :) Regards, Mark -- Mark Birbeck, formsPlayer mark.birbeck@formsPlayer.com | +44 (0) 20 7689 9232 http://www.formsPlayer.com | http://internet-apps.blogspot.com standards. innovation. On 15 Nov 2007, at 07:18, Ben Adida wrote: > Mark, > > It's a little bit frustrating, after a few weeks of waiting, to see > this message which focuses on inconsistencies in my fully defined > set of rules, while glossing over the potential complications of > your rules, in large part because you haven't fully defined them. > > Can you send your processing model, some code, or something so we > can evaluate how these rules will behave? From conversations we've > had, I'm fairly certain that manu's interpretation of your rules is > not what you intend, but we're going nowhere without a complete > proposal. In particular, you should explain how instanceof on a > child node hooks up with the rel of the parent node, without > causing issues when the instanceof element has siblings. > > I'm more than happy to change my mind and adopt your system if it > works, but right now there simply isn't enough information to tell. > > -Ben > > On Nov 14, 2007, at 3:14 PM, Mark Birbeck > <mark.birbeck@formsPlayer.com> wrote: > >> Hi Ben, >> >> I've written and re-written the following post umpteen times, over >> the last month or so. :) Finally, I've decided that the best way >> to break this down is to explain why I disagree with your >> approach, and then separately to spell out the extra couple of >> rules we need to make your use-cases work. All attempts I've made >> to mix the two have been even longer than this email...and as you >> can see below, this shortened version is still pretty long! >> >> So, here goes... >> >> You wrote: >>> Manu wanted me to express my proposed @instanceof rules in a way >>> similar >>> to what he recently posted [1], so that we could compare. >>> >>> The main driver for my rules is to make it easy for @instanceof >>> to be >>> used on chaining nodes, so that one can say "I know a person named >>> 'Ralph'", or even the more complicated "I know a person who knows a >>> person who knows a person named 'Bill'". >> >> The statements: >> >> I know a person named 'Ralph' >> >> and: >> >> I know a person who knows a person who knows a person named 'Bill' >> >> were both always possible in earlier versions of RDFa, and in my >> view, in a way that is simpler than in your proposal. So before I >> go into that, some context. >> >> >> CONTEXT >> >> What I believe has happened is this; chaining was removed from >> RDFa in the first draft that was produced within the taskforce, >> because it was deemed too complicated. After a while--and probably >> many use-cases :) --you proposed the idea that @href, @src, etc., >> should set the subject of contained statements, which was both an >> insightful idea, and effectively a 'reintroduction' of chaining. :) >> >> However, there are a number of other aspects to chaining that need >> to be 'reintroduced' if we are to make it completely consistent, >> and I think it is the lack of these that makes your proposal not >> quite hang together (in my view). I don't think I can explain them >> all in this posting, but what I do think is important to do first-- >> which I will do here--is to explore the problems with your >> 'rules', and to look at why I think they create unnecessary >> inconsistencies with attribute behaviour, without any gain. >> >> (Sorry to put it so bluntly!) >> >> >> CONSISTENCY >> >> I'll begin with your first statement, that: >> >> I know a person called Ralph >> >> To indicate this, if we had all of the 'old' chaining rules in >> RDFa, then *any* of the following constructs could be used: >> >> ======== >> <div about="#me"> >> <div rel="foaf:knows"> >> <div instanceof="foaf:Person"> >> <span property="foaf:name">Ralph</span> >> </div> >> </div> >> </div> >> ======== >> >> ======== >> <div about="#me"> >> <div rel="foaf:knows"> >> <span property="foaf:name" instanceof="foaf:Person">Ralph</span> >> </div> >> </div> >> ======== >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <div instanceof="foaf:Person"> >> <span property="foaf:name">Ralph</span> >> </div> >> </div> >> ======== >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span property="foaf:name" instanceof="foaf:Person">Ralph</span> >> </div> >> ======== >> >> Note the consistency as the mark-up is expanded and contracted--by >> which I mean that elements are added and removed--the rules always >> stay the same, regardless of the presence of other attributes. In >> fact, if you removed the _elements_ and left behind only the >> attributes, every single one of these constructs results in the >> same structure: >> >> about="#me" >> rel="foaf:knows" >> {bnode} >> instanceof="foaf:Person" >> property="foaf:name" >> content="Ralph" >> >> This is obviously desirable, and is no accident. >> >> Before I look at your rules in more depth, Ben, I'd like to >> continue to demonstrate the consistency of the 'complete' set of >> chaining rules that we used to have (which as I said, I'll go into >> in another thread). We'll take as our starting-point the last >> piece of mark-up, i.e., this one: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span property="foaf:name" instanceof="foaf:Person">Ralph</span> >> </div> >> ======== >> >> and use it as a base from which to build up to your more >> complicated scenario: >> >> I know a person who knows a person who knows a person named 'Bill' >> >> However, let's make the example slightly more realistic, by adding >> more information--we'll give each of the people down the chain a >> name, as follows: >> >> I know a person named 'Ralph', who knows a person named 'Ivan', >> who knows a >> person named 'Bill' >> >> Having established where we're heading, we need to do one last >> minor piece of preparation, and that is to slightly reorganise the >> mark-up so that we use @content instead of an inline literal; this >> makes the examples easier to read as they get more complex, and of >> course, it makes it easier to 'nest' elements, one inside the other. >> >> So, our first statement, from which we will build up, now looks >> like this: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> </span> >> </div> >> ======== >> >> The next step is to simply cut-and-paste Ralph (painless, I hope), >> in order to create a third person that looks exactly like the >> second one, but with the name value set to 'Ivan': >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> </span> >> </div> >> ======== >> >> Note that the only difference between this 'person' and the one we >> already had was that @content is set to 'Ivan' instead of 'Ralph', >> but the structure is exactly the same. >> >> Once we've added this extra 'person' item, all we should have to >> do is to add an additional predicate to the second item (i.e., >> Ralph), to indicate the relationship between the two people: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> rel="foaf:knows" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> </span> >> </div> >> ======== >> >> As you can see, the only difference between the mark-up that >> expressed two _unconnected_ people (i.e., the previous step), and >> the mark-up that has two _connected_ people, is at line 5; it is >> there that we have added the extra predicate to the second item >> (Ralph) that indicates a relationship with the third item (Ivan). >> >> The first thing that is important here--although the significance >> is probably quite obvious--is the way that I created the 'inner' >> item by cutting-and-pasting an item from elsewhere; the >> consistency of the language means that you can just 'drop' items >> from different places into position. In addition, we can keep >> adding child elements, getting deeper and deeper, as much as we like. >> >> The second thing that is worth noting is that adding the @rel to >> establish the relationship between the two items is nothing more >> than adding a predicate to an item, and so does not change that >> item in any way. I'll say more on this below, but at this point >> the key thing to note is that adding and removing the @rel only >> changes the relationship between the items, and changes nothing >> about the item itself. >> >> Anyway, let's continue, and finish your more complex scenario; we >> need to add: >> >> Ivan knows a person called 'Bill' >> >> As before, first we add a self-contained 'person' item: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> rel="foaf:knows" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Bill" >> > >> </span> >> </span> >> </span> >> </div> >> ======== >> >> and then, as before, we add the relationship between Ivan and Bill: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> rel="foaf:knows" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> rel="foaf:knows" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ben" >> > >> </span> >> </span> >> </span> >> </div> >> ======== >> >> >> SUMMARY OF POSITION >> >> Now, hopefully what's obvious after having carried out the same >> process twice is that: >> >> * the attributes behave consistently; >> >> * @instanceof always applies to the subject on an element >> (possibly a bnode), and not the object. >> In this, therefore, it does not differ from the setting of any >> other predicate; >> >> * items can be easily cut from one document and dropped into >> another, as self-contained >> building-blocks that stand in relation to other items; >> >> * adding a relationship between one item and another does not >> change anything about the items. >> >> I think all of these are important arguments, and each of them >> presents a strong case against making @instanceof behave in the >> way that you want, Ben. But I think the most significant is the >> last, which I mentioned earlier, and said I'd return to. >> >> >> ESTABLISHING A RELATIONSHIP SHOULDN'T >> CHANGE AN ITEM'S MEANING >> >> So, to illustrate what I mean by saying that 'adding a >> relationship changes the meaning of the items', let's rewind to >> the beginning of my steps, and this time we'll use your rules >> instead of my 'old' RDFa rules. Also, since I'm not 100% certain >> that we agree on the meaning of the mark-up I've used as my >> starting-point, I've scoured all the discussions for a piece of >> mark-up that both sets of rules agree on, and found this (the >> initial comment is yours, just to put the mark-up into context): >> >> "And if you wanted to declare #me a foaf:Person, you would write >> it with two elements: >> >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span property="foaf:name">Ralph</span> >> </div> >> </div>" >> >> I think we agree that in both sets of rules this snippet means: >> >> I am a person who knows something named 'Ralph' >> >> As before I'll use @content to make things easier to read, giving >> us this: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span property="foaf:name" content="Ralph"> >> </span> >> </div> >> </div> >> ======== >> >> Now, we're ready to proceed pretty much as before. >> >> Let's say that Ralph knows Ivan; we know that Ivan can be >> identified by "http://www.w3.org/People/Ivan/#me", so it should be >> pretty straightforward to add @rel="foaf:knows", as follows: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> </span> >> </div> >> </div> >> ======== >> >> This inner element is quite a nice, self-contained block. At the >> moment it could be passed around from one document to another in >> its self-contained form: >> >> ======== >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> </span> >> ======== >> >> No matter where it appears it should mean the same thing--this is >> the 'cut-and-paste' point I made earlier. >> >> But what if we want this self-contained block to also indicate >> that Ralph is a person? In earlier versions of RDFa we could have >> added a child <link>, as follows: >> >> ======== >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> <link rel="rdf:type" resource="[foaf:Person]" /> >> </span> >> ======== >> >> However, as we know, due to browser limitations we've had to >> remove this feature--the rule that allows '<link> and <meta> >> everywhere--from the current version of RDFa , although it is >> still present in XHTML 2's use of RDFa. >> >> There was an additional design principle, though, that <link> as a >> child element was actually a longhand version of adding an >> attribute to the element, so the previous mark-up *should be* the >> same as this: >> >> ======== >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> instanceof="foaf:Person" >> > >> </span> >> ======== >> >> That's a slight diversion, but essentially my point is that since >> @instanceof is the renamed @class, and @class was always >> understood to be a shorthand for a child <link> element, then it >> is easy to see why the type and all predicates should be applied >> to the same subject. (And conversely, it is a very big leap to >> suggest that instead we should apply @instanceof to the _object_ >> rather than the _subject_, since there is nothing in the general >> architecture of RDFa that gives a precedent for that.) >> >> So, your rules effectively suggest that @instanceof no longer >> applies to the subject of the element as it used to, but is now >> applied to the 'thing' being referred to, in this case Ivan. So if >> we wanted to indicate that 'the thing named Ralph' is a person, >> we would have to wrap the mark-up in another element, and put the >> type onto that element. In other words, we would have to go from >> this: >> >> ======== >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> </span> >> ======== >> >> to this: >> >> ======== >> <span instanceof="foaf:Person"> >> <span >> property="foaf:name" content="Ralph" >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> </span> >> </span> >> ======== >> >> You could say that this is not onerous, but it's not the extra >> mark-up that is the problem, it's the justification; we're asking >> authors to create an extra containing element, only because there >> is a resource predicate sitting on the element that represents the >> item that we want to set the type of. If the element didn't have a >> resource predicate: >> >> ======== >> <span >> property="foaf:name" content="Ralph" >> > >> </span> >> ======== >> >> then we'd be allowed to add the type information to the same >> element as the one containing the literal: >> >> ======== >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> </span> >> ======== >> >> In other words, there would be no need for the containing element. >> >> In my mind this kind of restriction is a world away from the rules >> I showed at the beginning where all sorts of different pieces of >> mark-up represented exactly the same set of triples. >> >> >> MORE COMPLEX >> >> Anyway, let's continue with this item--a self-contained item which >> is now 'a person named Ralph'. Given such an item, we'd expect to >> be able to put this anywhere we like, without any unexpected side- >> effects. So to continue our example, let's drop it into the the >> mark-up we were looking at earlier: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> </span> >> </div> >> </div> >> ======== >> >> We now have: >> >> I am a person who knows a person named 'Ralph'. >> >> Let's duplicate Ralph, change the name to Ivan, and paste this >> into the empty <span> element that represents Ralph: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> </span> >> </div> >> </div> >> ======== >> >> At the moment there is no relationship between the two items, and >> all we have is this: >> >> I am a person who knows a person named 'Ralph' >> >> There is a person named 'Ivan' >> >> This is pretty much the same as we had when building this up using >> my rules, and as before, we want to now continue on, heading for >> the same complex statement about Ralph, Ivan and Bill that we had >> above. So now we need to say that not only do 'I know Ralph', but >> also that 'Ralph knows Ivan'. We know that to express this >> relationship we need to use @rel="foaf:knows", so the question is >> quite simply, where should we put this attribute? >> >> Since the predicate we are expressing ('foaf:knows') is a property >> of Ralph, then it would seem to make sense to add the attribute to >> Ralph's <span>: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> rel="foaf:knows" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> </span> >> </div> >> </div> >> ======== >> >> In the rules as they used to be, and as I showed above, this gives >> the desired result, with no side-effects. But with the rules you >> are proposing, Ben, although adding the @rel at this position >> creates the desired _relationship_ between the two items, it >> causes a number of very awkward things to happen. >> >> >> SIDE-EFFECTS >> >> First, Ralph's @instanceof suddenly 'moves' from applying to him, >> to now applying to the bnode that the @rel creates. In other >> words, one moment Ralph is a person, the next he isn't, and all >> the author did was to try to place the item representing Ralph >> into a relationship with some other item. >> >> Secondly, in your rules we are saying that 'Ivan is a person', twice. >> >> Now you could argue that in order to create the explicit >> relationship that we want, we have to mark things up differently >> to this, according to your rules; after all, the fact that your >> rules don't give the same results as mine is the whole point of >> the discussion. :) So once again, to make things work we have to >> introduce an extra mediating element: >> >> ======== >> <div about="#me" instanceof="foaf:Person"> >> <div rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> >> <span rel="foaf:knows"> >> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> >> </span> >> >> </span> >> </div> >> </div> >> ======== >> >> Essentially we've had to add the extra element in between the two >> items, with @rel on it. Admittedly, as I said before, that's not >> an enormous amount of extra mark-up, but the real problem I have >> with this is that it is something that an author *must* do; it's >> not just a coding convention, or something that makes things a >> little easier to read, but is actually something that if the >> author _didn't_ do it, then their mark-up would mean something >> completely different to what they wanted it to mean. >> >> >> SIMPLE PATTERNS >> >> But the worse thing about this is that it breaks the simple >> pattern that we have in RDFa, and it raises the question, why is >> @rel allowed to accompany its subject on statements like "I know a >> person named 'Ralph'": >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> </span> >> </div> >> ======== >> >> but it is not allowed to accompany its subject on the next >> statement, "Ralph knows a person named 'Ivan'"? The mark-up for >> that looks like this: >> >> ======== >> <div about="#me" rel="foaf:knows"> >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> >> rel="foaf:knows" href="http://www.w3.org/People/Ivan/#me" >> > >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> </span> >> </div> >> ======== >> >> and although it works fine with my rules (we get "I know a person >> named 'Ralph' who knows a person named 'Ivan'"), when using your >> rules it is not intuitive at all why the @instanceof on the 'Ralph >> item' should suddenly 'jump' to begin applying to Ivan. >> >> >> PREDICATE PERMUTATIONS >> >> To put this in a different way again, it's worth looking at what >> is the limit of what an element can express, as follows. Under >> normal circumstances, an element can obviously have a subject, but >> then on top of that, an element could have a maximum of three >> predicates, i.e., a literal, a resource, and an rdf:type. However, >> with your rules we have to effectively say that not all >> permutations are possible, and instead say that an element can >> only have a maximum of two predicates to accompany the subject. >> The permutations are as follows: >> >> * a literal on its own; >> * a resource on its own; >> * a type on its own; >> * a literal and a resource; >> * a literal and a type. >> >> After that, when using your rules the remaining two permutations >> are unavailable: >> >> * a resource and a type; >> * a literal, a resource and a type. >> >> This is because the moment you add a predicate that takes a >> resource--as we did here by saying that Ralph knows Ivan--the type >> value no longer applies to the subject. >> >> What I've tried to show in the way that the examples have >> gradually built up, adding a small piece of mark-up at a time, is >> that this restriction is unfair to authors; why should taking a >> self-contained item and adding a predicate to it change the >> meaning of that item? >> >> >> BUCKAROO >> >> This 'flip/flop' behaviour reminds me of the children's game >> Buckaroo, where adding just one more item to the donkey's saddle >> can make it suddenly kick its hind legs in the air, throwing >> everything off its back that the players have added. :) In the >> case of your rules, adding @rel when @instanceof is already >> present, causes everything to be thrown into the air. >> >> You might argue that I'm putting this a little strongly, and that >> it's not just _any_ relationship between two items that causes a >> problem, but rather it's the specific 'hierarchical' relationship >> that we've been using so far (i.e., where one <span> is inside >> another). But I'm afraid that's not the case, and even if we >> remove this hierarchy, the problem remains. >> >> Let's rewrite the items for Ralph and Ivan so that they appear >> side-by-side, and let's also give Ivan the identifier that he uses: >> >> ======== >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> > >> </span> >> >> <span >> about="http://www.w3.org/People/Ivan/#me" >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> ======== >> >> Combining both pieces of mark-up, both your rules and mine would >> agree with the following interpretation: >> >> There is a person named 'Ralph' >> >> There is a person named 'Ivan', identified by the resource >> <http://www.w3.org/People/Ivan/#me> >> >> Now, if we wanted to add the fact that Ralph knows Ivan, once >> again it would seem obvious to put the relationship information >> directly onto Ralph's <span>, as follows: >> >> ======== >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ralph" >> rel="foaf:knows" resource="http://www.w3.org/People/Ivan/#me" >> > >> </span> >> ======== >> >> But now, once again, simply by expressing a relationship between >> two items, the rules you are proposing cause a change in the >> actual *meaning* of one of those items; in this case, Ralph is no >> longer a 'person', because the moment that you added the @rel/ >> @resource combination, the @instanceof attribute 'flips' to >> applying to Ivan. >> >> And note also that the Buckaroo doesn't just happen with the use >> of @rel and @instanceof. Let's return to the mark-up describing Ivan: >> >> ======== >> <span >> about="http://www.w3.org/People/Ivan/#me" >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> > >> </span> >> ======== >> >> We agree that this means: >> >> There is a person named 'Ivan', identified by the resource >> <http://www.w3.org/People/Ivan/#me> >> >> Let's add that Ivan knows Ralph: >> >> ======== >> <span >> about="http://www.w3.org/People/Ivan/#me" >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> rel="foaf:knows" resource="http://www.w3.org/People/Ralph/#me" >> > >> </span> >> ======== >> >> Again, we should agree that this means: >> >> There is a person named 'Ivan', identified by the resource >> <http://www.w3.org/People/Ivan/#me> >> who knows something identified by the resource <http://www.w3.org/ >> People/Ralph/#me> >> >> Everything looks fine, so far...now try removing the @about value, >> perhaps to include this block somewhere else. Unfortunately, we >> once again get a flip/flop of meaning--a Buckaroo--since the mark- >> up without @about means something completely different: >> >> ======== >> <span >> instanceof="foaf:Person" >> property="foaf:name" content="Ivan" >> rel="foaf:knows" resource="http://www.w3.org/People/Ralph/#me" >> > >> </span> >> ======== >> >> In your rules Ben, this means: >> >> Something with a name of 'Ivan' knows a person identified by the >> resource <http://www.w3.org/People/Ralph/#me> >> >> With my rules, removing @about has no effect on the general >> meaning, which seems to me reliable and predictable--all removing >> the identifier does to our item is to remove the identifier. :) In >> other words, from this: >> >> There is a person named 'Ivan', identified by the resource >> <http://www.w3.org/People/Ivan/#me> >> who knows something identified by the resource <http://www.w3.org/ >> People/Ralph/#me> >> >> we simply get this: >> >> There is a person named 'Ivan' who knows something identified by the >> resource <http://www.w3.org/People/Ralph/#me> >> >> >> AVOIDING THE US OF ALL ATTRIBUTES AT THE SAME TIME >> >> I know that you've suggested before that you wouldn't put all of >> the RDFa attributes onto one element in the way that I have done >> here, but I'm afraid I don't think that is a legitimate argument, >> for three reasons. First, as we just saw, there is actually no >> problem when *all* attributes are present, so the argument would >> need to be that we should avoid using 'most attributes'. :) But >> seriously, the problem in the last example I gave didn't arise >> until we went from using every attribute to removing @about. >> Likewise, in our earlier examples the problem arose when we tried >> to add @rel to an element that already had @instanceof, and so >> again was not a problem of having 'all' attributes. >> >> The second reason is that the rules need to be consistent under >> all circumstances, and we can't simply say to people that they >> should avoid certain patterns because they don't behave in the way >> that they are expected to. >> >> But the third reason is that I've not actually picked outlandish >> examples here--I've used the examples that you've suggested Ben, >> so as to create as much common terrain as possible. I hope you can >> see from these examples that having lots of attributes present is >> really not that unusual. >> >> >> CONCLUSION >> >> I think the fact that you effectively came up with the same idea >> as chaining a 'second time' is pretty impressive! But I think that >> if we are to reintroduce it--which I'm mostly in favour of--we >> need to grab a couple of extra rules that we're currently missing. >> >> I think it's worth looking at those in a separate thread, since I >> don't think it affects this discussion; at core, this thread is >> about whether @instanceof should apply to the object on an >> element, if present, and as I've tried to argue, I think it would >> be a big mistake if we made our attributes behave inconsistently >> in order to support that rule, especially when we can actually >> fulfill all of the use-cases that you (rightly) require. >> >> Regards, >> >> Mark >> >> -- >> Mark Birbeck, formsPlayer >> >> mark.birbeck@formsPlayer.com | +44 (0) 20 7689 9232 >> http://www.formsPlayer.com | http://internet-apps.blogspot.com >> >> standards. innovation.
Received on Thursday, 15 November 2007 09:48:25 UTC