VRII2018: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Rkallas (talk | contribs)
Kkaal (talk | contribs)
 
(14 intermediate revisions by 2 users not shown)
Line 5: Line 5:
* Teet Adamson
* Teet Adamson
* Kaspar Kaal
* Kaspar Kaal
* Rahel Kangur
* Rahel Kangur (lahkunud)


Team Foundation Version Control: https://supersalajane.visualstudio.com/VRII2018TFVC
Team Foundation Version Control: https://majutuus.visualstudio.com/MajuTuus


==Analüüs==
==Analüüs==
Line 16: Line 16:
neid punktiskaalal hinnata ning anda rendile andjatele selgust rentniku puhul, kas teda usaldada või mitte ja vastupidi.  
neid punktiskaalal hinnata ning anda rendile andjatele selgust rentniku puhul, kas teda usaldada või mitte ja vastupidi.  


Kuna kinnisvaraturg moodustab väga suure osa majandusest ning inimestel on vaja kohta, kus elada kuid elukoha eest maksmine peaks olema mõistliku hinnaga, usaldusväärne ning võimaldama keskkonda, mis on standardiks vastavas riigis. Erinevatel riikidel on erinevad standardid, nägemused ja visioonid elamispinnast. Tihtipeale on väga suurtes linnades renditurul kriis, olukorda raskendab veelgi kahe osapoole vahelise usalduse leidmine. Samuti tuleb ette rentimisel väga palju "üllatusi" ja möödarääkimisi. Tihtipeale esitatakse rendikuulutuses "arved hinna sees" kuid reaalsuses see nii ei ole. Esinevad ka arusaamatused tubade arvu ja osapooltevahelises kokkulepetest kinnipidamises, rendipinna puudustes ning kvaliteedis. Leiame, et olenemata nõudlusest ei peaks kehva kvaliteediga elamispinnad olema väga suurte rendihindadega või vähemalt peegeldama reaalsust koha üle, mida parasjagu renditakse, et aidata inimestel teha kaalutud ja läbimõeldud otsus elamispinna valikul. Samuti leiame, et ausa konkurentsi põhimõttel peavad rendileandjad pakkuma turul elamispindu, mis on määratud kindla standardi järgi ning olema mõistliku hinnaga, vastama elamisrajooni jõukusele ning andma võimalusi inimesele edasiarenguks. See tähendab, et me müüme inimestele säästmist, kontrollime elamistandardeid ning toome välja majad, mida võiks muuta/parandada või tegeleda nende haldusega.
Kuna kinnisvaraturg moodustab väga suure osa majandusest ning inimestel on vaja kohta, kus elada kuid elukoha eest maksmine peaks olema mõistliku hinnaga, usaldusväärne ning võimaldama keskkonda, mis on standardiks vastavas riigis. Erinevatel riikidel on erinevad standardid, nägemused ja visioonid elamispinnast. Tihtipeale on väga suurtes linnades renditurul kriis, olukorda raskendab veelgi kahe osapoole vahelise usalduse leidmine. Samuti tuleb ette rentimisel väga palju "üllatusi" ja möödarääkimisi. Tihtipeale esitatakse rendikuulutuses "arved hinna sees" kuid reaalsuses see nii ei ole. Esinevad ka arusaamatused tubade arvu ja osapoolte vahelises kokkulepetest kinnipidamises, rendipinna puudustes ning kvaliteedis. Leiame, et olenemata nõudlusest ei peaks kehva kvaliteediga elamispinnad olema väga suurte rendihindadega või vähemalt peegeldama reaalsust koha üle, mida parasjagu renditakse, et aidata inimestel teha kaalutud ja läbimõeldud otsus elamispinna valikul. Samuti leiame, et ausa konkurentsi põhimõttel peavad rendileandjad pakkuma turul elamispindu, mis on määratud kindla standardi järgi ning olema mõistliku hinnaga.


Põhjused miks sellist rakendust oleks vaja on:  
Põhjused miks sellist rakendust oleks vaja on:  
Line 26: Line 26:
* petuskeemid korterite renditurul
* petuskeemid korterite renditurul


