• Nenhum resultado encontrado

Gestão e Tratamento de Informação

N/A
N/A
Protected

Academic year: 2021

Share "Gestão e Tratamento de Informação"

Copied!
11
0
0

Texto

(1)








1º
semestre






Mini‐Projecto
1


Entrega
a
14
de
Outubro
de
2010
através
do
sistema
IST/Fénix


Os
 dois
 URLs
 que
 se
 listam
 de
 seguida
 correspondem
 a
 dois
 documentos
 XML


codificando
 informação
 sobre
 programas
 de
 televisão.
 Note‐se
 que
 os
 dois


documentos
XML
codificam
informação
semelhante,
embora
de
formas
diferentes.


1.

http://gibson.tagus.ist.utl.pt/~bmartins/tv‐shows‐info.xml

2.

http://gibson.tagus.ist.utl.pt/~bmartins/new‐tv‐shows‐info.xml

Utilizando
o
software
para
processamento
de
documentos
XML,
introduzido
nas
aulas


de
laboratório,
resolva
os
seguintes
exercícios
práticos.


Exercício
1


Escreva
 o(s)
 documento(s)
 XSD
 (XML
 Schema
 Definition)
 que
 permite(m)
 validar
 o


documento
XML
de
nome
tv‐shows‐info.xml.
Tenha
em
atenção
que
este
documento


XML
faz
utilização
de
dois
espaços
de
nomes
diferentes
(i.e.,
dois
namespaces).
Tenha


ainda
em
especial
atenção
os
seguintes
factos:


• O
atributo
score
do
elemento
<review>
deve
ser
um
número
real.


• Os
atributos
episodes
dos
elementos
<director>,
<actor> e
<writer>

devem
ser
números
inteiros
positivos.


• Os
 elementos
 correspondentes
 aos
 criativos
 dos
 programas
 de
 televisão
 (e.g.,
 os


elementos
<directors>,
<actors>
ou
<writers>)
são
opcionais
e
podem


ser
apresentados
em
qualquer
ordem.


• O
 conteúdo
 textual
 do
 elemento
 <sinopsis>
 têm
 um
 tamanho
 máximo
 de


10.000
caracteres.


• O
 conteúdo
 textual
 dos
 atributos
 period
 dos
 elementos
 <director>,


<actor> e
<writer>,
quando
definidos,
devem

obrigatoriamente
obedecer
a


um
 padrão
 que
 corresponde
 a
 duas
 sequências
 de
 quatro
 algarismos
 separadas


pelo
símbolo
“-“
ou,
em
alternativa,
a
uma
única
sequência
de
quatro
algarismos.


• O
 conteúdo
 textual
 dos
 atributos
 id
 dos
 elementos
 <director>,
 <actor>
 e


<writer>,
 caso
 estejam
 definidos,
 devem
 ser
 únicos
 dentro
 de
 cada
 elemento


<directors>,
<actors>
e
<writers>
(i.e.,
ao
representar
os
programas
de


televisão
apenas
se
descreve
cada
actor,
escritor
ou
realizador
uma
única
vez).


• O
 atributo
 reviewer-id
 
 do
 elemento
 <author>
 é
 obrigatório
 e
 o
 seu


conteúdo
corresponde
sempre
a
um
URL
bem
formado.


• O
 atributo sentiment-analysis
 do
 elemento <review>
 corresponde
 a


uma
cadeia
de
caracteres
com
um
de
dois
valores
possíveis,
“pos”
ou
“neg”.


• Os
 atributos
 position
 dos
 elementos
 <director>,
 <actor>
 e
 <writer>

são
opcionais
e,
quando
presentes,
correspondem
sempre
a
números
inteiros.


• Para
cada
programa,
o
elemento
<company>
repete‐se
no
máximo
5
vezes.


(2)

Exercício
2


Usando
o
documento
XML
de
nome
tv‐shows‐info.xml,
resolva
as
seguintes
alíneas:


