Escolar Documentos
Profissional Documentos
Cultura Documentos
V3
Baseado nos slides do professor Paulo Trigo Todas as alteraes so da responsabilidade do professor Antnio Tefilo e do professor Diogo Remdios
1
O que o XSD?
... o XSD permite especificar tudo o que o DTD permite e bastante mais!
suporta tipos de dados e derivao (o DTD apenas suporta texto) suporta integrao com espaos de nome (o DTD no suporta)
... assim, a tecnologia XML aplica-se toda ao XSD (e.g XPath, XQuery) ganho muito importante: tratamento uniforme da estrutura e dos dados...
quando a sua estrutura descrita por esse esquema ... diz-se documento instncia ou simplesmente instncia
se respeitar as regras da linguagem XML e.g. o valor dos atributos delimitado por aspas ou plicas, etc ... ou conforme com um esquema (schema valid) sempre que respeita (satisfaz) todas as restries do esquema ... se vlido est bem formado (o inverso pode no ser verdade) pode estar, ou no, bem formado pode estar, ou no, vlido (de acordo com a sua especificao XSD!)
e.g. o Notepad XML, o XML Spy, ... analisador na Internet em: http://www.w3.org/2001/03/webdata/xsv
XSD
No ficheiro XSD necessrio declarar o namespace, http://www.w3.org/2001/XMLSchema, no qual os elementos que definem a linguagem XSD esto declarados
helloWorld_1.xml
XML
No ficheiro xml necessrio declarar o namespace, http://www.w3.org/2001/XMLSchemainstance, no qual os atributos relativos os ficheiros XML que so instncias de ficheiros XSD.
5
<?xml version=1.0?>
XSD
helloWorld_2.xml
XML
Tem de se utilizar o atributo schemaLocation e indicar pares de namespace ficheiro.xsd. Pode-se declarar prefixos para os namespaces utilizados.
6
portanto, tem um elemento raiz e pode ter uma declarao XML Esse elemento e os todos os outros elementos XSD tm de ser prefixados com o namespace: http://www.w3.org/2001/XMLSchema
descendente imediato do elemento schema Caso haja mais que um elemento global, ento o ficheiro XML pode iniciar-se com qualquer um deles em alternativa descendente imediato de um elemento diferente de schema
Tem de declarar o namespace http://www.w3.org/2001/XMLSchemainstance, normalmente sob o prefixo de xsi, e No elemento declarar o atributo xsi:schemaLocation ou xsi:noNamespaceSchemaLocation a indicar a localizao do ficheiro XSD
7
<?xml version=1.0?> <xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> <xs:element name=hello type=xs:string /> <xs:element name=ola type=xs:string /> </xs:schema>
XSD
Caso o schema tenha vrios elementos globais, eles podem ser utilizados em alternativa como elemento inicial dos ficheiros XML
helloWorld_3.xml
XML
8
indicador de ocorrncia
maxOccurs, minOccurs
group name, attributeGroup name
indicador de agrupamento
1
elemento (complexType e complexContent) Tipo Complexo indicador (sequence)
Tipo Simples
2
restrio
elemento (vazio, elemento ou texto, misto)
Tipo Complexo
10
11
no pode conter outros elementos nem atributos Sobre o texto pode-se indicar qual o tipo de seu valor
Exemplo,
<xs:element name=primNome type=xs:string /> <xs:element name=idade type=xs:integer /> <xs:element name=dataNasc type=xs:date />
12
ref = QName
substitutionGroup = QName> </xs:element>
* a ver posteriormente
13
especificao do elemento
(o resto ser visto posteriormente)
</xs:schema>
exemplo_elemento_v01.xsd
exemplo_elemento_v01.xml
Um atributo sempre declarado como Tipo Simples Um atributo define-se com a seguinte sintaxe (simplificada):
<xs:attribute name=xxx type=yyy />
xs:string xs:decimal xs:integer xs:boolean xs:date xs:time ...
Exemplo,
definies XSD
<primNome lingua=PT>Miguel</primNome>
elementos XML
15
<xs:attribute name = XMLname type = QName default = string fixed = string use = (optional | prohibited | required) ref = QName> </xs:attribute>
valor omisso
valor fixo
valor opcional, proibido ou obrigatrio
16
<xs:complexType>
<xs:attribute name=data" type=xs:date use=required/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType>
</xs:element></xs:schema>
exemplo_atributo_v01.xsd
<?xml version=1.0 encoding=ISO-8859-1 standalone=yes?> <lista_dataNascimento xmlns:xsi=http://www.w3.org/2001/XMLSchema -instance xsi:noNamespaceSchemaLocation=exemplo_atributo_v01.xsd> <dataNascimento data=2007-01-31/> <dataNascimento data=2000-12-31/> </lista_dataNascimento> exemplo_atributo_v01.xml 17
atributo obrigatrio
Atributo REF
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:attribute name="data" type="xs:date"/> <xs:element name="dataNascimento"> <xs:complexType> <xs:attribute ref="data" use="required"/> </xs:complexType> </xs:element> <xs:element name="lista_dataNascimento"> <xs:complexType> <xs:sequence> <xs:element ref="dataNascimento" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> exemplo_ref_1.xsd
Exemplo da declarao: - de um elemento que refere outro - de um atributo refere outro Entenda-se que REF faz com que o presente elemento/atributo incorpore as definies do elemento/atributo referenciado
<?xml version=1.0 encoding=ISO-8859-1 standalone=yes?> <lista_dataNascimento xmlns:xsi=http://www.w3.org/2001/XMLSchema -instance xsi:noNamespaceSchemaLocation=exemplo_ref_1.xsd> <dataNascimento data=2007-01-31/>
<dataNascimento data=2000-12-31/>
</lista_dataNascimento> SI1 - 12 exemplo_ref_1.xml 18
uma string, mas cujo valor substitui os caracteres: tabulador; fim de linha; e mudana de linha, por um espao
uma normalizedString mas que substitui os mltiplos espaos por um s espao e elimina os espaos iniciais e finais enumeration, length, maxLength, minLength, pattern, whiteSpace
20
tipos com sinal: byte(8), short(16), int(32), long(64) tipos sem sinal: unsignedByte(8), , unsignedLong(64) tipos sem limite: integer (com sinal), negativeInteger, nonNegativeInteger, positiveInteger, nonPositiveInteger
e.g. xsd: <xs:attribute name=emVigor type=xs:boolean/> e.g. xml: <precoSaldo emVigor=false>29.50</precoSaldo> e.g. xsd: <xs:attribute name=imagem type=xs:anyURI/> e.g. xml: <precoSaldo imagem=./a.gif>29.50</precoSaldo> ... nota: num URI os espaos em branco representam-se por %20 e.g. xsd: <xs:attribute name=message= type=xs:QName/> e.g. xml: <send message=ns1:message1/> ... notar que um nome qualificado pode, ou no, ser prefixado:
se for prefixado, ento o prefixo est associado a namespace se no for prefixado, ento o nome ocorre no mbito local
22
Tipo complexo
23
Um Tipo Complexo
composto por dois Tipos Simples
Tipo Simples
24
Tipo Complexo
1 2
Outra soluo
dar um nome, e.g. tReceita, ao Tipo Complexo a receita um elemento simples do tipo tReceita ... e qualquer outro elemento pode usar o tipo tReceita
<xs:element name=receita type=tReceita/> <xs:element name="receita2" type="tReceita"/> <xs:complexType name=tReceita> <xs:sequence>
base
<xs:element name=nomeOriginal type=xs:string/> <xs:element name=nomeUsual type="xs:string/> </xs:sequence> </xs:complexType> <xs:complexType name=tReceitaComData"> <xs:complexContent> <xs:extension base=tReceita">
extension
Restries
29
que por sua vez podem estar sujeitos a restries e.g. a idade tem valor inteiro compreendido entre 0 e 130 (ser?!)
elementos e atributos
ou seja, no corresponde nem a um elemento nem a um atributo ... algo que se pretende impor a um elemento ou a um atributo
30
instncia vlida
<idade>10</idade>
<xs:element name=idade> <xs:simpleType> <xs:restriction base=xs:integer> <xs:minInclusive value=0/> esquema <xs:maxInclusive value=130/> </xs:restriction> </xs:simpleType> </xs:element>
uma restrio sempre um novo Tipo Simples que tem por base outro tipo
idntico a estender um tipo base aqui usa-se restriction para estender usa-se extension
31
<iberico>Portugal</iberico>
32
Caracteres de controle: ? opcional * - zero ou mais vezes + - um ou mais vezes {n} precisamente n vezes {n,} pelo menos n vezes {n,m} de n a m vezes | - um ou outro [abc] a ou b ou c [a-c] valores entre a e c ^ - negao: [^A-Z] not A-Z \ - carcter de escape
Os caracteres \ | . - ^ ? * + {} () [] para serem usados por si tm de ser prefixados pelo carcter de escape. Exemplo: pattern='\[\*\]' identifica [*].
Padro/valor
->
<morada>Rua
de ...</morada>
... <xs:whiteSpace value=replace/>
<xs:element name=morada> <xs:simpleType> <xs:restriction base=xs:string> <xs:whiteSpace value=preserve/> </xs:restriction> </xs:simpleType> </xs:element>
Espaos iniciais e finais so removidos. Mltiplos espaos, e restantes white spaces, substitudos por um nico carcter de espao.
<senha>aSen5ha</senha>
<xs:element name=senha> <xs:simpleType> <xs:restriction base=xs:string> <xs:minLength value=5/> <xs:maxLength value=8/> </xs:restriction> </xs:simpleType> </xs:element>
</xs:restriction>
</xs:simpleType> </xs:element>
35
36
elemento sem nada elemento-vazio (que apenas pode conter atributos) elemento-texto (elemento que apenas pode conter texto) elemento-elementos (que apenas pode conter outros elementos) elemento-misto (que pode conter outros elementos e texto)
so definies que geralmente se utilizam convm conhec-las pois representam construes estereotipadas elemento sem nada
<xs:element name="produto"> <xs:complexType/> </xs:element>
produto_0.xml/xsd
37
<produto codigo=1234/>
Tcnica: define-se um tipo que pode conter elementos, mas no se declaram quaisquer elementos!
produto.xml/xsd
produto_2.xml/xsd
38
<xs:element name=codReceita> <xs:complexType> <xs:simpleContent> <xs:extension base=xs:integer> <xs:attribute name=origem type="xs:string"/> </xs:extension>
</xs:simpleContent>
</xs:complexType> </xs:element>
Tcnica: define-se um tipo complexo e diz-se que o seu contedo o de um tipo simples com atributos!
39
<xs:element name=receita> <xs:complexType> <xs:sequence> <xs:element name=nomeOriginal type=xs:string/> <xs:element name=nomeUsual type="xs:string/> </xs:sequence> </xs:complexType> </xs:element>
sequence permite: indicar a ordem pela qual os elementos surgem no contexto do complexType no exemplo: primeiro surge o elemento nomeOriginal depois surge o elementos nomeUsual
Tcnica: define-se um tipo que pode conter outros elementos, em determinada sequncia!
40
O contedo de receita contm texto analisado (parsed character data, #PCDATA) intercalado com outros elementos.
<codReceita>15</codReceita>.
</receita>
<xs:element name=receita> <xs:complexType mixed=true> <xs:sequence> <xs:element name=nomeOriginal type=xs:string/> <xs:element name=nomeUsual type="xs:string/> <xs:element name=codReceita type="xs:integer/>
mixed=true permite: colocar texto (#PCDATA) entre os elementos de um complexType no exemplo: O, usualmente designado por, . Esta receita tem cdigo, e .
</xs:sequence>
</xs:complexType> </xs:element>
Indicadores
De ordem: sequence, choice, all De ocorrncia: maxOccurs, minOccurs De agrupamento: group, attribute group
42
controlar a utilizao dos elementos em documentos instncia existem 7 indicadores (organizados em 3 grupos)
Indicador de ocorrncia
maxOccurs, minOccurs
Indicador de agrupamento
43
<receita>
<nomeOriginal/>
<nomeUsual/> <codReceita/> </receita> <receita> <nomeOriginal/> <codReceita/> </receita>
Seq-choice-all.xsd
44
<xs:element name=receita> <xs:complexType> <xs:choice> <xs:element name=numeroBilheteIdentidade type=xs:string maxOccurs=unbounded/> <xs:element name=numeroInformacaoFiscal type="xs:string/> </xs:choice> </xs:complexType> </xs:element>
<receita>
<numeroBilheteIdentidade/>
<numeroBilheteIdentidade/> <numeroBilheteIdentidade/>
ou
Seq-choice-all.xsd
45
<xs:element name=receita> <xs:complexType> <xs:all> <xs:element name=nomeOriginal type=xs:string/> <xs:element name=nomeUsual type="xs:string minOccurs=0/> <xs:element name=codReceita type="xs:integer/> <receita>
<nomeUsual/>
<codReceita/> <nomeOriginal/> </receita> <receita> <codReceita/> <nomeOriginal/> </receita>
</xs:all>
</xs:complexType> </xs:element>
Seq-choice-all.xsd
46
XSD xs:sequence
DTD elementos separados por vrgula, e.g. (e1, e2, e3) elementos separados por barra, e.g. (e1 | e2 | e3) no h equivalente
Descrio Sequncia ordenada de elementos. Apenas um dos elementos. Os elementos numa qualquer ordem.
47
xs:choice
xs:all
48
<receita>
<nomeOriginal>tekka-maki-sushi</nomeOriginal> <ingrediente>Alga tostada (yaki nori)</ingrediente> <ingrediente>Atum cortado em tiras</ingrediente> <ingrediente>Vinagre de arroz</ingrediente> </receita> </listaDeReceitas> XSD Construdo pelo XML Spy 2008
listaDeReceitas.xml
49
</xs:element>
50
<xs:element name="nomeOriginal"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Sumeshi"/> <xs:enumeration value="tekka-maki-sushi"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="listaDeReceitas"> <xs:complexType> <xs:sequence> <xs:element ref="receita" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="ingrediente"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="Alga tostada (yaki nori)"/> <xs:enumeration value="Arroz de gro curto (koshihikari ou nishiki)"/> <xs:enumeration value="Atum cortado em tiras"/> <xs:enumeration value="Aucar"/> <xs:enumeration value="Sal"/> <xs:enumeration value="Vinagre de arroz"/> <xs:enumeration value="gua"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:schema>
51
listaDeReceitas-gerado.xsd
Unicidade e Integridade
52
... designado, no modelo relacional, por integridade de entidade ... designado, no modelo relacional, por integridade referencial
53
vlida dentro do elemento em que for declarada deve ser declarada depois de complexType/SimpleType e antes dos atributos
contexto onde a unicidade verificada elementos a analisar o atributo de valor nico
unique_1.xml
<xs:element name="listaLocalidades"> <xs:complexType> <xs:sequence> <xs:element name="localidade" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:unique name="un_localidade"> <xs:selector xpath="localidade "/> <xs:field xpath=."/> </xs:unique> unique_1.xsd </xs:element> SI1 - 12
<xs:element name="lista_bar" type="CT_lista_bar"> <xs:unique name="cc_codigo"> <xs:selector xpath="bar"/> <xs:field xpath="@codigo"/> </xs:unique> <xs:unique name="cc_morada"> <xs:selector xpath="bar"/> <xs:field xpath="morada"/> </xs:unique> </xs:element> </xs:schema> <lista_bar xmlns:xsi= ... "unique_2.xsd">
<bar codigo="O Bar Ingls"> <morada>Rua Aru</morada> </bar> <bar codigo="O Pinguim"> <morada>Rua Aru</morada> </bar> </lista_bar>
unique_2.xml
55
Para cada campo que compe o critrio, utilizar um campo field em unique
Exemplo: Uma lista de bares, com cdigo de Bar e morada nicos em conjunto
Ficheiro vlido
<lista_bar> <bar codigo="O Bar Ingls"> <morada>Rua Aru</morada> </bar> <bar codigo="O Pinguim"> <morada>Rua Aru</morada> </bar> <bar codigo="O Bar Ingls"> <morada>Rua Cames</morada> </bar> </lista_bar>
unique_3.xml 56
Integridade referencial
H integridade referencial, de um campo referenciador para um campo referenciado, quando os valores do campo referenciador existem como valores do campo referenciado
O campo referenciado, tem de ter unicidade (key ou unique) O campo referenciador (keyref) tem de indicar qual o campo que referencia
Erro, valor Manuel no <xs:complexType name="CT_lista_nomes"> existente em key_nome <xs:sequence> <xs:element name="nome" type="xs:string" maxOccurs="unbounded"/> <xs:element name="distinguido" type="xs:string" maxOccurs="unbounded"/> </xs:sequence> <lista_nomes ..."keyAndRef_1.xsd"> </xs:complexType> <xs:element name="lista_nomes" type="CT_lista_nomes"> <nome>Jos</nome> <xs:key name="key_nome"> <nome>Joo</nome> <xs:selector xpath="nome"/> <nome>Ana</nome> <xs:field xpath="."/> </xs:key> <distinguido>Jos</distinguido> <xs:keyref name="kr_distinguido" refer=key_nome"> <distinguido>Manuel</distinguido> <xs:selector xpath="distinguido"/> Nome do <xs:field xpath="."/> keyAndRef_1.xml referenciado </lista_nomes> </xs:keyref> Valores do campo </xs:element> keyAndRef_1.xsd 57 referenciador SI1 - 12
Exemplo 2: uma lista de bares, cervejas, e desses bares com essas cervejas
Uma lista de bares Uma lista de cervejas Uma lista com quais desses bares tm essas cervejas
Tal requer integridade referencial, para garantir que s so mencionados os bares da 1 lista e as cervejas da 2 lista
<xs:complexType name="CT_lista_bar"> <xs:sequence> <xs:element name="bar" type="xs:string" maxOccurs="unbounded"/> <xs:element name="cerveja" type="xs:string" maxOccurs="unbounded"/> <xs:element name="bar_cerveja" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="oBar" type="xs:string"/> <xs:attribute name="aCerveja" type="xs:string"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> keyAndRef_2.xsd
58
60
unique
key
Semelhante a unique, mas no pode ter null Assegura que o caminho referido existe, ou seja, que os elementos ou atributos referenciados existem
keyref
Indica elementos e/ou atributos cujo valor tem de existir num key ou unique referido
61
Consideraes finais
62
tipos de dados simples e complexos extenso de tipos restries sobre ocorrncias de elementos restries sobre valores de elementos e de atributos restries sobre unicidade dos valores de elementos e atributos restries sobre referencias entre valores de elementos e atributos especificao de estruturas compatveis com espaos de nomes
entidades para utilizar em documentos XML ... de modo to simples como o DTD a estrutura do documento XML!
... por ser extremamente mais poderoso que DTD mais complexo!
63
Data types
64