Järjest kallinev kinnisvaraturug ning linnastumine on pannud noored inimesed, kes tahavad üksi elada keerulisse olukorda, kus rendihinnad on liiga kõrged,
Järjest kallinev kinnisvaraturg ning linnastumine on pannud noored inimesed, kes tahavad üksi elada keerulisse olukorda, kus rendihinnad on liiga kõrged,
rendile andjatega on raske tingida kuna nõudlus on suur ning tihtipeale ei vasta ka renditavad kohad ootustele ja rendilepingud võivad olla väga eksitavad.
rendile andjatega on raske tingida kuna nõudlus on suur ning tihtipeale ei vasta ka renditavad kohad ootustele ja rendilepingud võivad olla väga eksitavad.
Selleks, et renditurgu üldistada on tarvis luua süsteem kinnisvaraturul olevate ruumidega ning erinevate hinnangute läbi neid kontrollida ja sel teel ühtlustada turu rendihindu. Selliseks eeskujuks on näiteks
Selleks, et renditurgu ühtustada on tarvis luua süsteem kinnisvaraturul olevate ruumidega ning erinevate hinnangute läbi neid kontrollida ja sel teel ühtlustada turu rendihindu. Selliseks eeskujuks on näiteks
Berliin, Saksamaal, kus renditurg on reglementeeritud (rendihinnad rajoonide kohta on fikseeritud, rendile andjaid ei tohi tegeleda lühiajaliste rendile andmistega nagu  
Berliin, Saksamaal, kus renditurg on reglementeeritud (rendihinnad rajoonide kohta on fikseeritud, rendile andjaid ei tohi tegeleda lühiajaliste rendile andmistega nagu  
näiteks AirBnB) kuid seda raskendab keeruline bürokraatlik korraldus, mis koosneb kohtumisest, otsustamisest ning taustauuringust ning kogu protsess võib kesta nädal aega.
näiteks AirBnB) kuid seda raskendab keeruline bürokraatlik korraldus, mis koosneb kohtumisest, otsustamisest ning taustauuringust ning kogu protsess võib kesta nädal aega.
Meie projekti idee on koguda andmeid hinadmise järgi, mis loob rentija ja rendile andja vahelise usalduse. Hinnanguks on punktiskaala, mis arvutatakse kokku eelnevate hinnangutega elamispindadel kuna tänapäeval
Meie projekti idee on koguda andmeid hindamise järgi, mis loob rentija ja rendile andja vahelise usalduse. Hinnanguks on punktiskaala, mis arvutatakse kokku eelnevate hinnangutega elamispindadel kuna tänapäeval
on täiesti normaalne, et kolitakse  
on normaalne, et kolitakse  
1) kehva elukoha tingimuste pärast ja saadakse parema palgaga töökoht ja soovitakse võimaldada endale rohkem
1) kehva elukoha tingimuste pärast või saadakse parema palgaga töökoht ja soovitakse paremaid elutingimusi
2) ei meeldinud korterikaaslased
2) ei sobi korterikaaslastega
3) ümberkorraldused eluteel
3) ümberkorraldused eluteel
4) ümberkorraldused rendile andja poolt. Need nimetatuid kriteeriumeid annab hinnata ning anda parema pildi renditavast kohast ning rendile andjast.
4) ümberkorraldused rendile andja poolt.
 
Need nimetatuid kriteeriumeid annab hinnata ning anda parema pildi renditavast kohast ning rendile andjast.
Tänapäeval levivad pigem "word of mouth" stiilis arvamused ning hinnangud erinevate korterite ja majade kohta kuid sotsiaalmeedias levib väga palju juhtumeid, kus on ka näiteks
Tänapäeval levivad pigem "word of mouth" stiilis arvamused ning hinnangud erinevate korterite ja majade kohta kuid sotsiaalmeedias levib väga palju juhtumeid, kus on ka näiteks
rendile andja rikkunud põhimõttelisi reegleid. Samuti võib olla ka väga stabiilne rentija olla tüliks naabritele tema käitumise tõttu (öörahu rikkumine, reeglite mitte täitmine)
rendile andja rikkunud põhimõttelisi reegleid. Samuti võib olla ka väga stabiilne rentija olla tüliks naabritele tema käitumise tõttu (öörahu rikkumine, reeglite mitte täitmine)
Projekti ideeks on hõlbustada lepingu sõlmimise osapooli, aidata rentijal välja valida talle sobiv koht, aidata rendile andjal valida sobiv kandidaat, kasutades kandidaadi punktiskoori.  
Projekti ideeks on hõlbustada lepingu sõlmimist - aidata rentijal välja valida talle sobiv koht ning aidata rendile andjal valida sobiv kandidaat.  
Kasutajad saavad valida endale sobiva renditava pinna, neile sobiva hinna ja nendele sobiva hinnanguga. Kasutaja Hinnangut mõjutavad järgmised faktorid: maksmata arved, kolimiste arv ja põhjused, stabiilsus. Haldaja Hinnangut mõjutavad järgmised faktorid: elamispinna kvaliteet, elanike arv ühel pinnal ja nende vahetumine, asukoht (mugavused ja infrastruktuur), konkreetsed juhtumid.
Kasutajad saavad valida endale sobiva renditava pinna, neile sobiva hinna ja nendele sobiva hinnanguga. Kasutaja Hinnangut mõjutavad järgmised faktorid: maksmata arved, kolimiste arv ja põhjused, stabiilsus. Haldaja hinnangut mõjutavad järgmised faktorid: elamispinna kvaliteet, elanike arv ühel pinnal ja nende vahetumine, asukoht (mugavused ja infrastruktuur), konkreetsed juhtumid.