1.1
–
Apresente
expressões
XPath
que
permitam
responder
às
seguintes
necessidades


de
informação
com
base
no
documento
XML:


a. Seleccionar
o
título
de
todas
as
séries
onde
“Chris
Carter”
escreveu
pelo
menos


um
episódio
ou
onde
“David
Duchovny”
participa
como
actor.


b. Seleccionar
 o
 nome
 dos
 criadores
 de
 todas
 as
 séries
 onde
 a
 média
 das


pontuações
dadas
pelos
espectadores
seja
superior
a
9.5.


c. Quais
os
criadores
das
séries
de
TV
do
género
de
comédia,
cuja
produção
esteja
a


cargo
da
empresa
“20th
Century
Fox
Television”.


1.2
 –
 Apresente
 expressões
 XQuery
 FLWOR
 que
 permitam
 responder
 às
 seguintes


necessidades
de
informação
com
base
no
documento
XML:


a. Retornar
o
título
de
todas
as
séries
de
TV
em
que
um
dos
criadores
seja
também


o
criador
da
série
“The
Simpsons”.


b. Retornar
os
realizadores
distintos,
ordenados
pela
pontuação
média
das
reviews


para
 as
 suas
 séries
 de
 TV.
 O
 resultado
 da
 XQuery
 desenvolvida
 neste
 exercício


deve
 incluir
 os
 nomes
 dos
 diferentes
 realizadores,
 em
 conjunto
 com
 as


respectivas
pontuações
médias.


c. Para
cada
realizador
distinto,
retornar
o
número
de
séries
de
TV
diferentes
em


que
ele
estive
envolvido
(enquanto
realizador),
em
conjunto
com
o
número
de


actores
distintos
com
quem
ele
trabalhou.
O
resultado
deve
ser
apresentado
no


formato
que
se
exemplifica
abaixo,
onde
os
nomes
dos
realizadores
surgem
por


ordem
descendente
do
número
de
séries
por
si
realizadas.


<directors>

<director name="David Nutter" num-shows="6" num-actors="1611"/>

<director name="Michael Zinberg" num-shows="5" num-actors="716"/>

<!-- lista de outros realizadores -->

</directors>

Exercício
3


Escreva
uma
XSLT
para
converter
o
documento
XML
de
nome
tv‐shows‐info.xml
num


documento
XHTML
contendo
uma
tabela
com
os
seguintes
campos:


Show
name
 Avg.
score


Main
writer


Lead
actor


sinopsis


SHOW
X


2.2


Writer
Name


Actor
Name


This
show
is


...


A
 XSLT
 que
 efectua
 a
 transformação
 para
 o
 formato
 XHTML
 deve
 seleccionar,
 do


documento

XML
de
origem,
apenas
os
programas
de
televisão
associados
à
empresa


(3)

produtora
 “Imagine
 Entertainment”.
 Na
 coluna
 “Avg.
 score”
 deve‐se
 apresentar
 a


pontuação
 média
 das
 várias
 reviews
 feitas
 sobre
 cada
 programa.
 Nas
 colunas
 “Main


writer”
 e
 “Lead
 actor”
 deve‐se
 apresentar,
 respectivamente
 para
 cada
 show,
 os


escritores
e
os
actores
que
estiveram
envolvidos
em
mais
episódios.


A
XSLT
deve
ainda
apresentar
o
nome
do
programa
de
televisão
em
maiúsculas
e
os


nomes
 dos
 actores
 e
 escritores
 de
 forma
 capitalizada
 (i.e.,
 com
 a
 primeira
 letra
 de


cada
 palavra
 em
 maiúsculas).
 Finalmente,
 a
 coluna
 sinopsis
 deve
 apresentar
 um


resumo
 do
 programa
 de
 televisão
 com
 um
 máximo
 de
 200
 caracteres,
 colocando
 a


cadeira
de
caracteres
“...”
sempre
que
o
texto
original
tiver
de
ser
reduzido.


Exercício
4


