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


Help: OASIS Mailing Lists Help | MarkMail Help

office-formula message

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

Subject: Goals/levels/packaging/complex numbers

(From here on, let's reply to THIS message on goals/levels/packaging
and complex numbers, so that it'll be easier to follow the email threads).

I originally posted:
> * Issue: Goals/range.  Rob Weir and David A. Wheeler both want it to support both limited resources (e.g., tiny PDAs) and massive capabilities.  Yet if everything is optional, no one will know what is supported, and users won't have real interoperability.  A solution for this problem is to define "levels" (OpenFormula did this).  Do we agree that we should have multiple levels?

Daniel Carrera thirded (?) the notion of supporting 
PDAs/restricted-resource implementations.
I should note that the restricted resource might be developer time; the 
spreadsheet may be an
incidental capability of something ELSE, and they only want to implement 
"enough" to satisfy
a subset of all possible users.

> ** If we have levels, must define the levels.  Discuss briefly whatwe  want, what are the levels.  Can we try to create rough resolution by March 17 on the levels, if we agree to define levels? (OpenFormula had four levels; we don't need to have 4, or use its breakdown, unless we like it.)
> * Complex Numbers.  We don't have time to go into it at the beginning of this process, but although many implementations support complex numbers, their support is really HORRIBLE to users.  Later on we'll need to determine what we should do about them.

And there are LOTS of comments about this.
Let me first describe the OpenFormula experience with levels,
then respond to some specific points.

OpenFormula defined 4 levels. Most of our time was spent on "level 1"
(the minimal set) and all of the framework necessary to define level 1
(what are types, type conversions, etc.), though.

Level 1 was the minimal level support for limited resource environments.
We determined this by finding out what Palm spreadsheet 
(SpreadsheetToGo) _actually_ supported,
and removed what wasn't supported by some other typical implementation 
(Excel, OpenOffice.org,
Gnumeric, and later Lotus 1-2-3v9 and Quattro Pro).  This turned out to 
NOT be very limiting
at all; it has 109 functions including database (DSUM, etc.), trig (SIN, 
financial (IRR, PV), and so on.  We could certainly have defined an even 
smaller set.
The negative of a large level 1 is that it's more work for implementors; 
the positive of a large
level 1 is that it means that users can do a LOT and still be interoperable.

Here's the complete list of OpenFormula level 1 functions (all 109): ABS 
<http://www.openformula.org/ABS> ACOS <http://www.openformula.org/ACOS> 
AND <http://www.openformula.org/AND> ASIN 
<http://www.openformula.org/ASIN> ATAN <http://www.openformula.org/ATAN> 
ATAN2 <http://www.openformula.org/ATAN2> AVERAGE 
<http://www.openformula.org/AVERAGE> CHOOSE 
<http://www.openformula.org/CHOOSE> COLUMNS 
<http://www.openformula.org/COLUMNS> COS 
<http://www.openformula.org/COS> COUNT 
<http://www.openformula.org/COUNT> COUNTA 
<http://www.openformula.org/COUNTA> COUNTBLANK 
<http://www.openformula.org/COUNTBLANK> COUNTIF 
<http://www.openformula.org/COUNTIF> DATE 
<http://www.openformula.org/DATE> DAVERAGE 
<http://www.openformula.org/DAVERAGE> DAY 
<http://www.openformula.org/DAY> DCOUNT 
<http://www.openformula.org/DCOUNT> DCOUNTA 
<http://www.openformula.org/DCOUNTA> DDB 
<http://www.openformula.org/DDB> DEGREES 
<http://www.openformula.org/DEGREES> DGET 
<http://www.openformula.org/DGET> DMAX <http://www.openformula.org/DMAX> 
DMIN <http://www.openformula.org/DMIN> DPRODUCT 
<http://www.openformula.org/DPRODUCT> DSTDEV 
<http://www.openformula.org/DSTDEV> DSTDEVP 
<http://www.openformula.org/DSTDEVP> DSUM 
<http://www.openformula.org/DSUM> DVAR <http://www.openformula.org/DVAR> 
DVARP <http://www.openformula.org/DVARP> EVEN 
<http://www.openformula.org/EVEN> EXACT 
<http://www.openformula.org/EXACT> EXP <http://www.openformula.org/EXP> 
FACT <http://www.openformula.org/FACT> FALSE 
<http://www.openformula.org/FALSE> FIND 
<http://www.openformula.org/FIND> FV <http://www.openformula.org/FV> 
HLOOKUP <http://www.openformula.org/HLOOKUP> HOUR 
<http://www.openformula.org/HOUR> IF <http://www.openformula.org/IF> 
INDEX <http://www.openformula.org/INDEX> INT 
<http://www.openformula.org/INT> IRR <http://www.openformula.org/IRR> 
ISBLANK <http://www.openformula.org/ISBLANK> ISERR 
<http://www.openformula.org/ISERR> ISERROR 
<http://www.openformula.org/ISERROR> ISLOGICAL 
<http://www.openformula.org/ISLOGICAL> ISNA 
<http://www.openformula.org/ISNA> ISNONTEXT 
<http://www.openformula.org/ISNONTEXT> ISNUMBER 
<http://www.openformula.org/ISNUMBER> ISTEXT 
<http://www.openformula.org/ISTEXT> LEFT 
<http://www.openformula.org/LEFT> LEN <http://www.openformula.org/LEN> 
LN <http://www.openformula.org/LN> LOG <http://www.openformula.org/LOG> 
LOG10 <http://www.openformula.org/LOG10> LOWER 
<http://www.openformula.org/LOWER> MATCH 
<http://www.openformula.org/MATCH> MAX <http://www.openformula.org/MAX> 
MID <http://www.openformula.org/MID> MIN 
<http://www.openformula.org/MIN> MINUTE 
<http://www.openformula.org/MINUTE> MOD <http://www.openformula.org/MOD> 
MONTH <http://www.openformula.org/MONTH> N 
<http://www.openformula.org/N> NA <http://www.openformula.org/NA> NOT 
<http://www.openformula.org/NOT> NOW <http://www.openformula.org/NOW> 
NPER <http://www.openformula.org/NPER> NPV 
<http://www.openformula.org/NPV> ODD <http://www.openformula.org/ODD> OR 
<http://www.openformula.org/OR> PI <http://www.openformula.org/PI> PMT 
<http://www.openformula.org/PMT> POWER 
<http://www.openformula.org/POWER> PRODUCT 
<http://www.openformula.org/PRODUCT> PROPER 
<http://www.openformula.org/PROPER> PV <http://www.openformula.org/PV> 
RADIANS <http://www.openformula.org/RADIANS> RATE 
<http://www.openformula.org/RATE> REPLACE 
<http://www.openformula.org/REPLACE> REPT 
<http://www.openformula.org/REPT> RIGHT 
<http://www.openformula.org/RIGHT> ROUND 
<http://www.openformula.org/ROUND> ROWS 
<http://www.openformula.org/ROWS> SECOND 
<http://www.openformula.org/SECOND> SIN <http://www.openformula.org/SIN> 
SLN <http://www.openformula.org/SLN> SQRT 
<http://www.openformula.org/SQRT> STDEV 
<http://www.openformula.org/STDEV> STDEVP 
<http://www.openformula.org/STDEVP> SUBSTITUTE 
<http://www.openformula.org/SUBSTITUTE> SUM 
<http://www.openformula.org/SUM> SUMIF 
<http://www.openformula.org/SUMIF> SYD <http://www.openformula.org/SYD> 
T <http://www.openformula.org/T> TAN <http://www.openformula.org/TAN> 
TIME <http://www.openformula.org/TIME> TODAY 
<http://www.openformula.org/TODAY> TRIM 
<http://www.openformula.org/TRIM> TRUE <http://www.openformula.org/TRUE> 
TRUNC <http://www.openformula.org/TRUNC> UPPER 
<http://www.openformula.org/UPPER> VALUE 
<http://www.openformula.org/VALUE> VAR <http://www.openformula.org/VAR> 
VARP <http://www.openformula.org/VARP> VLOOKUP 
<http://www.openformula.org/VLOOKUP> WEEKDAY 
<http://www.openformula.org/WEEKDAY> YEAR <http://www.openformula.org/YEAR>

Here are the current set of OpenFormula levels (they changed during it 
and could easily change again, but they give a flavor of the idea):

* Level 1: Minimum implementation. This level provides the minimal 
capabilities (including functions, types, and their meanings) that are 
very widely implemented with spreadsheet applications, even in 
resource-contrained environments. It includes around 100 functions.
* Level 2: Minimum desktop implementation. This level provides the 
minimal capabilities expected from typical desktop spreadsheets. Many 
current desktop implementations meet or nearly meet this level. Level 2 
was calculated as a "majority intersection" of the capabilities in 
common desktop spreadsheet programs (e.g., /most/ spreadsheet 
implementations for the desktop provide those capabilities), considering 
implementations such as Microsoft Excel 2003, Corel Word Perfect Office 
12, IBM/Lotus 1-2-3 version 9.8, OpenOffice.org Calc, and Gnumeric.
* Level 3: Basic implementation. This level provides all the 
capabilities necessary for typical desktop spreadsheet use. Many current 
implementations meet or nearly meet this level. This adds a 
distinguished logical type and support for complex numbers. The 
intersection of Excel and Gnumeric were used as models here.
* Level 4: Full implementation. This level provides some additional, 
less-commonly used features intended for advanced users.  This 
approached a union; we didn't do much work here.

Here's the conformance text of OpenFormula: "A conforming application 
/MUST/ report the highest level it conforms to, if it claims conformance 
to this specification. Unless stated otherwise, all requirements of this 
specification apply to any application that claims to meet the 
OpenFormula specification. In particular, all conforming applications 
/MUST/ meet the level 1 requirements to claim conformance to this 
specification. Applications /MAY/ accept extensions as long as they do 
not interfere with processing data in the format defined here. In 
particular, applications /MAY/ support additional formulas and 
operations, additional optional parameters for functions, or make 
certain function parameters optional when they are required by this 
specification. It is /RECOMMENDED/ that applications clearly document 
their extensions in all user documentation, both online and paper, in a 
manner that users would be very likely to be aware when they are using a 
non-standard extension. Applications /MAY/ partly implement a higher 
level of the specification."

The specific details of the levels aren't deeply embedded in the 
OpenFormula spec, and in fact, they changed over time in OpenFormula.

Okay, now for some comments.  Daniel Carrera asked:
 > I sure can't see any other option. I do have a question. Based on the 
OpenFormula experience, would you say that level 1 would still be large 
enough to be useful?

I think so.  109 functions is not a small list, and I think it's clear 
that LOTS of spreadsheets are within that minimal set.  Even if we made 
level 1 smaller (e.g., removed database functions), that'd still be useful.

 > The only drawback of levels is that we might see spreadsheets 
complying to level 1 only and then saying to their customers "we're 
compliant". For this reason, I'd like level 1 to be good and meaningful 
for the average user.

100% agree. But a level 1 set like this one, with over 100 functions, is 
VERY meaningful for the average user.

Tomas Mecir said:

> Defining levels first is good. What I didn't like on OpenFormula's
> approach was that features got moved between levels on a case-by-case
> basis, without any clear reasoning other than "it's a problem for app X".

Fair enough.  Ours was the first attempt at trying to
create levels, and you learn a lot when you try the first time :-).
Also, when you define something as the strict intersection
of a set of apps, if ANY app has a problem, then it gets moved up.
Perhaps we shouldn't be so strict... we should KNOW when we cause
work for an implementation, but if we really think that function XYZ
should be in level 1, it might be better to just do it.  Adding a function
implementation isn't hard, and just filling in a few places would
simplify users' lives later.

Rob Weir said:
 > So maybe we can start by standardizing a way for implementations
 > to define profiles, but we don't standardize on any profiles ourselves?

Profiles might be a good idea, and functions are typically grouped by 
category... creating
a ready-made set of profiles.  E.G., we could group all complex number 
into a "complex" package, and an application could say "I implement 
level 2 plus
the complex package" or some such.

But there MUST be a minimal set. C/C++ include large MANDATED libraries
so that it's possible to write portable code.  A spreadsheet without SUM
is REDICULOUS.  And if there are a large number of different packages, it
gets hard to keep track of them... at which point you're back to levels
if you wish to keep your sanity.

There's also value in standardizing functions that NOT everyone does 
yet... so
that when they DO get implemented elsewhere, they're compatible.

I think 3-4 levels (minimal/typical/large or 
with maybe a few specialized packages (e.g., for complex numbers), would be
a plausible compromise.

--- David A. Wheeler

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