Kasutatakse:
Kasutatakse:
Veebiteenus kasutab andmebaasi, mis koosnevad registreeritud kasutajatest. Kasutaja registreerib end kasutajaks kas "rentijana" või "rendile andjana." Rendile andja saab lisada kuulutuse oma rendile antavast elamispinnast ning rentnikud saavad pinda valida. Laekunud avaldustest jõuavad kohale ainult kõrgema hinnangu saajad. Väiksema hinnangu saajad peavad valima elamispindu, mis on väiksema hinnanguna. Hinnangut saab aja jooksul parandada ning mõlemad pooled on kohustatud rendilepingu lõpetamisel jätma tagasisidet. Samuti saab tagasisidet jätta ka rendilepingu kestvuse ajal.
Veebiteenus kasutab andmebaasi, mis koosnevad registreeritud kasutajatest. Rakenduses kasutaja registreerib end kasutajaks kas "rentijana" või "rendile andjana." Rendile andja saab lisada kuulutuse oma rendile antavast elamispinnast ning rentnikud saavad pinda valida.  


Kuidas peaks mõjutama rakendus ühiskonda ja inimesi:
Kuidas peaks mõjutama rakendus ühiskonda ja inimesi:
Line 72: Line 74:
====Administraator====
====Administraator====


Administraatoril on võimalik kordineerida kogu süsteemi tööd ja anda teistele kasutajatele õigusi(see osa pigem tulevik, sest õiguste osa pole hetkel andmemudelis kirjeldatud). Administraator saab sõlmida lepinguid kliendi ja kasutaja vahel.
Administraatoril on võimalik kordineerida kogu süsteemi tööd ja anda teistele kasutajatele õigusi(see osa pigem tulevik, sest õiguste osa pole hetkel andmemudelis kirjeldatud).


===Must-to-have-functonality===
===Must-to-have-functonality===
* Saab luua kasutajaid  
* Saab luua kasutajaid  
* Registreeritud kasutaja saab lisada kuulutusi või vaadata neid
* Registreeritud kasutaja saab lisada kuulutusi või vaadata neid
* On võimalik sõlmida lepinguid kliendi ja kasutaja vahel
* Registreeritud kasutaja saab anda hinnanguid


===Nice-to-have-functonality===
===Nice-to-have-functonality===
Line 86: Line 88:
[[File:UusIdeeVR.png]]
[[File:UusIdeeVR.png]]