Apresente
uma
expressão
XQuery
que
aceda
aos
dados
do
documento
XML
com
nome


new‐tv‐shows‐info.xml
(i.e.,
o
segundo
documento
XML
de
exemplo
indicado
no
início


do
 enunciado
 deste
 mini‐projecto)
 e
 que
 produza
 como
 resultado
 um
 novo


documento
XML
que,
codificando
a
mesma
informação,
seja
bem
formado
e
válido
de


acordo
com
a
XSD
desenvolvida
no
Exercício
1.


A
transformação
deve
preservar
a
informação
original
ao
máximo.
No
entanto,
todos


os
 elementos
 e
 atributos
 do
 formato
 XML
 original
 (i.e.,
 a
 representação
 XML
 do


documento
 new‐tv‐shows‐info.xml)
 que
 contenham
 informação
 que
 não
 é
 usada
 no


formato
definido
pela
XSD
deverão
ser
ignorados
aquando
da
transformação.


Exercício
5


Efectue
 a
 criação
 de
 uma
 base
 de
 dados
 XML
 através
 do
 software
 introduzido
 nas


aulas
 de
 laboratório
 (i.e.,
 o
 Qizx).
 De
 seguida,
 efectue
 o
 carregamento
 dos
 dados


contidos
no
documento
XML
de
nome
tv‐shows‐info.xml,
para
a
base
de
dados
(BD).


Finalmente,
apresente
instruções
XQuery
Update
para
cada
um
dos
seguintes
casos:


1. Modificar
 o
 documento
 XML
 na
 BD
 por
 forma
 a
 remover
 os
 elementos
 e


atributos
que
são
facultativos
de
acordo
com
a
XSD
desenvolvida
no
Exercício


1.
 Note‐se
 que
 uma
 solução
 100%
 correcta
 para
 este
 exercício
 deve
 obter


dinamicamente
os
nomes
dos
elementos
que
são
facultativos.


2. Modificar
o
documento
XML
na
BD
por
forma
a
representar
as
pontuações
de


review
numa
escala
de
0
a
5,
em
lugar
de
numa
escala
entre
0
e
10.


3. Modificar
o
documento
XML
na
BD
por
forma
a
que
todos
os
nomes
de
actores,


escritores
ou
realizadores
sejam
apresentados
em
maiúsculas.


4. Modificar
o
documento
XML
na
BD
por
forma
a
adicionar
um
novo
elemento


XML
 que
 codifique
 a
 informação
 sobre
 o
 programa
 de
 televisão
 descrito
 na


seguinte
 tabela.
 Considere
 que
 todos
 os
 criativos
 (i.e.,
 actores,
 escritores
 e


realizadores)
estiveram
envolvidos
na
totalidade
dos
episódios.


(4)

Nome
do
programa


Spartacus:
Blood
and
Sand


Empresa
produtora


Starz,



Criador


Steven
S.
DeKnight


Escritores


Aaron
Helbing,
Todd
Helbing


Realizadores


Michael
Hurst,
Rick
Jacobson


Actores


Andy
Whitfield,
Lucy
Lawless,
John


Hannah,
 Peter
 Mensah,
 Manu


Bennett


Período
exibição


2010
‐
1
temporada
apenas


Episódios


13


Sinopse


The
series
follows
the
life
of
the


historical
figure
of
Spartacus


(played
by
Andy
Whitfield),
a


Thracian
gladiator
who
from
73
to


71
BC
led
a
major
slave
uprising


against
the
Roman
Republic.



Género


Action,
Drama,
Historical


Entrega
do
mini‐projecto
de
Gestão
e
Tratamento
de
Informação


A
resolução
do
mini‐projecto
deve
ser
entregue
via
Fénix
sob
a
forma
de
um
ficheiro


com
a
extensão
.zip,
até
às
07:59
do
dia
estipulado
para
a
entrega
(i.e.,
antes
da
aula


teórica
da
disciplina
de
Gestão
e
Tratamento
de
Informação).



