Feature Proposal: Harmonize the Schema Definitions Used
Motivation
There are currently two ways how schemas are defined in TWiki
TWiki core and various plugins use one or the other. This makes it tedious for the user as the user must always know which of the two schema definition styles are needed for a certain application.
In my plugins, I end up always supporting both to avoid confusion for the user. That is a deterrent for plugin writers.
Description and Documentation
Standardize on a single schema definition and support the needs of either. Alternatively, provide an abstraction for both styles of schema definitions and provide them in the Func API or by a Contrib.
Examples
Impact
Implementation
--
Contributors: ThomasWeigert - 2010-09-11
Discussion
I am not sure I follow. Can you bring an example?
--
PeterThoeny - 2010-09-14
Sorry for being too terse.
For various uses of TWiki as mini-database, we define a schema. There are two techniques:
One is to use a TWiki form, where each row in the form definition defines a column in the schema.
Example:
|*Name* |*Type* |*Size* |*Values* |*Tooltip message* |*Attributes* |
| Country | text | 40 | | | |
| State | text | 40 | | | |
| Address | textarea | 40x6 | | | |
| Date | date | | | | |
The other one is the method used in
EditTablePlugin and
EditRowPlugin. There the schema is defined by the format and header attribute, such that each element in the comma separated list defines a column in the schema.
Example:
%EDITTABLE{ header="|*Country*|*State*|*Address*|*Date*|" format="|text,40|text,40|textarea,6x40|date|" }%
Now the dilemma for a plugin writer is that one has to choose one method or the other or both, when a schema definition is required. For example, the
FormQueryPlugin uses the
EditTablePlugin style definition to declare the schema for its queries when they apply to embedded tables. Many other plugins use forms for the same purpose.
By the way, notice the difference in how the textarea is defined, see
HarmonizeTextAreaDefinition.
--
ThomasWeigert - 2010-09-15
We need to keep the
format="" parameter of EditTablePlugin to remain compatible with existing text.
As an idea, how about adding a new feature to EditTablePlugin that allows one to specify a TWikiForm topic as the schema, such as
format="ContactForm".
--
PeterThoeny - 2010-09-20
Well... I was hoping for a solution which would not require a plugin writer to implement two different but equivalent approaches. That is the current situation. Your suggestion makes it a little simpler by using only one syntax to reference the schema, but the work for the plugin writer is still the same.
One solution I think would be to write an API for this that accepts either format. That is, in Func we have some function "find schema" that does the right thing, whether the schema was in form syntax or edit table syntax. Then a plugin writer could just use the schema and not worry about how it was defined. And then, the user, of course, would not have to worry either and could use whatever they remember.
I think such API function would be very useful for many plugins.
--
ThomasWeigert - 2010-09-20
Agreed.
--
PeterThoeny - 2010-09-20