==XML==
'''XML'''
<source lang="xml">
<?xml version="1.0" encoding="utf-8" ?>
<apartments>
  <apartment id="1" active="true">
    <numberofrooms>3</numberofrooms>
    <address>
      <city>Tallinn</city>
      <street>Pikk</street>
      <house>5</house>
      <apartmentnumber>13</apartmentnumber>
    </address>
    <owner id="1" activeuser="true">
      <firstname>Malle</firstname>
      <lastname>Kuusk</lastname>
      <contacts>
        <contact id="1" type="phone" value="32588293"></contact>
        <contact id="2" type="email" value="mkuusk@mail.com"></contact>
        <contact id="3" type="address">
          <address>
            <cityorcounty>Harjumaa</cityorcounty>
            <street>Voore</street>
            <housenumber>15</housenumber>
            <apartmentnumber>12</apartmentnumber>
          </address>
        </contact>       
      </contacts>
    </owner>
    <comment>![CDATA[ no previous problems ]]</comment>
  </apartment>
  <apartment id="2" active="false">
    <numberofrooms>6</numberofrooms>
    <address>
      <city>Tartu</city>
      <street>Riia</street>
      <house>9</house>
      <apartmentnumber>9</apartmentnumber>
    </address>
    <owner id="2" activeuser="true">
      <firstname>Mati</firstname>
      <lastname>Soomets</lastname>
      <contacts>
        <contact id="1" type="phone" value="513948289"></contact>
        <contact id="2" type="email" value="kurimati@mail.com"></contact>
        <contact id="3" type="address">
          <address>
            <cityorcounty>Tallinn</cityorcounty>
            <street>Lai</street>
            <housenumber>12</housenumber>
            <apartmentnumber>11</apartmentnumber>
          </address>
        </contact>
      </contacts>
    </owner>
    <comment>![CDATA[ leaking roof ]]</comment>
  </apartment>
</apartments>
</source>
'''XSD'''
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="apartments">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="apartment">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="numberofrooms" type="xs:unsignedByte" />
              <xs:element name="address">
                <xs:complexType>
                  <xs:all>
                    <xs:element name="city" type="xs:string" />
                    <xs:element name="street" type="xs:string" />
                    <xs:element name="house" type="xs:unsignedInt" />
                    <xs:element name="apartmentnumber" type="xs:unsignedInt" />
                  </xs:all>
                </xs:complexType>
              </xs:element>
              <xs:element name="owner">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="firstname" type="xs:string" />
                    <xs:element name="lastname" type="xs:string" />
                    <xs:element name="contacts">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="contact">
                            <xs:complexType>
                              <xs:sequence minOccurs="0">
                                <xs:element name="address">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="cityorcounty" type="xs:string" />
                                      <xs:element name="street" type="xs:string" />
                                      <xs:element name="housenumber" type="xs:unsignedInt" />
                                      <xs:element name="apartmentnumber" type="xs:unsignedInt" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                              <xs:attribute name="type" type="xs:string" use="required" />
                              <xs:attribute name="value" type="xs:string" use="optional" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="activeuser" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="comment" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedInt" use="required" />
            <xs:attribute name="active" type="xs:boolean" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
</source>
==Retsensioonid==
==Retsensioonid==


Analüüsi retsensioon meeskonna ... tööle:
Analüüsi retsensioon meeskonna ... tööle:

Latest revision as of 07:12, 17 June 2018


Meeskonnaliikmed

  • Teet Adamson
  • Kaspar Kaal
  • Rahel Kangur (lahkunud)

Team Foundation Version Control: https://majutuus.visualstudio.com/MajuTuus

Analüüs

Kirjeldus

Tegemist on rentijatele ja rentnikele mõeldud veebiteenusega, millega saab hallata kinnisvara rendile andjaid ja rentijaid, sõlmida omavahel lepinguid, neid punktiskaalal hinnata ning anda rendile andjatele selgust rentniku puhul, kas teda usaldada või mitte ja vastupidi.

Kuna kinnisvaraturg moodustab väga suure osa majandusest ning inimestel on vaja kohta, kus elada kuid elukoha eest maksmine peaks olema mõistliku hinnaga, usaldusväärne ning võimaldama keskkonda, mis on standardiks vastavas riigis. Erinevatel riikidel on erinevad standardid, nägemused ja visioonid elamispinnast. Tihtipeale on väga suurtes linnades renditurul kriis, olukorda raskendab veelgi kahe osapoole vahelise usalduse leidmine. Samuti tuleb ette rentimisel väga palju "üllatusi" ja möödarääkimisi. Tihtipeale esitatakse rendikuulutuses "arved hinna sees" kuid reaalsuses see nii ei ole. Esinevad ka arusaamatused tubade arvu ja osapoolte vahelises kokkulepetest kinnipidamises, rendipinna puudustes ning kvaliteedis. Leiame, et olenemata nõudlusest ei peaks kehva kvaliteediga elamispinnad olema väga suurte rendihindadega või vähemalt peegeldama reaalsust koha üle, mida parasjagu renditakse, et aidata inimestel teha kaalutud ja läbimõeldud otsus elamispinna valikul. Samuti leiame, et ausa konkurentsi põhimõttel peavad rendileandjad pakkuma turul elamispindu, mis on määratud kindla standardi järgi ning olema mõistliku hinnaga.

