Article Index

Datové typy

Datové typy v XMLSchema V definici každé značky můžeme vybrat datový typ, který nejlépe vystihuje zapsané hodnoty, text, logické hodnoty a další.

Textový řetězec

Datový typ String Tento datový typ umožňuje zapsat textové řetězce, včetně whitespace znaků.

<xs:element name="zprava" type="xs:string"/>

Datový typ NormalizedString Tento datový typ umožňuje zapsat textové řetězce, dojde k nahrazení tabulátorů, znaků pro nový řádek a konců odstavců - mezerou.

<xs:element name="komu" type="xs:normalizedString"/>

Datový typ Token Tento datový typ umožňuje zapsat textové řetězce, dojde k nahrazení tabulátorů, znaků pro nový řádek, konců odstavců, mezer na začátku a konci řetězce, vícenásobných mezer - mezerou.

<xs:element name="komu" type="xs:token"/>

Datový typ Name Tento datový typ umožňuje zapsat textové řetězce odpovídající XML konvencím.

<xs:element name="komu" type="xs:name"/>

Datum a čas

Datový typ Date Tento datový typ umožňuje zapsat datum ve formátu YYYY-MM-DD.

<xs:element name="prijato" type="xs:date"/>

Zápis ukázkových dat

<prijato>2017-09-26</prijato>

Pro definování časové zóny UTC lze přidat Z na konec dat.

<prijato>2017-09-26Z</prijato>

Pokud je potřeba upravit časovou zónu na konkrétní, pak je možnost následující.

<prijato>2017-09-26+02:00</prijato> <prijato>2017-09-26-02:00</prijato>

Datový typ Time Tento datový typ umožňuje zapsat datum ve formátu HH:MM:SS.

<xs:element name="zacatek" type="xs:time"/>

Zápis ukázkových dat

<zacatek>13:25:51</zacatek>

Pokud potřebujeme přesnější časový zápis, pak je to následující:

<zacatek>13:25:51.28</zacatek>

Časové zóny jsou ošetřeny stejně, jako v případě datumu.

<zacatek>13:25:51Z</zacatek>

<zacatek>13:25:51+02:00</zacatek>

<zacatek>13:25:51-02:00</zacatek>

Datový typ Time Pomocí tohoto datového typu můžeme zkombinovat oba dva údaje do jediného zápisu.

<xs:element name="zacatek" type="xs:dateTime"/>

Zápis ukázkových dat

<zacatek>2017-09-26T13:25:51+02:00</zacatek>

Datový typ Duration Pro zaznamenání trvání nějakého procesu lze využít datový typ duration. Jeho mírnou nevýhodou je členěný zápis. Formát je dán následujícím zápisem PnYnMnDTnHnMnS.

<xs:element name="narocnost" type="xs:duration"/>

Zápis ukázkových dat (plné využití všech polí).

<zacatek>P2Y3M19DT10H6M10S</zacatek>

Jedná se o periodu s dobou trvání 2 roky, 3 měsíce, 19 dní, 10 hodin, 6 minut a 10 sekund.

Dílčí časové datové typy

Kromě těchto datových typů lze využít i dílčích datových typů pro zápis pouze části datumových nebo časových údajů:

  • gDay
  • gMonth
  • gMonthDay
  • gYear
  • gYearMonth

Číselné datové typy

Datový typ Decimal

Tento datový typ umožňuje zapsat desetinné číslo, oddělovačem je znak ".".

XSD
<xs:element name="teplota" type="xs:decimal"/>

XML
<teplota>6.4</teplota>
<teplota>+6.4</teplota>
<teplota>-6.4</teplota>

Datový typ Integer

Tento datový typ umožňuje zapsat celé číslo.

XSD
<xs:element name="teplota" type="xs:integer"/>

XML
<platba>254</platba>
<platba>+254</platba>
<platba>-254</platba>

Další číselné datové typy

