Business Rules, OCL, XML and Schemas
Note: this entry has moved.
DonXML is proposing extensions to OCL to express business rules that can be used at code-gen time and at run-time.He mentions my Schematron implementation called Schematron.NET, which allows many business rules to be expressed simply in terms of standard XPath expressions. I believe such an XPath-based language is good enough to express almost every business rule.
Udi Dahan commented as an example, a rule "only a bank manager can authorize a loan above X" which he said couldn't be expressed with Don's idea. It could, indeed, with something along these lines (XPath-like):
<assert test="sec:principal-role('BankManager') and po:Loan/@Amount < 1000">
Only a BankManager can place a loan of more than $1000.
</assert>
Note that XPath extensibility allows for more domain-specific extensions to be active, which can even check against databases, etc. For example, something like this:
<assert test="crm:customer-id(po:CustomerId)" />
in this case, the application would map the "crm" prefix to
the business objects that contain the logic, and register
the "customer-id" extension function to ensure the Id is a
valid one. This way, you can change business rules based on
a (well documented) set of extensions, and you can let
managers handle them, instead of programmers.
These schemas are easy enough for an advanced user to edit.
In
Schematron.NET, I'm implementing quite a few extensions, including
XSLT-specific ones, and adding the full
EXSLT
for .NET
implemented by
Dare Obasanjo. It's not impossible to think about a set of
domain-specific standard specs (like EXSLT itself) that
would aid in business rules expression.