- 1 -
(arkusz dodatkowy: ostateczne odpowiedzi należy zakreślić w odpowiednich kratkach na formularzu głównym)
I.
Przeanalizuj zawartość podanych plików stock.xml, stock.dtd oraz stock.xsd. Plik stock.xml może zawierać wystąpienia
elementów cpu, ram, hdd, floppy i cdrom w dowolnej liczbie (w tym zero) i w dowolnej kolejności, a pliki stock.dtd i stock.xsd
mogą być użyte zamiennie do walidacji dokumentu stock.xml. Mając to na uwadze zaproponuj uzupełnienia białych pól (pól
szarych nie uzupełniamy, zakładając że wiemy co się w nich powinno znaleźć):
1.1 [2] Wybierz najlepszy wariant uzupełnienia dla pola_1.1 w pliku stock.dtd:
A)
B)
<!ELEMENT stock ((cpu)*,(ram)*,(hdd)*,(cdrom)*,floppy?)>
<!ELEMENT stock (cpu | ram | hdd | cdrom | floppy)+>
C)
D)
<!ELEMENT stock ((cpu)+,(ram)+,(hdd)+,(cdrom)+,(floppy)+)>
<!ELEMENT stock (cpu | ram | hdd | cdrom | floppy)*>
1.2 [2] Wybierz najlepszy wariant uzupełnienia dla pola_1.2 w pliku stock.xsd:
A)
B)
<xs:element name="stock">
<xs:complexType>
<xs:choice minOccurs=”1” maxOccurs="unbounded">
<xs:element name="stock">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
C)
D)
<xs:element name="stock">
<xs:complexType>
<xs:choice minOccurs=”0” maxOccurs="unbounded">
<xs:element
name="stock" minOccurs=”0” maxOccurs="unbounded">
<xs:complexType> <xs:choice >
1.3 [2] Wybierz najlepszy wariant uzupełnienia dla pól_1.3.* w pliku stock.xsd:
pole_
A)
B)
C)
D)
1.3.1
<xs:complexType >
<xs:complexType mixed="true"> <xs:complexType mixed=”true”> <xs:complexType >
1.3.2
--
--
<xs:attribute
name="clock"use="required"/>
<xs:attribute name="clock" />
1.3.3
<xs:attribute
name="clock"use="required"/>
<xs:attribute
name="clock" use="required"/>
--
--
II.
Plik inventory.xsl powinien transformować zawartość pliku stock.xml na tabelkę w HTML w postaci pokazanej na rysunku
inventory.jpg
. Wszystkie podzespoły z magazynu mają być w niej uporządkowane rosnąco względem ceny, (tj. zawartości
elementu price). Uzupełnij brakujące białe pola w pliku inventory.xsl:
2.1 [3] Wybierz najlepszy wariant uzupełnienia dla pola_2.1:
A)
B)
<xsl:apply-templates select="node()">
<xsl:sort select="./price/text()" data-type="number"/>
</xsl:apply-templates>
<xsl:apply-templates select="node()">
<xsl:sort select="././text()" data-type="number"/>
</xsl:apply-templates>
C)
D)
<xsl:apply-templates select="node()">
<xsl:sort select="text()" data-type="number"/>
</xsl:apply-templates>
<xsl:apply-templates select="node()">
<xsl:sort select="./price/text()"/>
</xsl:apply-templates>
2.2 [3] Wybierz najlepszy wariant uzupełnienia dla pola_2.2:
A)
B)
C)
D)
<td>
<xsl:value-of select="type/text()"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="./text()"/>
</td> <xsl:apply-templates/>
<td>
<xsl:value-of select="type/text()"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="./text()"/>
<xsl:apply-templates/> </td>
<td>
<xsl:value-of select="./text()"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="type/text()"/>
</td> <xsl:apply-templates/>
<td>
<xsl:value-of select="type/text()"/>
, <xsl:value-of select="./text()"/>
</td>
<xsl:apply-templates/>
III.
Plik make.xsl powinien definiować przekształcenie zawartośći pliku stock.xml na opis zestawu komputera PC w postaci
pliku myPC.xml. Zestaw powinien zapewniać najdroższy procesor, RAM powyżej 1GB, HDD powyżej 100GB i w cenie
poniżej 700 PLN, z CDROM o prędkości równej 52 i bez stacji dyskietek. Uzupełnij brakujące białe pola w pliku make.xsl:
- 2 -
3.1 [3] Wybierz najlepszy wariant uzupełnienia dla pola_3.1:
A)
B)
<xsl:sort select="./text()" data-type="number"
order="descending"/>
<xsl:choose>
<xsl:when test="position()=1">
<xsl:element name="processor">
<xsl:attribute name="clock">
<xsl:value-of select="@clock"/>
</xsl:attribute>
Procesor <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<xsl:sort select="price/text()"order="descending"/>
<xsl:choose>
<xsl:when test="price/position()=1">
<xsl:element name="processor">
<xsl:attribute name="clock">
<xsl:value-of select="@clock"/>
</xsl:attribute>
Procesor <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
C)
D)
<xsl:sort select="price/text()" data-type="number"
order="descending"/>
<xsl:choose>
<xsl:when test="position()=1">
<xsl:element name="processor">
<xsl:attribute name="clock">
<xsl:value-of select="@clock"/>
</xsl:attribute>
Procesor <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<xsl:sort select="price/text()" data-type="number"/>
<xsl:choose>
<xsl:when test="position()=1">
<xsl:element name="processor">
<xsl:attribute name="clock">
<xsl:value-of select="@clock"/>
</xsl:attribute>
Procesor <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
3.2 [3] Wybierz najlepszy wariant uzupełnienia dla pola_3.2:
A)
B)
<xsl:if test="number(substring-before(text(),' ')) < '700'">
<xsl:if test="number(././text()) > '100'">
<xsl:element name="disc">
HDD <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:if>
</xsl:if>
<xsl:if test="number(substring-before(text(),' ')) > '100'">
<xsl:if test="number(././text()) < '700'">
<xsl:element name="disc">
HDD <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:if>
</xsl:if>
C)
D)
<xsl:if test="number(substring-before(text(),' ')) > '100'">
<xsl:if test="number(./price/text()) < '700'">
<xsl:element name="disc">
HDD <xsl:value-of select="text()"/>;
</xsl:element>
</xsl:if>
</xsl:if>
<xsl:if test="number(substring-before(text(),' ')) > '100'">
<xsl:element name="disc">
HDD <xsl:value-of select=".[number(./price/text()) < '700']"/>;
</xsl:element>
</xsl:if>
IV.
Plik print.xsl powinien definiować przekształcenie zawartości pliku stock.xml na dokument print.pdf, składający się z
dwóch stron: okladka z tytułem dokumentu i adresem firmy, oraz strona z listą artykułów w grupach jak podano we
wspomnianym dokumencie (artykuły w każdej grupie posortowane leksykograficznie wg swojej ceny). Uzupełnij brakujące
białe pola w pliku print.xsl:
4.1 [2] Wybierz najlepszy wariant uzupełnienia dla pól_4.1.*:
pole_
A)
B)
C)
D)
4.1.1
<fo:flow
flow-name="xsl-region-after">
<fo:flow
flow-name="xsl-region-body">
<fo:flow
flow-name="xsl-region-before">
<fo:block
block-name="xsl-region-body">
4.1.2
<fo:block text-align="center"
font-style="italic"
font-size="24pt" color="green"
space-after="2cm" >
<fo:block text-align="center"
font-style="italic"
font-size="24pt" color="green"
space-before="2cm" >
<fo:block text-align="center"
font-style="italic"
font-size="24pt" color="green" >
<fo:block text-align="center"
font-style="italic"
font-size="24pt" color="green"
space-before="2cm" >
- 3 -
4.2 [2] Wybierz najlepszy wariant uzupełnienia dla pola_4.2.*:
pole_
A)
B)
C)
D)
4.2.1
<xsl:call-template
name="price"/>;
<xsl:apply-templates
select="price"/>
<xsl:value-of select="price"/> <xsl:apply-templates
select="price"/>
4.2.2
<fo:block>
--
<fo:flow color=”blue”>
<fo:block>
4.2.3
<fo:block color=”blue”>
$<xsl:value-of select="."/>
</fo:block>
</fo:block>
<fo:inline color="blue">
$<xsl:value-of select="."/>
</fo:inline>
$<xsl:value-of select="."/>
</fo:flow>
<fo:block color=”blue”>
$<xsl:value-of select="."/>
</fo:block>
</fo:block>
<?xml version="1.0" encoding="UTF-16LE"?>
<!ELEMENT make (#PCDATA)>
<!ELEMENT cpu (#PCDATA|make|price)*>
<!ATTLIST cpu clock CDATA #REQUIRED>
<!ELEMENT type (#PCDATA)>
<!ELEMENT ram (#PCDATA|type|price)*>
<!ELEMENT hdd (#PCDATA|price)*>
<!ELEMENT cdrom (#PCDATA|price)*>
<!ELEMENT price (#PCDATA)>
<!ELEMENT floppy (#PCDATA|price)*>
<!
pole_1.1:??
stock.dtd:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema ... >
pole_1.2:??
<xs:element ref="cpu" ... />
<xs:element ref="ram" ... />
<xs:element name="hdd" ... />
<xs:element name="cdrom" ... />
<xs:element name="floppy" .../>
...
</xs:element>
<xs:element name="cpu">
pole_1.3.1:??
<xs:sequence>
<xs:element name="make" type="xs:NCName"/>
<xs:element ref="price"/>
pole_1.3.2:??
</xs:sequence>
pole_1.3.3:??
</xs:complexType>
</xs:element>
<xs:element name="ram">
...
</xs:element>
...
</xs:schema>
stock.xsd:
<stock>
<cpu clock="2.4 GHz">Athlon
<make>AMD</make>
<price>1200</price>
</cpu>
<ram>2 GB>
<type>DIMM 240-pin</type>
<price>500</price>
</ram>
<cpu clock="3,4 GHz">Pentium-4
<make>Intel</make>
<price>1120</price>
</cpu>
<hdd>80 GB
<price>250</price>
</hdd>
<ram>1 GB
<type>DIMM 200-pin</type>
<price>380</price>
</ram>
<hdd>320 GB
<price>600</price>
</hdd>
<cpu clock="2.4 GHz"> Core-2 Duo E6600
<make>Intel</make>
<price>1350</price>
</cpu>
<hdd>980 GB
<price>1320</price>
</hdd>
<cdrom>52x
<price>120</price>
</cdrom>
<floppy>Teac
<price>60</price>
</floppy>
</stock>
stock.xml
- 4 -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet …>
<xsl:output method="html"/>
<xsl:template match="/">
<html><head>
<title>Spis inwentarza</title></head>
<body><table><tbody>
<tr><th>Asortyment</th>
<th>Opis</th>
<th>Cena</th></tr>
<xsl:apply-templates/>
</tbody></table>
</body></html>
</xsl:template>
<xsl:template match="stock">
pole_2.1:??
</xsl:template>
<xsl:template match="cpu">
<tr><td>Procesor</td>
<td>…</td>
<xsl:apply-templates/>
</tr>
</xsl:template>
<xsl:template match="ram">
<tr><td>Pamięć</td>
pole_2.2:??
</tr>
</xsl:template>
<xsl:template match="hdd">
<tr>…</tr>
</xsl:template>
<xsl:template match="cdrom">
<tr>…</tr>
</xsl:template>
<xsl:template match="floppy">
<tr>…</tr>
</xsl:template>
<xsl:template match="price">
<td>…</td>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
inventory.xsl:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" ... >
<xsl:output ... />
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="stock">
<xsl:element name="myPC">
<xsl:call-template name="CPU"/>
<xsl:call-template name="RAM"/>
<xsl:call-template name="HDD"/>
<xsl:call-template name="CDROM"/>
</xsl:element>
</xsl:template>
<xsl:template name="CPU">
<xsl:for-each select="cpu">
pole_3.1:??
</xsl:for-each>
</xsl:template>
<xsl:template name="RAM">
<xsl:for-each select="ram">
...
</xsl:for-each>
</xsl:template>
<xsl:template name="HDD">
<xsl:for-each select="hdd">
pole_3.2:??
</xsl:for-each>
</xsl:template>
<xsl:template name="CDROM">
<xsl:for-each select="cdrom">
...
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
make.xsl
- 5 -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myPC SYSTEM "myPC.dtd">
<myPC>
<processor clock="2.4 GHz">
Procesor Core-2 Duo E6600;
</processor>
<memory type="DIMM">
RAM 2 GB;
</memory>
<disc>
HDD 320 GB;
</disc>
<cdrom speed="52">
CDROM 52x;
</cdrom>
</myPC>
myPC.xml
inventory.jpg:
- 6 -
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl= “...” xmlns:fo="..." ...>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
<fo:page-sequence master-name="okladka">
pole_4.1.1:??
<fo:block text-align="center" font-size="30pt">
Lista dostepnych artykulow
</fo:block>
pole_4.1.2:??
Magazyn czesci komputerowych
</fo:block>
<fo:block text-align="center" font-size="12pt" color="grey" >
Gdansk, ul.Kolokwialna 1
</fo:block>
...
</fo:page-sequence>
<fo:page-sequence master-name="strona" ... >
...
</fo:page-sequence>
</fo:root>
</xsl:template>
<xsl:template match="stock">
...
</xsl:template>
<xsl:template match="ram | hdd | floppy | cdrom">
...
</xsl:template>
<xsl:template match="cpu">
<fo:block space-after="3mm" margin-left="1cm">
<xsl:value-of select="make"/><xsl:text> </xsl:text>
<xsl:value-of select="text()"/>
(<xsl:value-of select="@clock"/>)
pole_4.2.1:??
</fo:block>
</xsl:template>
<xsl:template match="price">
pole_4.2.2:??
<fo:leader leader-length="40mm"
leader-pattern="dots" rule-thickness="2pt"/>
pole_4.2.3:??
</xsl:template>
<xsl:template match="type">
...
</xsl:template>
</xsl:stylesheet>
print.xsl
print.pdf