Author Archives: admin

Was XLink A Mistake?

This morning, I read Robin Berjon’s little something on XML Bad Practices, originally a whitepaper he presented at XML Prague 2009. I was there, presenting right after he did, and I remember that I nervously listened to his presentation while preparing my own (not my finest hour but that’s a story for another blog entry), wanting to address some of his points. While a lot of what he said made good sense, some didn’t then and certainly don’t now.

In Reusing the Useless, Robin discusses XLink, a recommendation that remains my personal favourite among W3C’s plethora of recommendations. Apparently it’s no-one else’s, at least if Robin is to be believed. “Core XML specification produced by the W3C such as XSLT or XML Schema don’t use it even though they have linking elements,” he says, adding that very few have implemented anything but the rudimentary parts of it. But I get ahead of myself; let’s see what Robin says. He starts out with this:

That feeling (and a general sense that reuse is good) leads people to want to reuse as many parts of the XML stack as possible when creating a new language. That is a good feeling, and certainly one that should be listened to carefully — there are indeed many good and useful technologies to reuse.

This, of course, makes a lot of sense. We are in the standardisation business so we don’t want to reinvent the wheel every time. Me, I’ve done so time and again, and the one W3C recommendation I have used again and again is… XLink. It provides me with a neat way of defining link semantics without enforcing a processing model, from very simple point-to-point relations to multi-ended link abstractions. Yes, I have used both; Simple XLinks are present in most of my DTDs requiring cross-referencing, images or indeed any point-to-point semantics, and Extended XLinks were a useful and necessary addition to the aftermarket document structures of a major car manufacturer, among other things.

But again, I get ahead of myself. Here’s what raised my eyebrows for the first time, this morning:

But that only works if everyone plays, and furthermore the cost of using XLink has to be taken into account. First, a whole new namespace is needed.

This is interesting, to say the least. I thought this was one of the main points of introducing namespaces in the first place, to avoid name collisions.

The basic idea behind namespaces is extremely simple: you use one DTD (well, maybe it’s a schema since DTDs aren’t namespace-aware; there’s a lot I would like to say on that topic, too, so either this is going to be a very long post or I need to start writing down my ideas for blog posts) but in your instances you need to include content created using other schemas. One solution is to only use unique names, but this is a pipe dream and in reality, there’s only so many names you can give, say, a paragraph (p, ptxt, para, …) or a cross-reference (ref, href, link, …), without resorting to silliness. Inevitably, your elements and attributes will have the same names as someone else’s, and that can be a huge pain. Namespaces are a neat way of getting around this problem, and as an added bonus you’ll eventually always get that question, “what does the namespace URL stand for?” from your audience when presenting your work.

My point, and the simple question I would like to ask here, is why is it suddenly a bad thing to introduce a namespace for XLink when practically every recommendation, suggestion, and badly written XML configuration file seems to use one these days? Yes, they all come at a cost, among them that if you actually want to validate that included content from that other namespace, you need to implement something doing the work, somehow. You need to validate it against the right schema and so you need all kinds of lookup mechanisms and stuff. But if you can implement one namespace, shouldn’t you be able to implement several, especially if your imported namespace provides you with a useful mechanism, say, a standardised linking mechanism?

Namespaces aren’t my favourite W3C recommendation but it is what we have. In his blog and whitepaper, Robin points out several bad practices when implementing namespaces and I fully agree with them (perhaps excepting some of the discussion on a “default” namespace for attributes without a prefix), but they are mostly outside the topic at hand because I fail to see why they’d make XLink an undesired recommendation while still encouraging various others.

Robin continues:

Second, the distinction between href and src requires a second attribute.

To be perfectly honest, I’m not sure what this means. First of all, what, exactly, is, the distinction between href and src? According to the XLink recommendation, href “supplies the data that allows an XLink application to find a remote resource,” adding that when used, it must be a URI. In simple XLinks, href‘s are all you need; the source and a reference to it are (or rather, can be) the same thing. (Yes, there is some verbosity since you’ll need that namespace declaration and the XLink type, that sort of thing, but if you use XML Schema, you’ll be far more verbose than this anyway.)

