OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

xacml message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Subject: RE: [xacml] [CR] AttributeSelectorIndirect


On Fri, 6 Sep 2002, Daniel Engovatov wrote:

>
> >However, if you really want to put a "value" as the second argument, of
> >which I cannot see a good argument against, it would require a SCHEMA
> >CHANGE.
>
> That what was my reason for allowing <attributevalue> to specify a sequence.
>
> >Given that we agree with that, If you believe the /a/b/c/text() will
> >return a sequence of one you would use:
> >
> > <ResourceMatch MatchId="function:string-equal">
> >   <AttributeSelector RequestContextPath="/a/b/@b1/">
> >   <Apply FunctionId="string-first-and-only">
> >      <AttributeSelector
> >                RequestContextPath="/a/b/c/text()"/>
> >   </Apply>
> > </ResourceMatch>
>
> Illegal.  First argument is of type sequence<string> -
> need to

That is true, the first argument is of type sequence<xs:string>, because
that is what the schema says. The first element of the ResourceMatch
structure must be a AttributeSelector or a AttributeDesignator.

> 1)wrap both arguments in first-and-only

Nope. You need a value of type "a", you need a sequence of type "b",
denoted as [b], and a function that compares things of type "a" to type
"b" and returns a boolean.

In Haskell, the formal type signature of the resourceMatch function is:

resourceMatch :: ( a -> b -> Boolean ) -> [b] -> a -> Boolean

It's formal definition in Haskell would be:

resourceMatch f []     a = False
resourceMatch f (b:bs) a = (f a b) || (resourceMatch bs a)


  NB:: (b:bs) means a sequence where b is the head element and bs is the
       rest. function application is by juxtaposition. || is an infix
       logical OR operator. [] is the empty sequence.

For our cases, the functions we would use would be functions of type
( a -> a -> Boolean), i.e. functions that compare two elements of the
same type, such as "string-equal", or "integer-equal".

> 2)use string-member-of - with <attribute value> for first argument, if you
> do not care whether the selector
> returns multiple values

Unfortunately, the first argument, by the schema, says that it must be the
Selector or Designator. The explicit value to match against is the second
element in the schema. To reverse them, which I wouldn't mind, we would
need a SCHEMA change, and I would have to change the definition of the
match functions.

> 3) use set-equal, with second argument specified using string-sequence
> function, or another selector,

Then, technically you want two ResourceMatch expressions. The one above
and the following, of which the type signature is:

resourceMatch2:: ([a] -> [b] -> Boolean) -> [a] -> [b] -> Boolean

and its definition:

resourceMatch2 f as bs = f (as bs)

But you see that this kind of "Match" is nothing but a function
application, so why not just use Apply?

> 4) use that new string-at-least-one-member-of (or, God, can it be made
> shorter? ;) , again, if you do not
> care about

This is pretty much the operation of ResourceMatch, and the other Match
functions.

-Polar

> All this options, unless we go back to my original proposal to make
> functions determine appropriate sequence
> length at runtime (yeah, I know, it is not good), require relaxing
> requirements for the <*Match> functions,
> to be the same as condition - arbitrary types of arguments to the top
> predicate.  Which is not bad at all, on
> the other hand - unless you go really crazy, and start putting extension
> function with side effects into
> matches.
>
> daniel;
>
> ----------------------------------------------------------------
> To subscribe or unsubscribe from this elist use the subscription
> manager: <http://lists.oasis-open.org/ob/adm.pl>
>



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


Powered by eList eXpress LLC