Search code examples
xmlbpmn

What does the double hash `##` in an XML element attribute mean?


I am reading the spec for BPMN 2.0 (http://www.omg.org/spec/BPMN/2.0/) and came across the usage of a double hash mark ## as the first characters of the value of an XML element attribute. For example:

<semantic:userTask implementation="##unspecified" completionQuantity="1" isForCompensation="false" startQuantity="1" name="edit 1st level ticket" id="_6-145">

Or look at the spec pdf file table 10.9 and table 10.45 for an example. This pdf contains many more places where this syntax is used.

As I was wondering what this means, I started searching. I see it used in XML schema any element (https://www.w3schools.com/xml/el_any.asp), namespace attribute, for which the value always seems to start with ##.

In BPMN, it seems that it is used when they (the writers of the spec) want the user to specify what technology she wishes to use as implementation. The default would be a web service, but they try to leave that up to the user. The user may use ##Unspecified, or ##WebService, or provide some URI instead.

I can't find anything about the double hash in XML and why it is used in this way.

Why is ## used here? What does it mean? What is the origin? What is it called?

Edit. I accepted Michael Kays answer, but I would still be interested to hear if anyone knows if this is specified oficially somewhere.


Solution

  • It doesn't mean anything in particular. In XML Schema tokens like "##other" are used because they are not valid URIs (a valid URI cannot contain "##") and therefore cannot be mistaken for a namespace. Perhaps BMPN is using this convention for the same reason, or perhaps it has its own reasons. Either way, it doesn't mean anything at the XML level, it's a convention used in your particular vocabulary, and they might well have chosen it simply because it stands out better than "**" or "$$".