3.1.4 XML shēmas arhitektūras dizains

Ieteikuma numurs

AR-04

Ieteikuma būtība

Eksistē vairākas XML shēmu arhitektūras dizaina pieejas (skat. Global versus Local. A Collectively Developed Set of Schema Design Guidelines) , tai skaitā:

  • Russian Doll („matreška”). XML shēmas dizaina struktūra atspoguļo XML dokumenta struktūru. XML shēmas saknes elements satur anonīmo kompleksa tipu, kas savukārt ietver citus elementus, anonīmos tipus utt.
  • Salami Slice. XML dokuments tiek sadalīts komponentēs, kur katra komponente tiek izpausta ar elementu. Ja nepieciešams piesaistīt kādu citu elementu, tiek lietotas references uz šiem elementiem.
  • Venetian Blind. Līdzīgs Salami slice, vienīgi elementu vietā tiek lietotas parasto un komplekso tipu deklarācijas.
Ja vien iespējams, būtu jālieto Venetian Blind XML shēmu izstrādes stils. Varētu pielietot arī vairāku metodoloģiju apvienojumu. XML shēmās, kas potenciāli varētu tikt sauktas par Arhitektūras XML shēmām (skat. VISS XML resursu kataloga saskarne), jālieto Venetian Blind izstrādes stils.

Obligātums

Obligāta

Paskaidrojums

Venetian Blind XML shēmas dizains nodrošina maksimālu XML shēmas tipa atkārtotu izmantojamību. Komponentes ir viegli saprotamas un grupē vairākus saistītus datus.

Jāizvairās no Russian Doll plašas izmantošanas, jo sistēmas, kas XML shēmas lieto, lai veidotu klašu definīcijas, visus anonīmos tipus automātiski identificē kā Tips1, Enum2 utt., kas ļoti apgrūtina koda lasāmību un saprašanu. Arī tad, ja XML shēmu papildina ar jaunu tādu tipu, nav garantijas, ka Tips1 paliks un netiks aizvietots pavisam ar citu tipu.

Jāizvairās no Salami Slice, kur svarīgi atdalīt publicējamus un nepublicējamus tipus (skat. Globālās definīcijas).


Piemēri

XML dokumenta fragments:

   <Book>

        <Title>Illusions</Title>

        <Author>Richard Bach</Author>

   </Book>

 

Attiecīgais Russian Doll XML shēmas fragments:

    <xsd:element name="Book">

        <xsd:complexType>

            <xsd:sequence>

                <xsd:element name="Title" type="xsd:string"/>

                <xsd:element name="Author" type="xsd:string"/>

            </xsd:sequence>

        </xsd:complexType>

    </element>

 

Attiecīgais Salami Slice XML shēmas fragments:

    <xsd:element name="Title" type="xsd:string"/>

 

    <xsd:element name="Author" type="xsd:string"/>

 

    <xsd:element name="Book">

        <xsd:complexType>

            <xsd:sequence>

                <xsd:element ref="Title"/>

                <xsd:element ref="Author"/>

            </xsd:sequence>

        </xsd:complexType>

    </xsd:element>

 

Venetian Blind XML shēmas fragments:

    <xsd:simpleType name="TitleType">

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

            <xsd:enumeration value="mr"/>

            <xsd:enumeration value="mrs"/>

            <xsd:enumeration value="dr"/>

        </xsd:restriction>

    </xsd:simpleType>

 

    <xsd:simpleType name="NameType">

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

            <xsd:minLength value="1"/>

        </xsd:restriction>

    </xsd:simpleType>

 

    <xsd:complexType name="PublicationStructure">

        <xsd:sequence>

            <xsd:element name="Title" type="TitleType"/>

            <xsd:element name="Author" type="NameType"/>

        </xsd:sequence>

    </xsd:complexType>

 

    <xsd:element name="Book" type="PublicationStructure"/>