1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

XML Schema

Discussão em 'Web Development' iniciada por hresp, 28 de Abril de 2008. (Respostas: 28; Visualizações: 1354)

  1. hresp

    hresp Power Member

    Boas,
    Tenho um trabalho em mãos e necessito urgentemente de mais conhecimentos de XML Schema alguem sabe de quem me possa dar/vender umas explicações?

    Agradeço.
     
  2. Madril

    Madril 1st Folding then Sex

  3. hresp

    hresp Power Member

    Já tenho algumas coisas programadas e alguns erros, há algum barra em XML Schema que me possa dar uma mão? Não vou aqui postar os arquivos completos...
     
  4. theforbidden1

    theforbidden1 Banido

    Há, pagas para isso.
    Aqui ninguém faz trabalhos a ninguém, uma coisa é teres duvidas outra é quereres que te façam o trabalho...
     
  5. AliFromCairo

    AliFromCairo Power Member

    Boas, XML Schema não é complexo, mas podes precisar de ver alguns exemplos antes de começares a criar schemas avançados. Dá uma vista de olhos no link que o Madril colocou acima, para teres uma ideia geral de como funcionam os schemas. Se continuares com dúvidas, coloca-as aqui, que certamente irá aparecer alguém para te ajudar.
     
  6. hresp

    hresp Power Member

    Coloco aqui uma parte do projecto onde estou a ter problemas.

    Criei uma série de ComplexType's para os elementos Titulo, Interprete etc, e estão a dar erro. Os erros ocorrem na chamada dos complextypes A_DADOS e B_DADOS, com o FONTS não... Será porque estou a chamar ComplexTypes e ao mesmo tempo qd os chamos inicio outro?

    Alguem me pode ajudar?
    Os códigos não estão completos por isso podem dar erro ao serem executados.

    Obrigado

    O XML:
    ...
    <METADATOS ACTIVOS="S">
    <TITULO VISIBLE="N" COLOR="40" LEFT="162" TOP="315" WIDTH="121" HEIGHT="57" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="12">Arial</FONT>
    </TITULO>
    <INTERPRETE VISIBLE="N" COLOR="40" LEFT="162" TOP="375" WIDTH="119" HEIGHT="66" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="11">Arial</FONT>
    <CARTEL_INTERPRETES CAPTION="Interprete/s:" VISIBLE="N" COLOR="40" LEFT="74" TOP="399" WIDTH="76" HEIGHT="16" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="10">Arial</FONT>
    </CARTEL_INTERPRETES>
    </INTERPRETE>
    <ALBUM VISIBLE="N" COLOR="40" LEFT="162" TOP="444" WIDTH="119" HEIGHT="55" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="11">Arial</FONT>
    <CARTEL_ALBUM CAPTION="Album:" VISIBLE="N" COLOR="40" LEFT="74" TOP="356" WIDTH="45" HEIGHT="16" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="10">Arial</FONT>
    </CARTEL_ALBUM>
    </ALBUM>
    <ANO VISIBLE="N" COLOR="40" LEFT="162" TOP="500" WIDTH="50" HEIGHT="17" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="11">Arial</FONT>
    <CARTEL_ANO CAPTION="Año:" VISIBLE="N" COLOR="40" LEFT="74" TOP="380" WIDTH="29" HEIGHT="16" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="10">Arial</FONT>
    </CARTEL_ANO>
    </ANO>
    <AUTOR VISIBLE="N" COLOR="40" LEFT="162" TOP="523" WIDTH="119" HEIGHT="68" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="11">Arial</FONT>
    <CARTEL_AUTOR CAPTION="Autor/es:" VISIecraBLE="N" COLOR="40" LEFT="74" TOP="420" WIDTH="56" HEIGHT="16" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="10">Arial</FONT>
    </CARTEL_AUTOR>
    </AUTOR>
    <CARATULA VISIBLE="N" LEFT="336" TOP="392" WIDTH="200" HEIGHT="200" TRANSPARENT="S"/>
    </METADATOS>
    ...


    O XML Schema:


    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="CONFIGURACION">
    <xs:complexType>
    <xs:sequence>

    <xs:element name="METADATOS">
    <xs:complexType>
    <xs:sequence>

    <xs:element name="TITULO" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    <xs:element name="INTERPRETE" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    <xs:element name="CARTEL_INTERPRETES" type="B_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    <xs:element name="ALBUM" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    <xs:element name="CARTEL_ALBUM" type="B_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    <xs:element name="ANO" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    <xs:element name="CARTEL_ANO" type="B_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    <xs:element name="AUTOR" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    <xs:element name="CARTEL_AUTOR" type="B_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>

    </xs:complexType>

    </xs:element>

    </xs:sequence>
    </xs:complexType>
    </xs:element >



    <xs:complexType name="A_DADOS">
    <xs:attribute name="visible" default="N">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:pattern value="S|N"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="color" type= "xs:long"/>
    <xs:attribute name="left" type="xs:integer"/>
    <xs:attribute name="top" type="xs:integer"/>
    <xs:attribute name="with" type="xs:integer"/>
    <xs:attribute name="height" type="xs:integer"/>
    <xs:attribute name="transparent" default="N">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:pattern value="S|N"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    </xs:complexType>


    <xs:complexType name="B_DADOS">
    <xs:complexContent>
    <xs:extension base=" A_DADOS">
    <xs:attribute name="CAPTION" type="xs:string"/>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>


    <xs:complexType name="A_FONTS">
    <xs:sequence maxOccurs="1">
    <xs:element name="FONT" type="xs:string"/>
    </xs:sequence>
    <xs:attribute name="COLOR" type="xs:long"/>
    <xs:attribute name="SIZE" type="xs:integer"/>
    </xs:complexType>


    </xs:schema>
     
  7. AliFromCairo

    AliFromCairo Power Member

    Boas, não podes indicar que um elemento é de um determinado tipo, e em seguida declareres um tipo anónimo. Por exemplo, no caso do elemento "INTERPRETE" estás a dizer que o tipo é "A_DADOS", e em seguida estás a declarar um complex type anónimo, o que não é válido. Percebo que queres tentar aproveitar o tipo "A_DADOS" para colocar todos os atributos, e a minha sugestão é usares o elemento extension do XML Schema para fazeres o que pretendes. A ideia base é criares um tipo complexo ("A_DADOS") e, em seguida, estenderes esse tipo para cada um dos elementos ("INTERPRETE", entre outros).
     
  8. hresp

    hresp Power Member

    Não estou a ver como posso usar o elemento extension...Posso manter os ComplexType já feitos? É que em cada objecto, INTERPRETE, TITULO, ALBUM estou a usar um encadeamento de ComplexType's...

    <INTERPRETE VISIBLE="N" COLOR="40" LEFT="162" TOP="375" WIDTH="119" HEIGHT="66" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="11">Arial</FONT>
    <CARTEL_INTERPRETES CAPTION="Interprete/s:" VISIBLE="N" COLOR="40" LEFT="74" TOP="399" WIDTH="76" HEIGHT="16" TRANSPARENT="S">
    <FONT COLOR="0" SIZE="10">Arial</FONT>
    </CARTEL_INTERPRETES>
    </INTERPRETE>



    <xs:element name="INTERPRETE" type="A_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    <xs:element name="CARTEL_INTERPRETES" type="B_DADOS">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="FONT" type="A_FONTS"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:element>
     
  9. AliFromCairo

    AliFromCairo Power Member

    Sim, mas é precisamente esse encadeamento que está a dar problemas. Podes fazer algo deste género:

    Código:
     <xs:complexType name="CartelType">
      <xs:complexContent>
       <xs:extension base="B_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
     
     <xs:complexType name="InterpreteType">
      <xs:complexContent>
       <xs:extension base="A_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS"/>
         <xs:element name="CARTEL_INTERPRETES" type="CartelType" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
     
     <xs:complexType name="AlbumType">
      <xs:complexContent>
       <xs:extension base="A_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS"/>
         <xs:element name="CARTEL_ALBUM" type="CartelType" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
     
     <xs:complexType name="TituloType">
      <xs:complexContent>
       <xs:extension base="A_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
     
    <xs:element name="TITULO" type="TituloType" />
    <xs:element name="INTERPRETE" type="InterpreteType" />    
    <xs:element name="ALBUM" type="AlbumType" />
     
     
    
    A ideia é declarares um tipo complexo para cada um dos elementos principais ("INTERPRETE", "TITULO", ...), que extende o tipo "A_DADOS" (que contém o conjunto de atributos), e tem também um conjunto de elementos. Em seguida, só tens que declarar o elemento como fiz acima, e dizer que o tipo dele vai ser igual ao tipo complexo que foi criado. Desta forma, não precisas de utilizar tipos complexos encadeados.

    Já agora, os nomes dos elementos no XML Schema são case sensitive, pelo que deves rever o tipo "A_DADOS" e colocar em maiúsculas todas as letras dos nomes dos elementos, de forma a ficar igual ao XML.

    Qualquer dúvida, coloca aqui.
     
    Última edição: 3 de Maio de 2008
  10. hresp

    hresp Power Member

    Muchas gracias ALI,

    Já consegui eliminar todos os erros!!! O que me acontece é que tenho que declarar todos os ComplexType fora de qualquer elemento, ficam só dentro do <xs.schema ...> não seria possivel criar "tipos locais"?
     
  11. AliFromCairo

    AliFromCairo Power Member

    Hmm, por tipos locais, vou assumir que estás a falar de tipos complexos anónimos, semelhantes aos que tinhas no schema inicial que colocaste nesta thread. Caso seja isso, a resposta é sim. Contudo, penso que fica muito mais limpo e extensível se separares os tipos dos elementos. De qualquer forma, segue um exemplo para os elementos "TITULO" e "INTERPRETE":

    Código:
    <xs:element name="TITULO">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="A_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
    </xs:element>
     
    <xs:element name="INTERPRETE">
     <xs:complexType>
      <xs:complexContent>
       <xs:extension base="A_DADOS">
        <xs:sequence>
         <xs:element name="FONT" type="A_FONTS"/>
         <xs:element name="CARTEL_INTERPRETES" type="CartelType" />
        </xs:sequence>
       </xs:extension>
      </xs:complexContent>
     </xs:complexType>
    </xs:element>
    
    Nota que não é possível especificares um tipo para o elemento (type="..."), e em seguida declarares um tipo complexo anónimo para o mesmo elemento, ou vais ter o mesmo problema que tinhas ao ínicio.

    Espero que ajude.
     
  12. hresp

    hresp Power Member

    Podemos utilizar um mesmo complexType para elementos com atributos do mesmo tipo mas nomes diferentes? Ou temos mesmo de respeitar os nomes dos atributos?

    Exemplo:

    XML

    <EXPLORADORII ACTIVOS="N" LEFT="456" TOP="392" WIDTH="200" HEIGHT="200"/>

    <RELOJ_PANEL VISIBLE="N" LEFT="552" TOP="281" WIDTH="233" HEIGHT="48"/>

    XML SCHEMA


    <xs:complexType name="C_DADOS">
    <xs:attribute name="ACTIVOS" default="N">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:pattern value="S|N"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="LEFT" type="xs:integer"/>
    <xs:attribute name="TOP" type="xs:integer"/>
    <xs:attribute name="WITH" type="xs:integer"/>
    <xs:attribute name="HEIGHTt" type="xs:integer"/>
    </xs:complexType>
     
  13. AliFromCairo

    AliFromCairo Power Member

    Tens de respeitar o nome dos atributos. Se fosse um elemento, poderias usar o indicador choice para fazer o que pretendes. Com atributos, penso que no teu caso a melhor opção é criares um tipo complexo com os atributos comuns ("LEFT", "TOP", "WIDTH", "HEIGHT"), e estenderes este tipo com os atributos que pretendes. Já agora, e uma vez que tirando o nome, o atributo é igual, podes criar um tipo simples para isso, para não o teres de repetir várias vezes. Algo do género:

    Código:
     <xs:simpleType name="SNType">
      <xs:restriction base="xs:string">
       <xs:pattern value="S|N"/>
      </xs:restriction>
     </xs:simpleType>
    
     
    Última edição: 3 de Maio de 2008
  14. hresp

    hresp Power Member

    E depois posso chamar o simpleType desta forma:

    <xs:attribute name="ACTIVOS" type="ESCOLHA"/>
    ou
    <xs:attribute name="VISIBLE" type="ESCOLHA"/>

    certo?!
     
  15. AliFromCairo

    AliFromCairo Power Member

    Sim, é isso mesmo.
     
  16. hresp

    hresp Power Member

    Neste caso não há problemas com as ordens dos atributos? Como o outro atributo fica "dentro da extensão"!


    <IMAGEN ACTIVOS="S" LEFT="6" TOP="140" WIDTH="716" HEIGHT="407"/>

    ________

    <xs:complexType name="C_DADOS">
    <xs:complexContent>
    <xs:extension base="MOLDURA">
    <xs:attribute name="ACTIVOS" type="ESCOLHA"/>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MOLDURA">
    <xs:annotation>
    <xs:documentation>
    Este complexType é para os atributos das medidas dos reprodutores dos ecrãs.
    </xs:documentation>
    </xs:annotation>
    <xs:attribute name="LEFT" type="xs:integer"/>
    <xs:attribute name="TOP" type="xs:integer"/>
    <xs:attribute name="WITH" type="xs:integer"/>
    <xs:attribute name="HEIGHT" type="xs:integer"/>
    </xs:complexType>
     
  17. AliFromCairo

    AliFromCairo Power Member

    Boas, ao contário dos elementos, a ordem dos atributos não é relevante no XML Schema.
     
  18. hresp

    hresp Power Member

    Tens algum codigo de expressões regulares para URL's?
     
  19. hresp

    hresp Power Member

    Há alguma forma de passar "valores por referencia" desde os elementos? Nos exemplos em baixo se houvesse podiamos fazer apenas um simpleType...

    <xs:simpleType name="HORA">
    <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="23"/>
    </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="MINUTOS">
    <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="59"/>
    </xs:restriction>
    </xs:simpleType>


    <xs:simpleType name="CODIGO_MM">
    <xs:restriction base="xs:integer">
    <xs:minInclusive value="1"/>
    <xs:maxInclusive value="8"/>
    </xs:restriction>
    </xs:simpleType>
     
  20. AliFromCairo

    AliFromCairo Power Member

    Boas, há uns tempos utilizei a seguinte expressão regular para validação de URL's:

    Código:
    [FONT=Courier New][COLOR=white][FONT=Courier New][COLOR=white][FONT=Courier New][COLOR=white][FONT=Courier New][COLOR=white][a-zA-Z\d+\-.]+://([-\w]+:[-\w]+@)?[\w\-]+(\.[\w\-]+)*\.([a-zA-Z]{2}|com|org|net|edu|gov|mil)(:[\d]{1,5})?((/([-+~.\w]|%[a-fA-f\d]{2})+)*/?|/)(\?(&?([-+:~.\w]|%[a-fA-f\d]{2})=?)*)?(#([-+~.\w]|%[a-fA-f\d]{2})*)?[/COLOR][/FONT][/COLOR][/FONT]
    [/COLOR][/FONT][/COLOR][/FONT]
    A expressão valida url's que seguem o seguinte formato: protocolo://<username: password@>autoridade.hierarquica.dominio<: porta></caminho/para/recurso><?var=valor&var&var=>.


    Embora não esteja completa, podes facilmente modificá-la de forma a adequá-la às tuas necessidades.

    Podes também procurar pela web por expressões regulares semelhantes em sites como o regexlib.com, por exemplo.
     

Partilhar esta Página