Výše uvedené datové typy patří k nejpoužívanějším, v případě nutnosti lze využít další datové typy pro číselná data:

  • byte – rozsah -128 až 127
  • int – 32 bitové číslo
  • long – 64 bitové číslo – rozsah -9223372036854775808 až 9223372036854775807
  • negativeInteger
  • nonNegativeInteger
  • nonPositiveInteger
  • short – 16 bitové číslo – rozsah -32768 až 32767
  • unsignedLong  – rozsah 0 až 18446744073709551615
  • unsignedShort – rozsah 0 až 65535
  • unsignedByte – rozsah 0 až 255
  • double – 64 bitové číslo v plovoucí desetinné čárce
  • float – 32 bitové číslo v plovoucí desetinné čárce

Datový typ boolean

Tento datový typ umožňuje zapsat logickou hodnotu – tedy výsledek pravda nebo nepravda.

<xs:element name="studuje" type="xs:boolean"/>

Datový typ URI

Tento datový typ umožňuje zapsat odkaz.

<xs:element name="logo" type="xs:uri"/>

<logo>http://mojeadresa.tld/logo/logo.png</logo>

Vlastní datový typ

Lze definovat vlastní datový typ. Omezení zadávaných dat Pokud návrh datového souboru předpokládá omezení zadávaných hodnot, XSD je schopno jasně definovat rozpětí hodnot nebo řetězců, které může daná položka nabývat.

Příkladem může být následující jednoduchý příklad:

<xs:element name="vek">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="150"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Zde je připraveno omezení pro datovou položku věk, kde se předpokládá integritní omezení – hodnoty mohou být mezi 0 a 150. 

Další možností je výčet hodnot:

<xs:element name="bonus">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:enumeration value="1200 bodů"/>
      <xs:enumeration value="sleva 10%"/>
      <xs:enumeration value="doprava zdarma"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Zde je několik možností, které je možno zvolit jako bonus za nákup ve fiktivním e-shopu. Nic jiného nemůže být nabízeno.

Ještě lépe to je dle následujícího příkladu. Zatímco v tom výše uvedeném je definováno omezení přímo pro daný element. Následující příklad je lepší z hlediska přístupu k návrhu. Je definován nový datový typ s omezením a následně použit pro vybraný element – umožňuje připravit stejné omezení pro různé elementy. 

<xs:element name="bonus" type="typ_bonusu"/>
  <xs:simpleType name="typ_bonusu">
    <xs:restriction base="xs:string">
      <xs:enumeration value="1200 bodů"/>
      <xs:enumeration value="sleva 10%"/>
      <xs:enumeration value="doprava zdarma"/>
    </xs:restriction>
</xs:simpleType>

Omezení maskou

Pokud je potřeba hlídat přesné zadání vybraného řetězce, pak lze využít masku. 

<xs:element name="pismeno">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Maska omezuje zadání na pouze jedno písmeno.

Následující maska umožní zadat tři písmena.

<xs:element name="inicialy">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[A-Z][A-Z][A-Z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Jsou povoleny přesně tři znaky a pouze velkými písmeny.

<xs:element name="inicialy">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Pokud chceme zadat neomezeně znaků, ale pouze písmenka lowercase, pak je platný následujíc zápis.

<xs:element name="zprava">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="([a-z])*"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Hvězdička znamená alespoň jeden znak, horní počet znaků je neomezený.

Pokud chceme přesně například 8 znaků, můžeme použít toto.

<xs:element name="heslo">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9]{8}"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Bílé znaky

Práce s whitespace znaky je závislá na požadavku na jejich ponechání. Můžeme použít tři postupy pro zpracování bílých znaků.

Preserve – ponechání – všechny bílé znaky budou zachovány dle zadání.

<xs:element name="zprava">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="preserve"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Další možnost je replace – dojde k nahrazení bílých znaků mezerou.

<xs:element name="zprava">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="replace"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Poslední možností je collapse – pak jsou všechny znaky nahrazeny mezerou a pokud je někde více mezer za sebou, dojde k jejich redukci na jedinou.


<xs:element name="zprava">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Omezení délky řetězce

Můžeme zadat přesnou délku řetězce, pokud nechceme omezovat znaky, které uživatel má povoleno zadávat, pak lze nastavit přesnou délku následovně.

<xs:element name="heslo">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:length value="8"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

Jinou možností je omezit nejmenší akceptovatelné množství znaků, největší možné množství znaků, případně obojí najednou.

<xs:element name="password">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:minLength value="5"/>
      <xs:maxLength value="8"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>