Meeskond: CoverMe
From ICO wiki
Meeskond: CoverMe
- Karit Kilgi
- Sten Kaasik
- Ragne Auling
- Silja Kralik
Idee
XML fail
XML
<?xml version="1.0" encoding="utf-8" ?>
<employees>
<employee id="10012" available="false">
<personalCode>768-22-XXXX</personalCode>
<image>https://yt3.ggpht.com/-V92UP8yaNyQ/AAAAAAAAAAI/AAAAAAAAAAA/zOYDMx8Qk3c/s900-c-k-no-mo-rj-c0xffffff/photo.jpg</image>
<name>
<firstName>Lucia</firstName>
<middleName>J.</middleName>
<lastName>Gaskill</lastName>
</name>
<!-- Sugu: 0 - määramata, 1 - naine, 2 - mees -->
<gender>1</gender>
<birthDate>1959-04-05</birthDate>
<phone>904-366-8831</phone>
<email>LuciaJGaskill@jourrapide.com</email>
<!-- Status: 0 - tööl, 1 - puhkusel jne. -->
<contract id="1" startDate="2002-02-05" endDate="2008-03-15" status="0">
<company>Cadbury</company>
<department>Service</department>
<occupation>Cashier</occupation>
<!-- töökoormus tundides nädal kohta-->
<workload>40</workload>
<extraWork id="1" startDate="2003-03-20" endDate="2003-04-20">
<company>Mr Fables</company>
<task>Cleaner</task>
<totalHours>80</totalHours>
</extraWork>
</contract>
<contract id="2" startDate="2008-03-16" status="0">
<company>Cadbury</company>
<department>Service</department>
<occupation>Manager</occupation>
<workload>40</workload>
</contract>
</employee>
<employee id="10013" available="false">
<personalCode>769-48-XXXX</personalCode>
<image></image>
<name>
<firstName>Martha</firstName>
<lastName>Cornwell</lastName>
</name>
<!-- Sugu: 0 - määramata, 1 - naine, 2 - mees -->
<gender>1</gender>
<birthDate>1998-07-05</birthDate>
<phone>123-456-7785</phone>
<email>MarthaCornwall@jourrapide.com</email>
<!-- Status: 0 - tööl, 1 - puhkusel jne. -->
<contract id="5" startDate="2001-03-21" status="0">
<company>Cadbury</company>
<department>Service</department>
<occupation>Servant</occupation>
<workload>40</workload>
</contract>
</employee>
<employee id="10234" available="true">
<personalCode>019-05-XXXX</personalCode>
<image>http://weknowyourdreams.com/images/dog/dog-08.jpg</image>
<name>
<firstName>James</firstName>
<lastName>Gibson</lastName>
</name>
<gender>2</gender>
<birthDate>1957-08-02</birthDate>
<phone>781-896-5862</phone>
<email>JamesGibson@armyspy.com</email>
<contract id="3" startDate="2016-12-27" status="1">
<company>Brilliant Home Designs</company>
<department>Accounting</department>
<occupation>Accountant</occupation>
<workload>40</workload>
</contract>
</employee>
<employee id="11454" available="true">
<personalCode>623-11-XXXX</personalCode>
<image>https://www.mein-schoener-garten.de/sites/default/files/styles/inline_l/public/eichhoernchen-winter-2617791-blp-fotolia.jpg?itok=2UsYbm24</image>
<name>
<firstName>Elizabeth</firstName>
<middleName>L.</middleName>
<lastName>May</lastName>
</name>
<gender>1</gender>
<birthDate>1997-01-12</birthDate>
<phone>530-730-0818</phone>
<email>ElizabethLMay@dayrep.com</email>
<contract id="4" startDate="2015-05-23" status="1">
<company>Corinthian Designs</company>
<department>Helpdesk</department>
<occupation>Information and record clerk</occupation>
<workload>20</workload>
<extraWork id="1" startDate="2016-03-20" endDate="2016-03-22">
<company>Mr Fables</company>
<task>Data processor</task>
<totalHours>10</totalHours>
</extraWork>
</contract>
</employee>
<employee id="11455" available="true">
<personalCode>624-54-XXXX</personalCode>
<image>http://www.miksike.ee/docs/referaadid2005/kiirgliblikas_evelin.jpg</image>
<name>
<firstName>Judy</firstName>
<middleName>A.</middleName>
<lastName>April</lastName>
</name>
<gender>1</gender>
<birthDate>1970-02-22</birthDate>
<phone>530-730-0818</phone>
<email>JudyAApril@dayrep.com</email>
<contract id="9" startDate="2010-07-23" status="0">
<company>Corinthian Designs</company>
<department>Helpdesk</department>
<occupation>Secretary</occupation>
<workload>40</workload>
<extraWork id="1" startDate="2016-03-20" endDate="2016-03-22">
<company>Mr Fables</company>
<task>Data processor</task>
<totalHours>16</totalHours>
</extraWork>
</contract>
</employee>
<employee id="11456" available="true">
<personalCode>1157-02-XXXX</personalCode>
<image>https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS7I-9NIN5ys4TUSF61BYALQ_O_01w_XNNzQw5_mfueta0IQbvAqA</image>
<name>
<firstName>Tom</firstName>
<lastName>Johnson</lastName>
</name>
<gender>0</gender>
<birthDate>1972-02-02</birthDate>
<phone>124-548-998</phone>
<email>TomJohnson@dayrep.com</email>
<contract id="14" startDate="1995-11-23" status="0">
<company>Corinthian Designs</company>
<department>Analysis</department>
<occupation>Analyst</occupation>
<workload>40</workload>
<extraWork id="1" startDate="2016-03-20" endDate="2016-03-25">
<company>Mr Fables</company>
<task>Data processor</task>
<totalHours>30</totalHours>
</extraWork>
</contract>
</employee>
</employees>
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="employees">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="personalCode" type="xs:string" nillable="false"/>
<xs:element name="image" type="xs:string"/>
<xs:element name="name">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="middleName" type="xs:string" />
<xs:element name="lastName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="gender" type="xs:unsignedByte" nillable="false"/>
<xs:element name="birthDate" type="xs:date" />
<xs:element name="phone" type="xs:string" />
<xs:element name="email" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="contract">
<xs:complexType>
<xs:sequence>
<xs:element name="company" type="xs:string" />
<xs:element name="department" type="xs:string" />
<xs:element name="occupation" type="xs:string" />
<xs:element name="workload" type="xs:unsignedByte" />
<xs:element minOccurs="0" maxOccurs="unbounded" name="extraWork">
<xs:complexType>
<xs:sequence>
<xs:element name="company" type="xs:string" />
<xs:element name="task" type="xs:string" />
<xs:element name="totalHours" type="xs:unsignedByte" />
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
<xs:attribute name="startDate" type="xs:date" use="required" />
<xs:attribute name="endDate" type="xs:date" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
<xs:attribute name="startDate" type="xs:date" use="required" />
<xs:attribute name="endDate" type="xs:date" use="optional" />
<xs:attribute name="status" type="xs:unsignedByte" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
<xs:attribute name="available" type="xs:boolean" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT 1 (html)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Employees</title>
<style>
</style>
</head>
<body>
<h1>Employees</h1>
<table border ="1">
<tr>
<th>ID</th>
<th>First name</th>
<th>Last name</th>
<th>Company</th>
<th>Present occupation</th>
<th>Available for extra work</th>
<th>Image</th>
</tr>
<xsl:for-each select ="/employees/employee">
<tr>
<td><xsl:value-of select="@id"/></td>
<td><xsl:value-of select="name/firstName"/></td>
<td><xsl:value-of select="name/lastName"/></td>
<td>
<xsl:if test="contract/@endDate = 0"></xsl:if>
<xsl:value-of select="contract/company"/></td>
<td>
<xsl:value-of select="contract/occupation"/>
</td>
<td>
<xsl:choose>
<xsl:when test="@available = 'true' ">
Yes
</xsl:when>
<xsl:otherwise>
No
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="not(normalize-space(image)='')">
<img width="150" height="95" src="{image}"/>
</xsl:when>
<xsl:otherwise>
Image not available
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT 2 (xml)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:element name="contracts">
<xsl:for-each select="//employee">
<xsl:sort select="contract/@id"/>
<xsl:for-each select="contract">
<xsl:element name="contract">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="startDate">
<xsl:value-of select="@startDate"/>
</xsl:attribute>
<xsl:attribute name="endDate">
<xsl:value-of select="@endDate"/>
</xsl:attribute>
<xsl:attribute name="status">
<xsl:value-of select="@status"/>
</xsl:attribute>
<xsl:element name="employee">
<xsl:attribute name="id">
<xsl:value-of select="../@id"/>
</xsl:attribute>
<xsl:attribute name="available">
<xsl:value-of select="../@available"/>
</xsl:attribute>
<xsl:copy-of select="../name"/>
<xsl:copy-of select="../personalCode"/>
</xsl:element>
<xsl:copy-of select="*"></xsl:copy-of>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>