When discussing extended XLinks, though, yes, there is a difference between a “source” and a “reference” to that source (provided I understand the objection correctly). It’s one of the really neat things with extended XLink because it allows us to leave out the linking information from the document instances. We can create complicated, multi-ended, linking structures between resources without the resources ever being aware of them being part of a link. The links can instead be described out-of-line, outside the resources, centrally in a linkbase.

To do this well, there needs to be a clear distinction between pointing out link ends and creating link arcs between them. Certainly, it requires more than one attribute, and in the XLink recommendation, it could easily require three (the pointer to the source, the source’s label, and the actual link arc).

Is this the only way to do multi-ended links? No, certainly not, but it does provide us with a standardised way, one that a group of people put considerable thought into. It is possible to redo the work and maybe even do it better, but unless you have a lot of time on your hands, why should you? It’s a perfectly serviceable recommendation, with far fewer side effects than, say, namespaces on older XML specs, and it does most of the things you’ll ever need with links.

(Granted, XLink, just as any post-namespaces spec, will cause havoc for any system that includes badly implemented XML parsers wanting to interpret everything before and including the colon in an element or attribute name as throwaway strings, but that’s not an XLink problem; it’s a namespaces problem and above all an implementation problem. XML allows colons in QNames; don’t use a parser that tries to redefine what was meant, once upon a time.)

Not everyone agreed with the XLink principles and so left them out in specs that followed, but I have a feeling that what happened was at least partly political (the linking in XHTML comes to mind, with the, um, discussions that ensued), plus that the timing could have been better. At the time, implementing XLink could be something of a pain.

An aside: around the time the XLink recommendation came out, I was heavily involved in implementing large-scale extended XLinks in a CMS for a well-known car manufacturer. Extended XLink solved many of our key problems; being able to define multiple relationships between multiple resources in multiple contexts using a central linkbase made, for the first time, actual single-source publishing possible for the company, and they had been using SGML for years.

The system almost wasn’t, however, for a very simple reason. The XML editor of choice (not my choice, by the way; I was presented with it as a fact of life) and its accompanying publishing solution could not handle the processing of inline link ends or indeed any kind of inline link elements beyond ID/IDREF pairs for page references. The editor and the publishing solution chosen would simply not allow us to access and process them, no matter what we did. This was before XSL-FO was finished or in widespread use, mind, and before most editors (including this one) would offer complete APIs for processing the XML.

I won’t go into details but the solution was ugly and almost voided the use of extended XLinks. No alternative linking solution would have fared any better, however; the problem was that we were slightly ahead of what was then practical to implement and several of the tools available then just didn’t cut it.

Getting back to Robin’s blog entry, he also says:

And then there are issues with parts of XLink being useless for (or detrimental to) one’s needs, which entails specifying that parts of it should be used but not others, or that on such and such element when one XLink attribute isn’t present it defaults to something specific not in the XLink specification, etc.

It’s hard to address the specifics here since there are none. I don’t have a clue of what parts of XLink are useless or detrimental to Robin’s work and can only address his more general complaints.

Most “standards” are like this. There is a basic spec that you need to adapt to, with the bare essentials, and there are additions that you can leave out if you don’t need them. XLink makes it easy to implement a minimal linking mechanism while offering a standardised way to expand that mechanism to suit future needs. It also deliberately leaves out the processing model, allowing, for example, for a far more flexible way to define “include” links than XInclude, a linking mechanism that in my mind is inferior in almost every respect to the relevant parts of the XLink spec.

Central here is that with XLink, I can use one linking mechanism for all my linking needs, from cross-references to images to include links, and still be able to define a single processing model for all of them, one that fits my needs. I suspect it would have been very difficult to define anything sufficiently consistent (yet flexible) in the spec itself, so why force one into it?

To me, this is akin to the early criticism DTDs received for lacking data typing. XML Schema added this capacity, resulting in a huge specification with a data typing part that either remained unused or was used for all the wrong reasons. In a document-centric world, data typing is mostly unnecessary which is a good reason to why it wasn’t included in DTDs. (In the few cases where data typing was useful, it was easy enough to add an attribute for the element(s) in question, containing either a regular expression or some other suitable content definition, and add the necessary processing for the applications as needed. There was no need to write a novel for the data types no-one needed, anyway.)

