3.3.6 Datu tipi .v. elementu deklarācija

Ieteikuma numurs

SK-06

Ieteikuma būtība

Vairumā gadījumu pastāv izvēles iespēja - atkārtoti lietoto komponenti definēt kā datu tipu, vai kā elementu (skat. arī XML shēmas arhitektūras dizains). Komponentei jābūt definētai kā datu tipam, ja:

  • tā tiks lietota ar dažādiem elementu nosaukumiem dažādos kontekstos vai
  • ir sagaidāms, ka nākamie datu tipi tiks atvasināti no tās.

Savukārt komponente kā elements jādefinē, ja:

  • nav nolūka atvasināt jaunas komponentes no tās un
  • elements tiks lietots ar savu nosaukumu nemainīgi.

Obligātums

Vēlams

Paskaidrojums

Ir daudz gadījumu, kad elementam jābūt lietotam ar nemainītu nosaukumu. Piemēram, ja personas kodam vienmēr ir nosaukums PersonCode, tad tā semantika vienmēr būs zināma, un divas sistēmas, izmantojot vienu un to pašu elementu, zinās, ka jālieto tā pati definīcija.

Tomēr ir gadījumi, kad elementam piešķirt nosaukumu arhitektūras shēmas izstrādes laikā ir nelietderīgi. Piemēram, adresei var būt dažādas nozīmes, un tāpēc tā tiks lietota ar dažādiem nosaukumiem, tādiem kā CorrespondenceAddress, HomeAddress, BusinessAddress, ElectoralAddress utt.

Cits gadījums, kad jāizvēlas starp elementu un datu tipu, lai definētu komponenti, ja pastāv nolūks atvasināt no tās citas komponentes. Šajā gadījumā, izmantojot vienīgi datu tipus, iespējams atvieglot shēmas izprašanu, izmantojot vienkāršu mantošanas mehānismu, un izvairoties no xs:redefine lietošanas šim nolūkam.

Dažos gadījumos shēmā ir piemēroti definēt gan datu tipu, gan elementu (ja tas nav pretrunā ar XML shēmas arhitektūras dizains). Tad elements ar zināmo fiksēto semantiku ir pieejams atkārtotai lietošanai, un datu tips ir pieejams atbilstošai modifikācijai. Tomēr jāņem vērā, ka jebkuru globāli definētu elementu var izmantot par cita dokumenta elementu.

Piemēri

Elementa, kas vienmēr tiks lietots ar vienu un to pašu nosaukumu un no kura nebūs atvasināti citi elementi, deklarācija:

<xs:element name="WeatherParameters">

 <xs:complexType>

 <xs:sequence>

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

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

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

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

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

  <xs:element name="DaysForward" type="xs:byte" />

  <xs:element ref="ww:weather" />

  <xs:element name="Notification" type="iinfr:NotificationDescriptionStructure" />

 </xs:sequence>

 </xs:complexType>

</xs:element>

Tipa, kas tiks lietots ar dažādiem nosaukumiem, deklarācija:

<xs:element name="PersonCode" type="PersonCodeType" />

 <xs:simpleType name="PersonCodeType">

 <xs:annotation>

  <xs:documentation xml:lang="lv">Tips personas kods</xs:documentation>

  </xs:annotation>

 <xs:restriction base="xs:string">

  <xs:pattern value="[0-9]{11}" />

  </xs:restriction>

</xs:simpleType>