Põhjused miks sellist rakendust oleks vaja on:

  • linnastumine
  • inimesd eelistavad elada üksi
  • vananevad elamispinnad
  • kallid rendihinnad
  • keeruline protsess lepingute sõlmimisel
  • petuskeemid korterite renditurul

Järjest kallinev kinnisvaraturg ning linnastumine on pannud noored inimesed, kes tahavad üksi elada keerulisse olukorda, kus rendihinnad on liiga kõrged, rendile andjatega on raske tingida kuna nõudlus on suur ning tihtipeale ei vasta ka renditavad kohad ootustele ja rendilepingud võivad olla väga eksitavad. Selleks, et renditurgu ühtustada on tarvis luua süsteem kinnisvaraturul olevate ruumidega ning erinevate hinnangute läbi neid kontrollida ja sel teel ühtlustada turu rendihindu. Selliseks eeskujuks on näiteks Berliin, Saksamaal, kus renditurg on reglementeeritud (rendihinnad rajoonide kohta on fikseeritud, rendile andjaid ei tohi tegeleda lühiajaliste rendile andmistega nagu näiteks AirBnB) kuid seda raskendab keeruline bürokraatlik korraldus, mis koosneb kohtumisest, otsustamisest ning taustauuringust ning kogu protsess võib kesta nädal aega. Meie projekti idee on koguda andmeid hindamise järgi, mis loob rentija ja rendile andja vahelise usalduse. Hinnanguks on punktiskaala, mis arvutatakse kokku eelnevate hinnangutega elamispindadel kuna tänapäeval on normaalne, et kolitakse 1) kehva elukoha tingimuste pärast või saadakse parema palgaga töökoht ja soovitakse paremaid elutingimusi 2) ei sobi korterikaaslastega 3) ümberkorraldused eluteel 4) ümberkorraldused rendile andja poolt.

Need nimetatuid kriteeriumeid annab hinnata ning anda parema pildi renditavast kohast ning rendile andjast. Tänapäeval levivad pigem "word of mouth" stiilis arvamused ning hinnangud erinevate korterite ja majade kohta kuid sotsiaalmeedias levib väga palju juhtumeid, kus on ka näiteks rendile andja rikkunud põhimõttelisi reegleid. Samuti võib olla ka väga stabiilne rentija olla tüliks naabritele tema käitumise tõttu (öörahu rikkumine, reeglite mitte täitmine) Projekti ideeks on hõlbustada lepingu sõlmimist - aidata rentijal välja valida talle sobiv koht ning aidata rendile andjal valida sobiv kandidaat. Kasutajad saavad valida endale sobiva renditava pinna, neile sobiva hinna ja nendele sobiva hinnanguga. Kasutaja Hinnangut mõjutavad järgmised faktorid: maksmata arved, kolimiste arv ja põhjused, stabiilsus. Haldaja hinnangut mõjutavad järgmised faktorid: elamispinna kvaliteet, elanike arv ühel pinnal ja nende vahetumine, asukoht (mugavused ja infrastruktuur), konkreetsed juhtumid.

Kasutatakse: Veebiteenus kasutab andmebaasi, mis koosnevad registreeritud kasutajatest. Rakenduses kasutaja registreerib end kasutajaks kas "rentijana" või "rendile andjana." Rendile andja saab lisada kuulutuse oma rendile antavast elamispinnast ning rentnikud saavad pinda valida.

Kuidas peaks mõjutama rakendus ühiskonda ja inimesi:

  • Paraneb renditurul pakutavate elamispindade kvaliteet (nö Eurostandardi laiaulatuslikum kasutuselevõtt)
  • Rendihindade ühtlustumine
  • Adekvaatsemad valikud inimeste poolt
  • Püsivam ja stabiilsem elukvaliteet
  • Kulude optimeerimine
  • Anda võimalus nendele vähestele, kel ei ole võimalik 1/3 palgast säästa
  • Kolimise põhjuste tagasiside kasutamine inimese profiili loomisel, mitte selle praegune negatiivne võti krediititausta loomisel

Kasutajad

  • Rentijad
  • Rendile andjad
  • Administraator

