PC KartKicker: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Rsaarmae (talk | contribs)
Rsaarmae (talk | contribs)
Line 148: Line 148:


== XML skeem (XSD) ==
== XML skeem (XSD) ==
<pre>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="components">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="cases" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="case">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="bay5" type="xs:integer" use="required" />
                  <xs:attribute name="bay3" type="xs:integer" use="required" />
                  <xs:attribute name="psu" type="xs:string" use="required" />
                  <xs:attribute name="maxGpuLength" type="xs:string" use="required" />
                  <xs:attribute name="maxCpuHeight" type="xs:string" use="required" />
                  <xs:attribute name="primaryColor" type="xs:string"/>
                  <xs:attribute name="secondaryColor" type="xs:string"/>
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="cpus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="cpu">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="cooler" type="xs:string" use="required" />
                  <xs:attribute name="series" type="xs:string" use="required" />
                  <xs:attribute name="family" type="xs:string" use="required" />
                  <xs:attribute name="socket" type="xs:string" use="required" />
                  <xs:attribute name="iGPU" type="xs:string" use="required" />
                  <xs:attribute name="cores" type="xs:integer" use="required" />
                  <xs:attribute name="threads" type="xs:integer" use="required" />
                  <xs:attribute name="ecc" type="xs:string" use="required" />
                  <xs:attribute name="speed" type="xs:string" use="required" />
                  <xs:attribute name="TDP" type="xs:integer" use="required" />
                  <xs:attribute name="lithography" type="xs:integer" use="required" />
                  <xs:attribute name="maxPowerDraw" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="cpucoolers" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="cpucooler">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="sockets">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="socket" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="liquid" type="xs:string" use="required" />
                  <xs:attribute name="rad" type="xs:string" use="required" />
                  <xs:attribute name="fans" type="xs:integer" use="required" />
                  <xs:attribute name="height" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="gpus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="gpu">
                <xs:complexType>
                  <xs:attribute name="manufacturer" type="xs:string" use="required" />
                  <xs:attribute name="brandname" type="xs:string" use="required" />
                  <xs:attribute name="codename" type="xs:string" use="required" />
                  <xs:attribute name="series" type="xs:string" use="required" />
                  <xs:attribute name="vram" type="xs:integer" use="required" />
                  <xs:attribute name="psuPin" type="xs:string" use="required" />
                  <xs:attribute name="length" type="xs:integer" use="required" />
                  <xs:attribute name="maxPowerDraw" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="memorychips" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="memorychip">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:attribute name="rank" type="xs:string" use="required" />
                  <xs:attribute name="cas" type="xs:integer" use="required" />
                  <xs:attribute name="gen" type="xs:string" use="required" />
                  <xs:attribute name="speed" type="xs:integer" use="required" />
                  <xs:attribute name="moduleSize" type="xs:integer" use="required" />
                  <xs:attribute name="modules" type="xs:integer" use="required" />
                  <xs:attribute name="ECC" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="motherboards" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="motherboard">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="chipset" type="xs:string" use="required" />
                  <xs:attribute name="socket" type="xs:string" use="required" />
                  <xs:attribute name="memoryType" type="xs:string" use="required" />
                  <xs:attribute name="memorySlots" type="xs:integer" use="required" />
                  <xs:attribute name="maxMemory" type="xs:integer" use="required" />
                  <xs:attribute name="maxMemorySpeed" type="xs:integer" use="required" />
                  <xs:attribute name="video" type="xs:string" use="required" />
                  <xs:attribute name="sata3" type="xs:integer" use="required" />
                  <xs:attribute name="ethernet" type="xs:integer" use="required" />
                  <xs:attribute name="usb3" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="psus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="psu">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="wattage" type="xs:integer" use="required" />
                  <xs:attribute name="eff80plus" type="xs:string" use="required" />
                  <xs:attribute name="modular" type="xs:string" use="required" />
                  <xs:attribute name="pcie6" type="xs:integer" use="required" />
                  <xs:attribute name="pcie6p2" type="xs:integer" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="storage" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ssds" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="ssd">
                      <xs:complexType>
                        <xs:attribute name="brand" type="xs:string" use="required" />
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="capacity" type="xs:integer" use="required" />
                        <xs:attribute name="cache" type="xs:string" use="required" />
                        <xs:attribute name="interface" type="xs:string" use="required" />
                        <xs:attribute name="formFactor" type="xs:string" use="required" />
                        <xs:attribute name="price" type="xs:decimal" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="hdds" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="hdd">
                      <xs:complexType>
                        <xs:attribute name="brand" type="xs:string" use="required" />
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="capacity" type="xs:integer" use="required" />
                        <xs:attribute name="cache" type="xs:integer" use="required" />
                        <xs:attribute name="interface" type="xs:string" use="required" />
                        <xs:attribute name="formFactor" type="xs:string" use="required" />
                        <xs:attribute name="rpm" type="xs:integer" use="required" />
                        <xs:attribute name="price" type="xs:decimal" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