O
 ficheiro
 .zip
 deve
 conter
 os
 ficheiros
 de
 texto
 com
 as
 soluções
 (e.g.,
 documentos


XML,
XSD,
XSLT
ou
ficheiros
de
texto
com
as
interrogações
XPath/XQuery)
para
cada


uma
das
perguntas/alíneas
individuais
deste
enunciado.


Na
aula
de
teórica
logo
após
a
entrega
electrónica,
deve
ainda
ser
entregue
ao
corpo


docente
 um
 relatório
 com
 a
 resolução
 das
 várias
 perguntas,
 segundo
 o
 template


fornecido
 na
 página
 da
 disciplina.
 O
 relatório
 deve
 ter
 uma
 folha
 de
 rosto
 ou
 um


cabeçalho
identificando
claramente
qual
o
número
do
grupo
e
quais
os
números
 de


aluno
 dos
 3
 elementos
 do
 grupo.
 Para
 cada
 pergunta,
 e
 alem
 de
 listar
 a
 respectiva


solução
para
o
problema,
o
relatório
deve
ainda
indicar
claramente
qual
o
nome
do


ficheiro
que
contem
a
sua
resolução.


Não
 serão
 aceites
 trabalhos
 entregues
 via
 e‐mail,
 nem
 trabalhos
 onde
 o
 relatório


não
obedece
às
regras
estipuladas.


(5)

Resoluções
para
as
perguntas
do
mini‐projecto
1


Pergunta
1


A
 solução
 desta
 pergunta
 envolve
 o
 desenvolvimento
 de
 dois
 documentos
 XML


Schema,
 um
 com
 os
 elementos
 XML
 correspondentes
 ao
 namespace
 com
 URL


http://gibson.tagus.ist.utl.pt/~bmartins/namespace‐reviews
e
outro
com
os
elementos


do
namespace
http://gibson.tagus.ist.utl.pt/~bmartins/namespace‐tvshows.


Documento
reviews.xsd

<?xml version="1.0" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" xmlns:ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" xmlns:ns1="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows">

<xs:element name="text" type="xs:string"/> <xs:element name="author">

<xs:complexType mixed="true" >

<xs:attribute name="reviewer-id" type="xs:anyURI" use="required"/> </xs:complexType> </xs:element> <xs:element name="review"> <xs:complexType > <xs:sequence> <xs:element ref="ns2:author"/> <xs:element ref="ns2:text" /> </xs:sequence> <xs:attribute name="sentiment-analysis" > <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="pos"/> <xs:enumeration value="neg"/> </xs:restriction> </xs:simpleType> </xs:attribute>

<xs:attribute name="score" type="xs:double" use="required"/> </xs:complexType> </xs:element> <xs:element name="reviews"> <xs:complexType> <xs:sequence> <xs:element ref="ns2:review" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

Documento
tvshows.xsd

(6)

<?xml version="1.0" ?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows" xmlns:ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" xmlns:ns1="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"> <xs:import namespace="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" schemaLocation="exercicio1-2.xsd"/> <xs:element name="sinopsis"> <xs:simpleType >

<xs:restriction base="xs:string"><xs:maxLength value="10000"/></xs:restriction> </xs:simpleType> </xs:element> <xs:simpleType name="periodType"> <xs:restriction base="xs:string" > <xs:pattern value="[0-9]{4}(\-[0-9]{4})?"/> </xs:restriction> </xs:simpleType> <xs:element name="companies"> <xs:complexType> <xs:sequence>

<xs:element name="company” minOccurs="0" maxOccurs="5"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="id" type="xs:anyURI"/>

</xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="creator"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="id" type="xs:anyURI" use="required"/> </xs:complexType>

</xs:element>

<xs:element name="creators"> <xs:complexType>

<xs:sequence>

<xs:element ref="ns1:creator" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="directors"> <xs:complexType> <xs:sequence>

<xs:element ref="ns1:director" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence>

</xs:complexType>

<xs:unique name="directorId">