Projekti funktsionaalsus

Klient

Klient ehk rendile andja saab lisada oma kuulutust.

Tavakasutaja

Tavakasutaja saab rendipindu vaadata ja valida nende vahel endale sobiv.

Administraator

Administraatoril on võimalik kordineerida kogu süsteemi tööd ja anda teistele kasutajatele õigusi(see osa pigem tulevik, sest õiguste osa pole hetkel andmemudelis kirjeldatud).

Must-to-have-functonality

  • Saab luua kasutajaid
  • Registreeritud kasutaja saab lisada kuulutusi või vaadata neid
  • Registreeritud kasutaja saab anda hinnanguid

Nice-to-have-functonality

  • Administraaor kasutajal on rohkem õigusi kui teistel kasutajatel ning ta saab anda teistele kasutajatele õigusi

Andmemudel

XML

XML

<?xml version="1.0" encoding="utf-8" ?>
<apartments>
  <apartment id="1" active="true">
    <numberofrooms>3</numberofrooms>
    <address>
      <city>Tallinn</city>
      <street>Pikk</street>
      <house>5</house>
      <apartmentnumber>13</apartmentnumber>
    </address>
    <owner id="1" activeuser="true">
      <firstname>Malle</firstname>
      <lastname>Kuusk</lastname>
      <contacts>
        <contact id="1" type="phone" value="32588293"></contact>
        <contact id="2" type="email" value="mkuusk@mail.com"></contact>
        <contact id="3" type="address">
          <address>
            <cityorcounty>Harjumaa</cityorcounty>
            <street>Voore</street>
            <housenumber>15</housenumber>
            <apartmentnumber>12</apartmentnumber>
          </address>
        </contact>        
      </contacts>
    </owner>
    <comment>![CDATA[ no previous problems ]]</comment>
  </apartment>
  <apartment id="2" active="false">
    <numberofrooms>6</numberofrooms>
    <address>
      <city>Tartu</city>
      <street>Riia</street>
      <house>9</house>
      <apartmentnumber>9</apartmentnumber>
    </address>
    <owner id="2" activeuser="true">
      <firstname>Mati</firstname>
      <lastname>Soomets</lastname>
      <contacts>
        <contact id="1" type="phone" value="513948289"></contact>
        <contact id="2" type="email" value="kurimati@mail.com"></contact>
        <contact id="3" type="address">
          <address>
            <cityorcounty>Tallinn</cityorcounty>
            <street>Lai</street>
            <housenumber>12</housenumber>
            <apartmentnumber>11</apartmentnumber>
          </address>
        </contact>
      </contacts>
    </owner>
    <comment>![CDATA[ leaking roof ]]</comment>
  </apartment>
</apartments>

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="apartments">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="apartment">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="numberofrooms" type="xs:unsignedByte" />
              <xs:element name="address">
                <xs:complexType>
                  <xs:all>
                    <xs:element name="city" type="xs:string" />
                    <xs:element name="street" type="xs:string" />
                    <xs:element name="house" type="xs:unsignedInt" />
                    <xs:element name="apartmentnumber" type="xs:unsignedInt" />
                  </xs:all>
                </xs:complexType>
              </xs:element>
              <xs:element name="owner">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="firstname" type="xs:string" />
                    <xs:element name="lastname" type="xs:string" />
                    <xs:element name="contacts">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="contact">
                            <xs:complexType>
                              <xs:sequence minOccurs="0">
                                <xs:element name="address">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="cityorcounty" type="xs:string" />
                                      <xs:element name="street" type="xs:string" />
                                      <xs:element name="housenumber" type="xs:unsignedInt" />
                                      <xs:element name="apartmentnumber" type="xs:unsignedInt" />
                                    </xs:sequence>
                                  </xs:complexType>
                                </xs:element>
                              </xs:sequence>
                              <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                              <xs:attribute name="type" type="xs:string" use="required" />
                              <xs:attribute name="value" type="xs:string" use="optional" />
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:unsignedInt" use="required" />
                  <xs:attribute name="activeuser" type="xs:boolean" use="required" />
                </xs:complexType>
              </xs:element>
              <xs:element name="comment" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="id" type="xs:unsignedInt" use="required" />
            <xs:attribute name="active" type="xs:boolean" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Retsensioonid

Analüüsi retsensioon meeskonna ... tööle: