Date/time class changes to handle extended date ranges
Frans Englich
frans.englich at telia.com
Mon Feb 20 18:44:34 GMT 2006
On Monday 20 February 2006 15:10, R.F. Pels wrote:
> On Monday 20 February 2006 15.27, Frans Englich wrote:
> >> Those are good points. Mind you, the specification of WXS DateTime
> >> includes a flag indicating wether it is timezoned.
[...]
> Frans: now that we landed on that subject, are there any other hiccups with
> respect to implementing WXS Part 2 datatypes other than
> QDate/QTime/QDateTime which could be tackled?
If you want to deal with WXS types via Qt-only you have to add code; how much,
depends on what you want to do. Let's say, that "given a string I want to
manually create an instance of the value," then I'd say this is needed:
Extend Qt to accept lexical representations of the types. For example, 1) to
Qt::DateFormat would be added something like XSDate; 2) QDate would have a
'static QDate fromString(const QString &lex, const Qt::DateFormat format,
bool *ok)' which creates a QDate from a lexical representation of xs:date,
setting @p ok to false if @p lex doesn't validate.
QByteArray would have a fromString() function parsing xs:hexBinary and
xs:base64Binary; QString would handle xs:boolean, xs:double/float,
xs:decimal, xs:integer.
QUrl would have 'static QUrl fromAnyURI(const QString &lex, bool *ok)',
handling xs:anyURI(whitespace facet and slightly different escaping, IIRC). I
think I've mailed qt-bugs on doc-clarification on this long ago, my memory
fails me.
The types xs:gYear, xs:gYearMonth, and the other xs:g*, can probably be
handled with QDate, although that's a bit excessive(but I think it works and
is conformant).
Then there is types Qt doesn't have classes for: xs:duration, xs:qName and
xs:NOTATION.
xs:duration is an /amount/ of time(for example, 2006 /years/, not this year).
One could create a "QDuration" class for that. There's also the types
xdt:dayTimeDuration and xdt:yearMonthDuration that will likely be in WXS 1.1
(I can keep people in the loop on that, if of interest) which essentially are
sub-classes of xs:duration.
One cannot create an xs:QName value from only a lexical representation, one
needs a context for resolving namespace prefixes. One could create a QQName
class that has "static QQName fromString(const QString &lex, const
QList<QPair<QString, QString> > &resolutionContext, bool *ok)" where the last
argument is a list of prefix/namespace pairs(or, one could create a
NamespaceResolver class, or use a typedef for the pair-list type).
xs:NOTATION is an abstract type. One can first use it by sub-classing it with
a user-defined type, so it's outside the scope of the kind of support we're
discussing here.
All classes would also have functions for retrieving the canonical lexical
representation of the value space(I could kill you ten times over with such
phrases). For example, the canonical lexical representation for the
xs:duration lexical representation "P1Y13M", is the string "P2Y1M"(two years,
one month).
Another question is what one should be able to do with the values once they
are created. For things like QDate, QTime, QByteArray the answers are obvious
but QDuration needs perhaps a closer look.
XPath 2.0/XQuery 1.0 defines operators for the types such that one can
actually do things with the values and they are quite practical. For example,
one can add a duration to a date(conceptually identical to QDate::addDays(),
QTime::addSecs(), etc), one can multiply a xs:duration with an integer(say,
xs:duration("P1Y2M") * xs:integer("3") becomes xs:duration("P3Y6M")). I can
provide a complete list of such operators. This is implemented in KDOM's
XQuery implementation, but it would greatly simplify and speedup if it was in
Qt, of course.
But this all depends on what demands Trolltech is pleasing. I speculate that
this basic "value" support is useful to many people, and it also makes sense
from a technical perspective to put it in Qt. It would to me make little
sense to let Qt acquire more heavy WXS support such as reading Schema files
or navigating a type hierarchy.
If Trolltech has an "XML demand" from customers, I would put basic WXS-values
support in Qt, and then let kdelibs be the alternative for heavy features.
XML stacks requires tons of code and it would be nice to have that developed
the open source way.. This is perhaps a viable solution since kdelibs will
relatively easy deploy on Windows/OS X.
Cheers,
Frans
More information about the kde-core-devel
mailing list