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



Reply via email to