As you might guess, my point is that not including the processing model in the spec is a strength, not a weakness, because a sufficiently complete, general-purpose, processing model for a complete linking mechanism is most likely too complex to do well. It would only serve to create conflicting needs and make the spec less useful. Why not leave it to implementation?

Which brings me to Robin’s next point:

Core XML specification produced by the W3C such as XSLT or XML Schema don’t use it even though they have linking elements.

I don’t pretend to know why this is; I have an idea of why XHTML didn’t, and in my mind it had very little to do with any technical merits or lack of same, and a lot to do with politics and differing fractions in the W3C. Could it be the same with XML Schema and XSLT? It might; I know that XLink could have addressed the linking needs of both specs. Certainly, XML Schema is “costly” enough to not be bothered by an extra namespace among those already included. Maybe someone close to the working groups would like to share, but what’s the point now?

In Robin’s blog, the above statement leads to:

I don’t believe that anyone implements much in the way of generic link processing.

I’ve implemented a lot in this respect, starting from about the time XML became an official spec. XLink has proved to be very useful, allowing me to benefit from my earlier work while still being flexible enough to encourage some very differing link implementations.

Granted, most of my work has been document-centric, with my clients ranging from companies very small to the armed forces of my native country, but in all of these, XLink has proven to be sufficiently useful and flexible. A friend of mine, Henrik MÃ¥rtensson, now a business management guru, wrote a basic XLink implementation more than a decade ago (yes, long before XLink was a finished spec; we were both involved in implementing XLink in various places back then), with everything that was required to create useful links, be they cross-references, pointers to images, or something else. This implementation is still in use today, and while I and others have changed a lot of stuff surrounding it, the core and the basic model remain unchanged. My presentation at XML Prague 2009, right after Robin’s, touched on some of this work, and had my computer been healthier, he would have witnessed at least one XLink implementation.

Which (sort of) leads to Robin’s last point:

Reuse of other languages should be done where needed, and when the cost does not exceed that of reinvention.

I agree with the basic notion, obviously, but not with his conclusions. XLink, to me, is exactly the kind of semantics that is far easier to reuse than to reinvent. Yes, it is possible to simply write “href CDATA #IMPLIED” (or the schema equivalent) and be done with it, but anything more complex than that will benefit from standardisation, especially if you ever envision having to do it again. XLink is a terrific option when it comes to anything having to do with linking.

KMess…

…is a Linux-based IM client for Windows Live. It’s a very nice little app that allows me to connect to Windows Live, formerly known as MSN, without having to use Windows. Or allowed, because it’s broke. Right now it crashes every time I try to start it.

Oxygen 11 and an Old Bug

Oxygen 11 is out and I just installed it on my laptop. It’s still the best XML IDE there is, by far, but I’m getting a bit annoyed by a bug that has persisted for a year now.

Long story short, but basically the tabs bar that keeps track on the open documents and indicates the current document is buggy and will not correctly focus on the current document if that document is too far right to be visible without scrolling, and a previous document, also too far right to be visible without scrolling, has just been closed. The bar and the actual visible document do not synch so while the document itself is open and editable, the tab is missing. Very annoying, to say the least, if you are working with a highly modularised stylesheet and need to have more than a handful documents open at the same time. Apparently the bug is in a third party component and until that component is updated or replaced, the bug will persist.

I can live with that bug, though, and the new version seems to have enough fun stuff to keep me busy for a while. XProc support, for example, is a welcome addition. I’ve been wanting to try it ever since Norman Walsh presented it at XML Prague, and now there should be no further excuses.

Amarok Woes

Amarok, the best music player there is for Linux or indeed any platform, has been redesigned from the ground up. The old version 1.4, while feature-rich, was apparently up to the standards and visions of the app’s makers, and now, there is a 2.2 out.

Amarok 2.2 is completely different in terms of appearance (and probably even more internally), but right now I’m having lots of trouble getting it to work the way 1.4 did. Here’s what’s bugging me the most:

  • I can’t seem to get the playlists to sort my music according to albums without every album on the list being listed once for every song that album contains. VERY frustrating.
  • Version 2.2 reintroduced the capability to play audio CDs. However, this feature doesn’t seem to work on my laptop–the CD is listed but just won’t play (even Kscd plays on the laptop and that’s to say a lot). On my desktop, the CDs will play, though.
  • CD title lengths are always 0:00. Annoying.