</pre>
== XSLT 1 ==
== XSLT 1 ==
== XSLT 2 ==
== XSLT 2 ==

Revision as of 16:27, 20 March 2017

Meeskond

  • Martin Kask
  • Rain Saarmäe
  • Jan Eerik

Idee

Käesolev veebirakendus on asendamatu abimees arvuti kokkupanekul (võrdlemisi tugevalt inspireeritud https://pcpartpicker.com).

Kuna teatavasti vajab arvuti töötamiseks kindlaid juppe mingis aktsepteeritud konfiguratsioonis, võimaldab meie rakendus välistada mitteühilduva raudvara "jõuga" ühildamist ja abistab kasutajal optimaalse konfiguratsiooni valimist.

Põhiline funktsionaalsus

  • Kasutaja saab lisada üks kuni mitu arvutiskeemi
  • Skeemile saab hakata ükshaaval lisama juppe (emaplaat, protsessor, mälud jne)
  • Iga kord kui mingi jupp skeemi lisatakse, kitsendab see ülejäänud juppide valikut - näiteks LGA1151 liidesega emaplaadile ei õnnestu lisada AMD protsessorit jne
  • Nii pooleliolevaid kui valminud skeeme saab salvestada
  • Igal jupil on oma vaade koos tehnilise infoga

Nice to have

  • Parima hinna kuvamine (nt Amazon, Newegg)
  • Komponentide võrdlus

Ülesanne 1: XML

Teema

XML

<?xml version="1.0" encoding="utf-8"?>

<components>
  
  <cases>
    <case brand="NZXT" name="S340" type="Mid Tower" formFactor="ATX" bay5="0" bay3="3" psu="" maxGpuLength="364" maxCpuHeight="161" primaryColor="black" secondaryColor="red" price="66.99"></case>
    <case brand="Deepcool" name="TESSERACT SW" type="Mid Tower" formFactor="ATX" bay5="2" bay3="4" psu="" maxGpuLength="" maxCpuHeight="" primaryColor="black" secondaryColor="light blue" price="38.99"></case>
    <case brand="Xion" name ="XON-310_BK" type="Mid Tower" formFactor="MicroATX" bay5="0" bay3="1" psu="" maxGpuLength="" maxCpuHeight="" primaryColor="black" secondaryColor="" price="22.98"></case>
    <case brand="Corsair" name="750D" type="Full tower" formFactor="MicroATX" bay5="3" bay3="6" psu="" maxGpuLength="450" maxCpuHeight="170" primaryColor="black" secondaryColor="" price="149.99"></case>
  </cases>
  
  <cpus>
    <cpu brand="Intel" name="7700k" cooler="no" series="Core i7" family="Kaby Lake" socket="LGA1151" iGPU="HD 630" cores="4" threads="8" ecc="no" speed="4,2" TDP="91" lithography="14" maxPowerDraw="" price="327.98"></cpu>
    <cpu brand="Intel" name="7600k" cooler="no" series="Core i5" family="Kaby Lake" socket="LGA1151" iGPU="HD 630" cores="4" threads="4" ecc="no" speed="3,8" TDP="91" lithography="14" maxPowerDraw="" price="233.89"></cpu>
    <cpu brand="Intel" name="6700k" cooler="no" series="Core i7" family="Skylake" socket="LGA1151" iGPU="HD 530" cores="4" threads="8" ecc="no" speed="4,0" TDP="91" lithography="14" maxPowerDraw="" price="316.98"></cpu>
    <cpu brand="Intel" name="6600k" cooler="no" series="Core i5" family="Skylake" socket="LGA1151" iGPU="HD 530" cores="4" threads="4" ecc="no" speed="3,5" TDP="91" lithography="14" maxPowerDraw="" price="219.99"></cpu>
    <cpu brand="Intel" name="E5-2699 V3" cooler="no" series="Xeon" family="Haswell" socket="LGA2011-3" iGPU="" cores="18" threads="36" ecc="yes" speed="2,3" TDP="145" lithography="22" maxPowerDraw="" price="3410.46"></cpu>
    <cpu brand="AMD" name="1800X" cooler="no" series="Ryzen 7" family="Ryzen" socket="AM4" iGPU="" cores="8" threads="16" ecc="no" speed="3,6" TDP="95" lithography="14" maxPowerDraw="" price="469.99"></cpu>
  </cpus>
  
  <cpucoolers>
    <cpucooler brand="Cooler Master" name="Hyper 212 EVO" liquid="no" rad="" fans="1" height="159" price="24.88">
      <sockets>
        <socket>AM2</socket>
        <socket>AM2+</socket>
        <socket>AM3</socket>
        <socket>AM3+</socket>
        <socket>FM1</socket>
        <socket>FM2</socket>
        <socket>FM2+</socket>
        <socket>LGA1150</socket>
        <socket>LGA1151</socket>
        <socket>LGA1155</socket>
        <socket>LGA1156</socket>
        <socket>LGA1366</socket>
        <socket>LGA2011</socket>
        <socket>LGA2011-3</socket>
        <socket>LGA775</socket>
      </sockets>
    </cpucooler>
    <cpucooler brand="Corsair" name="H100i v2" liquid="yes" rad="240" fans="2" height="" price="99.99">
      <sockets>
        <socket>AM2</socket>
        <socket>AM2+</socket>
        <socket>AM3</socket>
        <socket>AM3+</socket>
        <socket>FM1</socket>
        <socket>FM2</socket>
        <socket>FM2+</socket>
        <socket>LGA1150</socket>
        <socket>LGA1151</socket>
        <socket>LGA1155</socket>
        <socket>LGA1156</socket>
        <socket>LGA1366</socket>
        <socket>LGA2011</socket>
        <socket>LGA2011-3</socket>
      </sockets>
    </cpucooler>
    <cpucooler brand="Noctua" name="NH-D15" liquid="no" rad="" fans="2" height="165" price="85.49">
      <sockets>
        <socket>AM2</socket>
        <socket>AM2+</socket>
        <socket>AM3</socket>
        <socket>AM3+</socket>
        <socket>FM1</socket>
        <socket>FM2</socket>
        <socket>FM2+</socket>
        <socket>LGA1150</socket>
        <socket>LGA1151</socket>
        <socket>LGA1155</socket>
        <socket>LGA1156</socket>
        <socket>LGA1366</socket>
        <socket>LGA2011</socket>
        <socket>LGA2011-3</socket>
      </sockets>
    </cpucooler>
  </cpucoolers>
  
  <gpus>
    <gpu manufacturer="PowerColor" brandname="Radeon" codename="RX460" series="Red Dragon" vram="2" psuPin="" length="226" maxPowerDraw="" price="73.98"></gpu>
    <gpu manufacturer="Sapphire" brandname="Radeon" codename="RX480" series="Nitro+" vram="8" psuPin="8" length="240" maxPowerDraw="" price="253.99"></gpu>
    <gpu manufacturer="MSI" brandname="Geforce" codename="GTX1070" series="Quick Silver OC" vram="8" psuPin="6+8" length="279" maxPowerDraw="" price="409.99"></gpu>
  </gpus>
  
  <memorychips>
    <memorychip brand="Kingston" name="ValueRAM" type="DIMM" rank="single" cas="15" gen="DDR4" speed="2133" moduleSize="8" modules="1" ECC="yes" price="67.58"></memorychip>
    <memorychip brand="Corsair" name="Dominator Platinum" type="DIMM" rank="" cas="15" gen="DDR4" speed="3000" moduleSize="8" modules="2" ECC="no" price="123.25"></memorychip>
    <memorychip brand="ADATA" name="" type="DIMM" rank="" cas="15" gen="DDR3" speed="1600" moduleSize="8" modules="1" ECC="no" price="88.29"></memorychip>
  </memorychips>
  
  <motherboards>
    <motherboard brand="Asus" name="Z170-A" formFactor="ATX" chipset="Z170" socket="LGA1151" memoryType="DDR4" memorySlots="4" maxMemory="64" maxMemorySpeed="3400" video="" sata3="4" ethernet="1000" usb3="yes" price="152.99"></motherboard>
    <motherboard brand="ASRock" name="H110M-HDS" formFactor="MicroATX" chipset="H110" socket="LGA1151" memoryType="DDR4" memorySlots="2" maxMemory="32" maxMemorySpeed="2133" video="" sata3="4" ethernet="1000" usb3="yes" price="37.98"></motherboard>
    <motherboard brand="Asus" name="Prime X370-PRO" formFactor="ATX" chipset="X370" socket="AM4" memoryType="DDR4" memorySlots="4" maxMemory="64" maxMemorySpeed="3200" video="" sata3="8" ethernet="1000" usb3="yes" price="162.98"></motherboard>
  </motherboards>
  
  <psus>
    <psu brand="EVGA" name="SuperNOVA 650" formFactor="ATX" wattage="650" eff80plus="gold" modular="full" pcie6="0" pcie6p2="4" price="77.88"></psu>
    <psu brand="be Quiet!" name="Pure Power L8 600W" formFactor="ATX" wattage="600" eff80plus="bronze" modular="no" pcie6="0" pcie6p2="4" price="77.88"></psu>
    <psu brand="Corsair" name="CX550M" formFactor="ATX" wattage="550" eff80plus="bronze" modular="semi" pcie6="0" pcie6p2="2" price="43.98"></psu>
  </psus>
  
  <storage>
    <ssds>
      <ssd brand="Samsung" name="850 PRO" capacity="2048" cache="" interface="sata3" formFactor="2,5" price="823.14"></ssd>
      <ssd brand="Intel" name="DC P3608" capacity="4096" cache="" interface="pcie8x" formFactor="pcie" price="8867.99"></ssd>
      <ssd brand="Samsung" name="960 PRO" capacity="1024" cache="" interface="m.2" formFactor="m.2-2280" price="629.95"></ssd>
    </ssds>
    <hdds>
      <hdd brand="Western Digital" name="Black" capacity="6144" cache="128" interface="sata3" formFactor="3,5" rpm="7200" price="279.00"></hdd>
      <hdd brand="Seagate" name="BarraCuda Pro" capacity="10240" cache="256" interface="sata3" formFactor="3,5" rpm="7200" price="429.99"></hdd>
      <hdd brand="Hitachi" name="Travelstar" capacity="1024" cache="32" interface="sata3" formFactor="2,5" rpm="7200" price="53.99"></hdd>
    </hdds>
  </storage>
  
</components>

XML skeem (XSD)

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="components">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="cases" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="case">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="bay5" type="xs:integer" use="required" />
                  <xs:attribute name="bay3" type="xs:integer" use="required" />
                  <xs:attribute name="psu" type="xs:string" use="required" />
                  <xs:attribute name="maxGpuLength" type="xs:string" use="required" />
                  <xs:attribute name="maxCpuHeight" type="xs:string" use="required" />
                  <xs:attribute name="primaryColor" type="xs:string"/>
                  <xs:attribute name="secondaryColor" type="xs:string"/>
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="cpus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="cpu">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="cooler" type="xs:string" use="required" />
                  <xs:attribute name="series" type="xs:string" use="required" />
                  <xs:attribute name="family" type="xs:string" use="required" />
                  <xs:attribute name="socket" type="xs:string" use="required" />
                  <xs:attribute name="iGPU" type="xs:string" use="required" />
                  <xs:attribute name="cores" type="xs:integer" use="required" />
                  <xs:attribute name="threads" type="xs:integer" use="required" />
                  <xs:attribute name="ecc" type="xs:string" use="required" />
                  <xs:attribute name="speed" type="xs:string" use="required" />
                  <xs:attribute name="TDP" type="xs:integer" use="required" />
                  <xs:attribute name="lithography" type="xs:integer" use="required" />
                  <xs:attribute name="maxPowerDraw" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="cpucoolers" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="cpucooler">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="sockets">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="socket" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="liquid" type="xs:string" use="required" />
                  <xs:attribute name="rad" type="xs:string" use="required" />
                  <xs:attribute name="fans" type="xs:integer" use="required" />
                  <xs:attribute name="height" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="gpus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="gpu">
                <xs:complexType>
                  <xs:attribute name="manufacturer" type="xs:string" use="required" />
                  <xs:attribute name="brandname" type="xs:string" use="required" />
                  <xs:attribute name="codename" type="xs:string" use="required" />
                  <xs:attribute name="series" type="xs:string" use="required" />
                  <xs:attribute name="vram" type="xs:integer" use="required" />
                  <xs:attribute name="psuPin" type="xs:string" use="required" />
                  <xs:attribute name="length" type="xs:integer" use="required" />
                  <xs:attribute name="maxPowerDraw" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="memorychips" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="memorychip">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="type" type="xs:string" use="required" />
                  <xs:attribute name="rank" type="xs:string" use="required" />
                  <xs:attribute name="cas" type="xs:integer" use="required" />
                  <xs:attribute name="gen" type="xs:string" use="required" />
                  <xs:attribute name="speed" type="xs:integer" use="required" />
                  <xs:attribute name="moduleSize" type="xs:integer" use="required" />
                  <xs:attribute name="modules" type="xs:integer" use="required" />
                  <xs:attribute name="ECC" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="motherboards" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="motherboard">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="chipset" type="xs:string" use="required" />
                  <xs:attribute name="socket" type="xs:string" use="required" />
                  <xs:attribute name="memoryType" type="xs:string" use="required" />
                  <xs:attribute name="memorySlots" type="xs:integer" use="required" />
                  <xs:attribute name="maxMemory" type="xs:integer" use="required" />
                  <xs:attribute name="maxMemorySpeed" type="xs:integer" use="required" />
                  <xs:attribute name="video" type="xs:string" use="required" />
                  <xs:attribute name="sata3" type="xs:integer" use="required" />
                  <xs:attribute name="ethernet" type="xs:integer" use="required" />
                  <xs:attribute name="usb3" type="xs:string" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="psus" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="psu">
                <xs:complexType>
                  <xs:attribute name="brand" type="xs:string" use="required" />
                  <xs:attribute name="name" type="xs:string" use="required" />
                  <xs:attribute name="formFactor" type="xs:string" use="required" />
                  <xs:attribute name="wattage" type="xs:integer" use="required" />
                  <xs:attribute name="eff80plus" type="xs:string" use="required" />
                  <xs:attribute name="modular" type="xs:string" use="required" />
                  <xs:attribute name="pcie6" type="xs:integer" use="required" />
                  <xs:attribute name="pcie6p2" type="xs:integer" use="required" />
                  <xs:attribute name="price" type="xs:decimal" use="required" />
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="storage" minOccurs="0" maxOccurs="1">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="ssds" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="ssd">
                      <xs:complexType>
                        <xs:attribute name="brand" type="xs:string" use="required" />
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="capacity" type="xs:integer" use="required" />
                        <xs:attribute name="cache" type="xs:string" use="required" />
                        <xs:attribute name="interface" type="xs:string" use="required" />
                        <xs:attribute name="formFactor" type="xs:string" use="required" />
                        <xs:attribute name="price" type="xs:decimal" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="hdds" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element maxOccurs="unbounded" name="hdd">
                      <xs:complexType>
                        <xs:attribute name="brand" type="xs:string" use="required" />
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="capacity" type="xs:integer" use="required" />
                        <xs:attribute name="cache" type="xs:integer" use="required" />
                        <xs:attribute name="interface" type="xs:string" use="required" />
                        <xs:attribute name="formFactor" type="xs:string" use="required" />
                        <xs:attribute name="rpm" type="xs:integer" use="required" />
                        <xs:attribute name="price" type="xs:decimal" use="required" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT 1

XSLT 2

Ülesanne 1 retsensioonid

Ülesanne 2: Veebirakendus

Ülesanne 3: Klientrakendus

(b)logi

  • 20/03/2017: Loodud Wiki leht, jagatud ülesanded
  • 20/03/2017: Projekti esimene osa valmis