I don't know.
Here's what I know:
When Oliver designed LZX, he wanted the language to take advantage of standards
like XML and ECMAScript. He wanted LZX to be familiar to HTML developers, so
for the most part we try to obey w3c standards where applicable. I don't know
anything about XSD.
Our type declarations are a bit of a compromise, because we want them to map
(fairly obviously) from XML (XSD?) types to ECMAScript types. It might be nice
to have a richer type system, but ECMAScript does not, so maybe it is pointless
to try to use richer XML types that we can't represent.
I don't have an answer here. I'm open to other suggestions. I'm also, as I
said at the beginning of this thread, fine with just using "number" as you
originally proposed.
On 2010-05-26, at 11:39, André Bargull wrote:
> How do you want to write a `xsd:float {minInclusive="0"}` declaration in lzx?
> To use it as the type doesn't really looks nice:
> <attribute name="duration" type="xsd:float {minInclusive='0'}" />
>
> I'd rather prefer this more verbose form:
> <attribute name="duration" type="number">
> <xsd:restriction base="xsd:float">
> <xsd:minInclusive value="0"/>
> <xsd:maxInclusive value="60000"/>
> </xsd:restriction>
> </attribute>
>
> On 5/26/2010 2:53 PM, P T Withington wrote:
>> So, it seems the bug is partly saying `| constraint`, because any non-final
>> attribute is, in theory, constrainable (there may be some that don't work,
>> but that would be a bug in either the declaration or the implementation).
>>
>> Secondly, I think we would like to support the XSD declaration for
>> non-negative number, so we ought to teach convertAttributeType about that.
>>
>> Finally, we don't currently have a way to express that restriction in
>> Javascript (although perhaps some day we will). So for now, it is really
>> just a descriptive declaration.
>>
>> I'm willing to accept just changing the declaration to `number`, but if so,
>> we should file an improvement to support the `xsd:float {minInclusive="0"}`
>> declaration.
>>
>> On 2010-05-26, at 07:56, André Bargull wrote:
>>
>>> The schema compiler changes any enumeration [1] (like "foo | bar | baz") to
>>> "string" type, because enumerations are only used (intended to be used?)
>>> for string values [2]. Therefore declaring<animatorgroup>#duration's type
>>> to 'xsd:float {minInclusive="0"} | constraint' is just wrong. We could
>>> change the type to 'xsd:float {minInclusive="0"}', but then the schema
>>> compiler needs to change it to "number" again, because the schema reader
>>> doesn't understand that type [3].
>>> We just don't have any facility like in xsd to constrain attributes to
>>> valid values. I don't even know if such a facility is feasible at compile
>>> time due to constraints.
>>>
>>>
>>> [1] except for boolean | 'inherit' which becomes inheritableBoolean, see
>>> SchemaBuilder#convertAttributeType()
>>> [2] complete list of enumeration types from lfc.lzx schema file:
>>> <node>#initstage,<animatorgroup>#motion,<animatorgroup>#process,<datapath>#axis,<datapath>#replication,<dataset>#querytype,<dataset>#type,<script>#when,<view>#align,<view>#backgroundrepeat,<view>#stretches,<view>#valign,<include>#type
>>> [3] cf. SchemaBuilder#convertAttributeType()
>>>
>>> On 5/26/2010 1:29 PM, P T Withington wrote:
>>>> Sorry, this got lost in my inbox.
>>>>
>>>> My question is: clearly the intent is to have the schema indicate (and if
>>>> you have a verifier, verify) that an animation duration must be
>>>> non-negative. So the real bug lies in the schema compiler, not in the
>>>> declaration. So shouldn't we really be fixing that?
>>>>
>>>> To change the XML type declaration to "number" is acceptable if there is
>>>> no way to fix the schema compiler.
>>>>
>>>> On 2010-05-07, at 12:36, André Bargull wrote:
>>>>
>>>>> Change 20100507-bargull-4X2 by barg...@bargull02 on 2010-05-07 18:18:33
>>>>> in /home/anba/src/svn/openlaszlo/trunk
>>>>> for http://svn.openlaszlo.org/openlaszlo/trunk
>>>>>
>>>>> Summary: change lz.animatorgroup#duration lzxtype to "number"
>>>>>
>>>>> New Features:
>>>>>
>>>>> Bugs Fixed: LPP-8980 (http://jira.openlaszlo.org/jira/browse/LPP-8980)
>>>>>
>>>>> Technical Reviewer: ptw
>>>>> QA Reviewer: (pending)
>>>>> Doc Reviewer: (pending)
>>>>>
>>>>> Documentation:
>>>>>
>>>>> Release Notes:
>>>>> lz.animatorgroup#duration type has been changed to "number"
>>>>>
>>>>> Overview:
>>>>>
>>>>>
>>>>> Details:
>>>>> This is a change for the @lzxtype for lz.animatorgroup#duration. The
>>>>> lzxtype was set to 'xsd:float {minInclusive="0"} | constraint' which was
>>>>> treated as an enumeration type by the schema compiler and therefore the
>>>>> actual type was "string". This means any value for the duration attribute
>>>>> written in the<animatorgroup> tag was changed to a String in script.
>>>>> That's for sure not the desired result for a numeric type like duration.
>>>>> With this change, the @lzxtype is updated to "number". There is only one
>>>>> potential issue: Users will have to update<attribute name="duration"
>>>>> value="..." type="string"/> to<attribute name="duration" value="..."
>>>>> type="number"/>. Although I doubt anyone is really using that form.
>>>>>
>>>>>
>>>>> Tests:
>>>>> testcase from bugreport
>>>>>
>>>>> Files:
>>>>> M WEB-INF/lps/lfc/controllers/LzAnimatorGroup.lzs
>>>>>
>>>>> Changeset:
>>>>> http://svn.openlaszlo.org/openlaszlo/patches/20100507-bargull-4X2.tar
>>>>>
>>>>
>>>>
>>
>>