background image

- 1 - 

(arkusz dodatkowy: ostateczne odpowiedzi należy zakreślić w odpowiednich kratkach na formularzu głównym) 

 

I.

 Przeanalizuj zawartość podanych plików stock.xmlstock.dtd oraz stock.xsd. Plik stock.xml może zawierać wystąpienia 

elementów cpuramhddfloppy 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:  

background image

- 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(),' ')) &lt; '700'"> 
  <xsl:if test="number(././text()) &gt; '100'"> 
    <xsl:element name="disc"> 
     HDD <xsl:value-of select="text()"/>;  
    </xsl:element> 
  </xsl:if> 
</xsl:if> 

<xsl:if test="number(substring-before(text(),' ')) &gt; '100'"> 
  <xsl:if test="number(././text()) &lt; '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(),' ')) &gt; '100'"> 
  <xsl:if test="number(./price/text()) &lt; '700'"> 
    <xsl:element name="disc"> 
    HDD <xsl:value-of select="text()"/>;  
    </xsl:element> 
  </xsl:if> 
</xsl:if> 

<xsl:if test="number(substring-before(text(),' ')) &gt; '100'"> 
  <xsl:element name="disc"> 
    HDD <xsl:value-of select=".[number(./price/text()) &lt; '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" > 

 

background image

- 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 

background image

- 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 

background image

- 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:

 

background image

- 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