<xs:selector xpath=".//ns1:directors/*"/><xs:field xpath="@id"/> </xs:unique>

</xs:element>

<xs:element name="director"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="position" type="xs:integer"/>

<xs:attribute name="episodes" type="xs:nonNegativeInteger"/> <xs:attribute name="period" type="ns1:periodType" />

<xs:attribute name="id" type="xs:anyURI" use="required" /> </xs:complexType>

(7)

<xs:element name="writers"> <xs:complexType>

<xs:sequence>

<xs:element ref="ns1:writer" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence>

</xs:complexType>

<xs:unique name="writerId">

<xs:selector xpath=".//ns1:writers/*"/><xs:field xpath="@id"/> </xs:unique>

</xs:element>

<xs:element name="writer"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="position" type="xs:integer"/>

<xs:attribute name="episodes" type="xs:nonNegativeInteger"/> <xs:attribute name="period" type="ns1:periodType"/>

<xs:attribute name="id" type="xs:anyURI" use="required"/> </xs:complexType>

</xs:element>

<xs:element name="actors"> <xs:complexType>

<xs:sequence>

<xs:element ref="ns1:actor" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence>

</xs:complexType>

<xs:unique name="actorId">

<xs:selector xpath=".//ns1:actors/*"/><xs:field xpath="@id"/> </xs:unique>

</xs:element>

<xs:element name="actor"> <xs:complexType>

<xs:attribute name="name" type="xs:string" use="required"/> <xs:attribute name="position" type="xs:integer"/>

<xs:attribute name="episodes" type="xs:nonNegativeInteger" /> <xs:attribute name="period" type="ns1:periodType"/>

<xs:attribute name="id" type="xs:anyURI"/> </xs:complexType>

</xs:element>

<xs:element name="genres"> <xs:complexType>

<xs:sequence>

<xs:element name="genre minOccurs="0" maxOccurs="unbounded">

<xs:complexType><xs:attribute name="name" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="tvshows"> <xs:complexType> <xs:sequence>

<xs:element name="tvshow" minOccurs="0" maxOccurs="unbounded"> <xs:complexType>

<xs:sequence>

<xs:element name="show-title" type="xs:string"/> <xs:element ref="ns1:companies"/>

<xs:element ref="ns1:creators"/>

<xs:choice minOccurs="0" maxOccurs="3">

<xs:element ref="ns1:directors" minOccurs="0" maxOccurs="1"/> <xs:element ref="ns1:writers" minOccurs="0" maxOccurs="1"/> <xs:element ref="ns1:actors" minOccurs="0" maxOccurs="1"/> </xs:choice>

<xs:element ref="ns1:sinopsis"/> <xs:element ref="ns1:genres"/>

<xs:element ref="ns2:reviews" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

(8)

Pergunta
2.1.A


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml")//

