- From: Thomas Van Lenten <thomasvl@google.com>
- Date: Tue, 28 Sep 2010 11:27:44 -0400
- To: uri@w3.org
On Tue, Sep 28, 2010 at 9:20 AM, Thomas Van Lenten <thomasvl@google.com> wrote:
> On Tue, Sep 28, 2010 at 8:58 AM, Thomas Van Lenten <thomasvl@google.com> wrote:
>> On Tue, Sep 28, 2010 at 5:52 AM, Mike Burrows <mjb@asplake.co.uk> wrote:
>>>
>>> Hi Thomas,
>>>
>>> On 27 September 2010 22:00, Thomas Van Lenten <thomasvl@google.com> wrote:
>>>>
>>>> I've been working on an Objective-C implementation of the 04 draft,
>>>> and ran into some questions:
>>>>
>>>> - How should empty strings be handled when the expression has more
>>>> then one variable reference? ('{x,empty,y}')
>>>
>>> I believe that this should expand to '1024,,768', because the empty string
>>> is a value like any other. This particular example isn't tested but it's
>>> consistent with other tests. For example, '{?x,y,empty}' expands to
>>> '?x=1024&y=768&empty='.
>>>
>>>>
>>>> - Section 2.3, paragraph 4 says an variable appearing more then once
>>>> should have the same value, what if a different default is listed in
>>>> both places? ('X{foo=val1}Y{foo=val2}Z')
>>>
>>> Mine expands this to 'Xval1Yval2Z'. Uncontroversial I hope.
>>
>> It does sortof conflict with the statement that values should have the
>> same value through the whole expression.
>>
>>>
>>>>
>>>> - How should empty strings within arrays be handled? (list = ( 'a',
>>>> '', 'b' ) :: '{list}' or '{?list}')
>>>>
>>>> - How should empty strings as values in an associative array be
>>>> handled? ('keys' = {'key1': 'val1', 'key2': '', 'key3': 'val3' } ::
>>>> '{keys}' or '{?keys}')
>>>
>>> Just more of the same I think, i.e. empty strings are not a special case.
>>
>> Right, the fact that empty arrays and associative arrays got special
>> treatment was part of why I figured I'd check to make sure they there
>> were additional expectations around empty strings within them.
>>
>>>
>>>> - How should empty strings as keys in an associative array be
>>>> handled? ('keys' = {'key1': 'val1', 'key2': 'val2', '': 'val3' } ::
>>>> '{keys}' or '{?keys}')
>>>
>>> Hadn't thought of that one. Is it valid/useful? But anyway, mine doesn't
>>> treat the empty string key any differently.
>>
>> I wasn't sure, I was just trying to add more cases to cover all the
>> combinations and the results were a little odd, so I figured I'd
>> confirm that was intended and that a special case wasn't wanted.
>
> Hit send too quick. Given:
>
> "list" : [ "val1", "", "val3" ],
> "keys1" : {"key1": "", "key2": "val2"},
> "keys2" : {"key1": "val1", "": "val2"}
>
> Which are correct?
>
> "{list}" -> "val1,val3"
> or
> "{list}" -> "val1,,val3"
>
> "{keys1}" -> "key2,val2"
> or
> "{keys1}" -> "key1,,key2,val2"
>
> "{keys2}" -> "key1,val1"
> or
> "{keys2}" -> ",val2,key1,val1"
>
> I'd actually coded the first before thinking about it. But maybe the
> second ones are right.
After a side thread with Mike Burrows, I'm thinking the first are
probably the right values. Here's another chunk for testing
implementations. The most interesting cases are probably:
'{;keysA}' -> ';key1,key2,val2'
'{;keysA*}' -> ';key1;key2=val2'
'{;keysA+}' -> ';keysA.key1;keysA.key2=val2'
'{?keysA}' -> '?keysA=key1,key2,val2'
'{?keysA*}' -> '?key1&key2=val2'
'{?keysA+}' -> '?keysA.key1&keysA.key2=val2'
TVL
--
"Two defaults for one variable" :
{
"variables": {
"y" : "768"
},
"testcases" : [
["1{undef=a}2{undef=b}3", "1a2b3"]
["0{undef}1{undef=a}2{undef}3{undef=b}4{undef}5", "01a2a3b4b5"]
]
},
"Empty strings within arrays and associative arrays" :
{
"variables": {
"list" : [ "val1", "", "val3" ],
"keysA" : {"key1": "", "key2": "val2"},
"keysB" : {"key1": "val1", "": "val2"}
},
"testcases" : [
["{list}", "val1,,val3"],
["{list*}", "val1,,val3"],
["{list+}", "list.val1,list.,list.val3"],
["{keysA}", "key1,,key2,val2"],
["{keysA*}", "key1,,key2,val2"],
["{keysA+}", "keysA.key1,,keysA.key2,val2"],
["{keysB}", ",val2,key1,val1"],
["{keysB*}", ",val2,key1,val1"],
["{keysB+}", "keysB.,val2,keysB.key1,val1"],
["{+list}", "val1,,val3"],
["{+list*}", "val1,,val3"],
["{+list+}", "list.val1,list.,list.val3"],
["{+keysA}", "key1,,key2,val2"],
["{+keysA*}", "key1,,key2,val2"],
["{+keysA+}", "keysA.key1,,keysA.key2,val2"],
["{+keysB}", ",val2,key1,val1"],
["{+keysB*}", ",val2,key1,val1"],
["{+keysB+}", "keysB.,val2,keysB.key1,val1"],
["{;list}", ";val1,,val3"],
["{;list*}", ";val1;;val3"],
["{;list+}", ";list=val1;list=;list=val3"],
["{;keysA}", ";key1,key2,val2"],
["{;keysA*}", ";key1;key2=val2"],
["{;keysA+}", ";keysA.key1;keysA.key2=val2"],
["{;keysB}", ";,val2,key1,val1"],
["{;keysB*}", ";=val2;key1=val1"],
["{;keysB+}", ";keysB.=val2;keysB.key1=val1"],
["{?list}", "?list=val1,,val3"],
["{?list*}", "?val1&&val3"],
["{?list+}", "?list=val1&list=&list=val3"],
["{?keysA}", "?keysA=key1,key2,val2"],
["{?keysA*}", "?key1&key2=val2"],
["{?keysA+}", "?keysA.key1&keysA.key2=val2"],
["{?keysB}", "?keysB=,val2,key1,val1"],
["{?keysB*}", "?=val2&key1=val1"],
["{?keysB+}", "?keysB.=val2&keysB.key1=val1"],
["{/list}", "/val1,,val3"],
["{/list*}", "/val1//val3"],
["{/list+}", "/list.val1/list./list.val3"],
["{/keysA}", "/key1,,key2,val2"],
["{/keysA*}", "/key1//key2/val2"],
["{/keysA+}", "/keysA.key1//keysA.key2/val2"],
["{/keysB}", "/,val2,key1,val1"],
["{/keysB*}", "//val2/key1/val1"],
["{/keysB+}", "/keysB./val2/keysB.key1/val1"],
["X{.list}", "X.val1,,val3"],
["X{.list*}", "X.val1..val3"],
["X{.list+}", "X.list.val1.list..list.val3"],
["X{.keysA}", "X.key1,,key2,val2"],
["X{.keysA*}", "X.key1..key2.val2"],
["X{.keysA+}", "X.keysA.key1..keysA.key2.val2"],
["X{.keysB}", "X.,val2,key1,val1"],
["X{.keysB*}", "X..val2.key1.val1"],
["X{.keysB+}", "X.keysB..val2.keysB.key1.val1"]
]
}
Received on Tuesday, 28 September 2010 15:28:42 UTC