I’m sure these will be sorted out in time, but right now, when KDE 4 is still buggy and unreliable, and Pulseaudio still mutes sound on every boot, there is enough on my plate already to keep me annoyed.

XMetaL and wine 1.1.28

wine 1.1.28 (the current wine-unstable package in Debian) breaks my old XMetaL 3.1 installation. The application starts but complains about Gecko not being installed, helpfully offers to install it… and then nothing. If I stop the installation, XMetaL starts but crashes soon afterwards, probably because XMetaL needs IE components, not Gecko.

I’m sure it’s fixable, somehow, but I’m not sure I’ll bother. Oxygen runs without problems and all I need is a good enough XML editor.

Corena S1000D User Forum

Earlier this week, I spent two days attending the Corena S1000D User Forum in Kongsberg, Norway. As product-specific user forums go, this one was quite informative and I remain impressed with the Corena product line. They certainly offer a good mix of S1000D functionality, with clear promises of getting better in many areas of the spec (my current favourite is the applicability editor), and it seems to me that few products out there can match theirs.

And of course, Svante Ericsson, a leading authority on the S1000D standard, gave a talk that in itself made the drive to Kongsberg worth my while. Svante is a former colleague of mine from my days at Information & Media (now Sörman) and knows better than most out there what he’s talking about. He’s also a lot of fun to listen to.

Integrated Logistic Support

I’m spending this week in Malmö in southern Sweden, participating in a course on Integrated Logistics Support (ILS). ILS, basically, is about planning for and supporting a product’s whole lifecycle, from its early planning stages and onwards to the deployment (called “employment plan”, a phrase that to me meant something very different until today), the product’s useful life, including maintenance and support, and the product’s eventual disposal. As always, the idea is to create a better and more cost-effective product, meaning more money to you. See, what’s really interesting is how the results of an ILS analysis, called LSA (don’t you just love acronyms?), can be put into the design of the product itself and how a proper analysis can help significantly reduce cost.

ILS is traditionally about military products, preferably state-of-the art helicopters or perhaps a large frigate but an ordinary rifle can benefit, too, and so is the course I’m attending, but it’s easy to see how ILS can be put into good use elsewhere. It’s fascinating stuff. Obviously it’s a bit early for me to comment on anything factually relevant, being a complete newbie in all things ILS, but I can see a relevance to document management and the systems I help build when I’m not in Malmö¶.

As I said, fascinating stuff.

More on KDE 4.3

I like KDE 4.3. Let’s make that perfectly clear, because after reading this, you might get the wrong idea.

KDE 4.3 ha a far more finished look and feel than 4.2. Things seem to be better integrated and the crashes are fewer, with fewer causes. I’ve finally got the hang of Dolphin (that tricky address bar, for one thing), and I even got Kscd to work.

But.

There are many annoyances as well:

  • KMix mutes the master volume on every startup (I only have to unmute it and turn the volume up, but this is very annoying to do on every startup).
  • Okular won’t accept (or remember) landscape print settings (Document Viewer from Gnome, that uses the same printer drivers, as far as I can tell,has no problems).
  • The eye candy on Desktop settings usually crashes parts of the KDE environment, with the taskbar going first, if you try more than one or two settings.
  • The PulseAudio/Phonon combo is very unreliable. With GStreamer, it won’t output sound, but with the Xine backend, it usually does.
  • Amarok no longer knows how to play CDs. I tried to use Rhythmbox but it chops up CD audio in 15-second bursts with a 200 ms pause between every one, and for the life of me, I can’t figure out why.

Some of the eye candy issues could easily be related to the (very) buggy Intel Xorg driver, but I still think that KDE shouldn’t crash as a result.

On the whole, I like the environment, though. 😉

KDE 4.3…

…is a big step forward. Finally things are starting to actually work. Now, if they could only reimplement the CD player functionality in Amarok I’d be even happier. (And to be honest, I’m not sure I like Amarok’s new look.)