ns:tvshow[.//ns:writer/@name="Chris Carter" or

.//ns:actor/@name="David Duchovny"]/ns:show-title/text()

Pergunta
2.1.B


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml")//

ns:tvshow[avg(.//ns2:review/@score) > 9.5]//ns:creator/data(@name)

Pergunta
2.1.C


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; distinct-values(doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml")// ns:tvshow[.//ns:company/@name="20th Century Fox Television"

and .//ns:genre/@name="Comedy"]//ns:creator/@name)

Pergunta
2.2.A


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; let $doc := doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml")

for $a in $doc//ns:tvshow[.//ns:show-title="The Simpsons"]//ns:creator for $b in $doc//ns:tvshow[.//ns:creator/@name=$a/@name]//ns:show-title return $b

Pergunta
2.2.B


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; let $doc := doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml")

for $a in distinct-values($doc//ns:tvshow//ns:director/@name)

let $b := avg ( $doc//ns:tvshow[.//ns:director/@name=$a]//ns2:review/@score ) order by $b descending

return <director name="{$a}" score="{$b}" />

Pergunta
2.2.C


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; <directors>

{

let $doc := doc("http://gibson.tagus.ist.utl.pt/~bmartins/tv-shows-info.xml") for $a in distinct-values($doc//ns:director/@name)

let $c1 := count ( $doc//ns:tvshow[.//ns:director/@name = $a] ) let $c2 := count ( distinct-values (

$doc//ns:tvshow[.//ns:director/@name = $a]//ns:actor/@name)) order by $c1 descending

return <director name="{$a}" num-shows="{$c1}" num-actors="{$c2}" /> }

(9)

Pergunta
3


<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows" xmlns:ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" version="2.0"> <xsl:template match="/"> <html> <head></head> <body> <table border="1"> <tr> <th>Show Name</th> <th>Avg Score</th> <th>Main Writer</th> <th>Lead Actor</th> <th>Sinopsis</th> </tr> <xsl:for-each select="/ns:tvshows/ns:tvshow[ns:companies/ns:company/@name = 'Imagine Entertainment']"> <tr> <td style="text-transform: uppercase;"> <xsl:value-of select="ns:show-title/text()"/> </td> <td><xsl:value-of select="sum(./ns2:reviews/ns2:review/@score) div count(./ns2:reviews/ns2:review)"/> </td> <td style="text-transform: capitalize;"> <xsl:for-each select="./ns:writers/ns:writer">

<xsl:sort data-type="number" order="descending" select="@episodes"/> <xsl:if test="position()=1"> <xsl:value-of select="data(@name)"/> </xsl:if> </xsl:for-each> </td> <td style="text-transform: capitalize;"> <xsl:for-each select="./ns:actors/ns:actor">

<xsl:sort data-type="number" order="descending" select="@episodes"/> <xsl:if test="position()=1"> <xsl:value-of select="data(@name)"/> </xsl:if> </xsl:for-each> </td> <td>

<xsl:if test="string-length(string(./ns:sinopsis)) &lt;= 200"> <xsl:value-of select="./ns:sinopsis/text()"/>

</xsl:if>

<xsl:if test="string-length(string(./ns:sinopsis)) &gt; 200">

<xsl:value-of select="concat(substring(./ns:sinopsis/text(), 0, 200),'...')"/> </xsl:if> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

(10)

Pergunta
4


<tvshows xmlns="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows" xmlns:ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"> { for $d in doc("http://gibson.tagus.ist.utl.pt/~bmartins/new-tv-shows-info.xml")//tvshow return <tvshow>

<show-title> { data($d/@title) } </show-title> <companies/>

<creators>{

for $i in $d//creative[./@title = "creator"]

return <creator name="{data($i/@name)}" id="{data($i/@id)}"/> }</creators>

<writers>{

for $o in $d//creative[./@title = "writer"]

return <writer name="{data($o/@name)}" id="{data($o/@id)}"/>} </writers>

<actors>{

for $o in $d//creative[./@title = "actor"]

return <actor name="{data($o/@name)}" id="{data($o/@id)}"/>} </actors>

<directors>{

for $o in $d//creative[./@title = "director"]

return <director name="{data($o/@name)}" id="{data($o/@id)}"/>} </directors>

<genres>{

for $p in $d//show-genre return <genre name="{ data( $p/@name ) }"/>} </genres>

<sinopsis>{$d//summary/text()}</sinopsis> <ns2:reviews>{

for $y in $d//review return

<ns2:review score="{$y/@score}" >

<ns2:author reviewer-id="{ $y/@reviewer-id }">{data($y/@reviewer-name)}</ns2:author>

<ns2:text> {$y/text()} </ns2:text> </ns2:review> }</ns2:reviews> </tvshow> } </tvshows>

Pergunta
5.1


declare namespace ns = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2 = "http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; let $e := for $d in (doc("tvshows.xsd") ,

doc("reviews.xsd"))

//xs:element[./@minOccurs = "0"] return ( $d/@ref , $d/@name ) let $a := for $d in (doc("tvshows.xsd") , doc("reviews.xsd"))

//xs:attribute[not(./@use = "required")] return ($d/@ref,$d/@name) for $ndn in (xs:string($e) , xs:string($a)) ,

$nd in collection("/")/doc("tv-shows-info.xml")//ns:tvshow//node() where local-name($ndn) = $nd

return delete node $t

Pergunta
5.2


declare namespace ns="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; for $x in collection("/")/doc("tv-shows-info.xml")//ns2:review

(11)

Pergunta
5.3


declare namespace ns="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows"; declare namespace ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews"; declare updating function local:converte-maiusculas( $nd ) {

replace value of node $nd with upper-case($nd) }; ( for $v in collection("/")/doc("tv-shows-info.xml")//ns:writers/ns:writer/@name return local:converte-maiusculas($v) , for $z in collection("/")/doc("tv-shows-info.xml")//ns:actors/ns:actor/@name return local:converte-maiusculas($z) , for $y in collection("/")/doc("tv-shows-info.xml")//ns:directors/ns:director/@name return local:converte-maiusculas($y) )

Pergunta
5.4


declare namespace ns="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-tvshows" declare namespace ns2="http://gibson.tagus.ist.utl.pt/~bmartins/namespace-reviews" for $x in collection("/")/doc("tv-shows-info.xml")//ns:tvshows return insert node <tvshow>

<show-title>Spartacus: Blood and Sand</show-title> <companies>

<company name="Starz"/> </companies>

<creators>

<creator name="Steven S. DeKnight"/> </creators>

<writers>

<writer name="Aaron Helbing" episodes="13" period="2010"/> <writer name="Todd Helbing" episodes="13" period="2010"/> </writers>

<directors>

<director name="Michael Hurst" episodes="13" period="2010" /> <director name="Rick Jacobson" episodes="13" period="2010"/> </directors>

<actors>

<actor name="Andy Whitfield" episodes="13" period="2010"/> <actor name="Lucy Lawless" episodes="13" period="2010"/> <actor name="John Hannah" episodes="13" period="2010"/> <actor name="Peter Mensah" episodes="13" period="2010"/> <actor name="Manu Bennett" episodes="13" period="2010"/> </actors>

<sinopsis>The series follows the life of the historical figure of Spartacus (played by Andy Whitfield), a Thracian gladiator who from 73 to 71 BC led a major slave uprising against the Roman Republic.</sinopsis>

<genres> <genre name="Action"/> <genre name="Drama"/> <genre name="Historical"/> </genres> </tvshow> as last into $x

Referências

Documentos relacionados

O DIRETOR GERAL DO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA GOIANO - CAMPUS IPORÁ, no uso de suas atribuições legais, conferida pela Portaria/IF Goiano nº 22,

Promovido pelo Sindifisco Nacio- nal em parceria com o Mosap (Mo- vimento Nacional de Aposentados e Pensionistas), o Encontro ocorreu no dia 20 de março, data em que também

Como irá trabalhar com JavaServer Faces voltado para um container compatível com a tecnologia Java EE 5, você deverá baixar a versão JSF 1.2, a utilizada nesse tutorial.. Ao baixar

Os elementos caracterizadores da obra são: a presença constante de componentes da tragédia clássica e o fatalismo, onde o destino acompanha todos os momentos das vidas das

Organiza, em duas colunas, os nomes seguintes, conforme sejam concretos ou abstratos:.. Saudade, hospital, semana, montanha, fama, paixão, escola, desporto, orgulho, felicidade,

1 - Específicos: conforme orientação da Vigilância Epidemiológica (isolamento viral ou sorologia).. 2 - Inespecífico: Hemograma com contagem de plaquetas (auxiliar

Conforme a classificação de risco, diante de um caso suspeito de febre de Chikungunya, o hemograma deve ser solicitado à critério médico para as formas brandas da doença e

- Sugestiva de estar relacionada à infecção congênita por STORCH: caso notificado como microcefalia E que apresente diagnóstico laboratorial específico e conclusivo para