On Mon, 5 Aug 2013, Michael Ströder wrote:
Zhang Weiwu wrote:
Do I need to design a new syntax at all? My requirement is the following:
I need a new syntax for ranged-values. Examples are:
- netWeight: 12~13kg
- ISOSensitivity: 800~1600
- heightAdjustableRange: 1.2m~1.5m
The spec of ranged-value is a numeric, optionally followed by a measurement unit, followed by a tild as seperator†, followed by another measurement.
The syntax needs its own comparison rules, so that you can filter a range, and get entries who offer values ranging in that range.
Not exactly what you're after but have a look at slapo-constraint. Maybe you can find some suitable regex patterns for your use-case.
Hmm, it would be handy to have min/max constraints for attribute types for which an ORDERING matching rule is defined. So maybe extending slapo-constraint would be the most flexible way of implementing ranges.
Thanks for the comment, but the problem your solution to solve is not the one I face. I guess I wasn't clear enough.
I do not intend to constrain the value of attributes, but to store the constraint into the value.
Perhaps it is best explained with examples. Say I want to find out all desks that can adjust to exactly 1.4m, there are 3 entris:
dn: model=BigDesk,dc=wood,dc=com model: BigDesk heightAdjustableRange: 1.6m~2m
dn: model=MediumDesk,dc=wood,dc=com model: MediumDesk heightAdjustableRange: 1.3m~1.8m
dn: model=SmallDesk,dc=wood,dc=com model: SmallDesk heightAdjustableRange: 1.1m~1.5m
And I do an inquiry, expect to get only MediumDesk and SmallDesk.
To reprise, there is no constraint to the value, but there are constraints in the value.
There are 2 ways to solve it, I am unsure which is better. The first is to design a new SYNTAX, apparently requiring coding a matching model.
The other method is to use multi-value INTEGER syntax:
dn: model=BigDesk,dc=wood,dc=com model: BigDesk possibleHeightInCM: 160 possibleHeightInCM: 200
dn: model=MediumDesk,dc=wood,dc=com model: MediumDesk possibleHeightInCM: 130 possibleHeightInCM: 180
dn: model=SmallDesk,dc=wood,dc=com model: SmallDesk possibleHeightInCM: 110 possibleHeightInCM: 150
And I can find my choice of desk by using:
(&(possibleHeightInCM>=140)(possibleHeightInCM<=140))
Which should result the SmallDesk and MediumDesk.