a.css

esbudellant estàndards


Períodes de temps: reutilitzar o crear

21/04/07

A Definició de períodes de temps amb Dublin Core especulava sobre com millorar la sintaxi XML de Dublin Core per reflexar un període de temps.

Tot i que la conclusió que arribava era que una formula bona seria:


<dc:title>
   Esdeveniment
</dc:title>
<dc:date>
   <rdfs:label>start</rdfs:label>
   <dcterms:W3CDTF>

      <rdf:value>2007-04-01T09:00+01:00</rdf:value>
   </dcterms:W3CDTF>
</dc:date>
<dc:date>
   <rdfs:label>end</rdfs:label>

   <dcterms:W3CDTF>
       <rdf:value>2007-04-01T09:00+01:00</rdf:value>
   </dcterms:W3CDTF>
</dc:date>

portar-ho a la pràctica és poc factible ja que els XML Schema definits pel Dublin Core no contemplen aquesta possibilitat.

Això planteja un dubte: és millor amotllar-se a una solució genèrica o millor definir una solució pròpia?

En aquest cas, amotllar-se a la solució genèrica implica passar a emprar una estructura del tipus:


<dcterms:temporal xsi:type="dcterms:Period">
   name=Esdeveniment;
   start=2007-04-01T09:00+01:00;
   end=2007-04-01T10:00+01:00;
</dcterms:temporal>

Aquesta solució, proposada per les Guidelines for implementing DC in XML, és particularment incòmode de validar ja que l'XML Schema només restringeix el contingut a tipus xs:string, completament ineficaç si ens volem cenyir al format de data ISO 8601

Si es vol validar el format de data, Dublin Core defineix el tipus W3CDTF que permetria fer:


<dc:date xsi:type="dcterms:W3CDTF">
   2002-07-09
</date>

Aquesta aproximació té el problema que no permet definir períodes ni permet matisar si la data és d'inici o de final.

Així doncs si es vol tenir tot, el més útil és definir una solució pròpia que es refini l'element dc:date de Dublin Core amb el mateix sistema que ho fa dcterms:temporal:


<xs:element name="startPeriod" substitutionGroup="dc:date"/>
<xs:element name="endPeriod" substitutionGroup="dc:date"/>

I a l'XML es pot emprar fent quelcom tipus:


<startPeriod xsi:type="dcterms:W3CDTF">2007-03-29T20:04:37+01:00</startPeriod>
<endPeriod xsi:type="dcterms:W3CDTF">2007-04-01T20:04:37+01:00</endPeriod>

Aquí apareixen dos problemes. El primer és que el tipus W3CDTF està definit com a simpleContent derivat d'un complexContent i sembla que no tots els parsers XML Schema saben validar-ho.

A les anotacions de Dublin Core pels elements Qualificats diu:

This derivation of a complexType with simpleContent by restriction of a base complexType with complexContent is valid under section 3.4.6 of XML Schema Part 1: Structures, specifically item 5.1.2 of the section "Schema Component Constraint: Derivation Valid (Restriction, Complex)", because the base complexContent is mixed and emptiable.

Notes on the W3C XML Schemas for Qualified Dublin Core

El segon problema és que el tipus W3CDTF no permet usar el format ISO 8601 en tot el seu abast ja que no permet la forma:


1994-11-05T13:15:30Z

homòloga a:


1994-11-05T08:15:30-05:00

Per aconseguir-ho es podria extendre el tipus W3CDTF però és molt més simple definir un tipus nou tal que:


<xs:simpleType name="iso8601">
   <xs:restriction base="xs:dateTime">
      <xs:pattern value=".+T.+(Z|[+\-].+)"/>
   </xs:restriction>
</xs:simpleType>
<xs:element name="startPeriod" type="iso8601"/>
<xs:element name="endPeriod" type="iso8601"/>

de manera que l'XML quedaria simplificat en:


<startPeriod>2007-03-29T20:04:37+01:00</startPeriod>
<endPeriod>2007-04-01T20:04:37+01:00</endPeriod>

Recursos relacionats

Comentaris

Afegir un comentari


M.I.A. ringtonesGoodie Mob ringtonesDanny Elfman ringtonesYes ringtones

© Arnau Siches. a.css està sota Llicència Creative Commons.