Qual é a diferença entre XML e XSD?

111

Qual é a diferença entre Extensible Markup Language (XML) e XML Schema (XSD)?

Gandalf StormCrow
fonte

Respostas:

145

Na verdade, o XSD é o próprio XML. Seu objetivo é validar a estrutura de outro documento XML. O XSD não é obrigatório para nenhum XML, mas garante que o XML possa ser usado para alguns fins específicos. O XML contém apenas dados em formato e estrutura adequados.

anthares
fonte
Só para ficar claro - se um terceiro me enviou um documento .XSD com o seguinte: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> incluído - isso é apenas uma descrição dos campos, não é. É razoável pedir a eles uma solicitação de amostra real que seria XML bruto com <QuoteResultID> etc. etc.
James Wilson
3
Certamente, você pode perguntar a eles. Você também pode usar algumas das ferramentas online que podem fazer isso para você, como esta, por exemplo - xsd2xml . Basta colar o xsd e ele irá gerar um documento xml de amostra baseado nele.
anthares
@anthares, tentei o link com: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="QuoteRequestID" type="xs:unsignedLong" minOccurs="0" /> </xs:schema> mas acabei recebendo o erro: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity
Por que isso seria um problema?
infinito
111


Pegue um exemplo

<root>
  <parent>
     <child_one>Y</child_one>
     <child_two>12</child_two>
  </parent>
</root>

e projete um xsd para isso:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parent">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="child_one" type="xs:string" />
              <xs:element name="child_two" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


O que não é possível com o XSD: gostaria de escrever primeiro porque a lista é muito pequena
1) Você não pode validar um nó / atributo usando o valor de outro nó / atributo.
2) Esta é uma restrição: Um elemento definido no arquivo XSD deve ser definido com apenas um tipo de dados. [no exemplo acima, para <child_two>aparecer em outro <parent>nó, o tipo de dados não pode ser definido diferente de int.
3) Não se pode ignorar a validação de elementos e atributos, ou seja, se um elemento / atributo aparece no XML, deve estar bem definido no XSD correspondente. Embora o uso de <xsd:any>permita, mas ele tem suas próprias regras. Respeitar o que leva ao erro de validação. Eu tentei uma abordagem semelhante, e certamente não tive sucesso. Aqui está o Q&A


o que é possível com o XSD:
1) Você pode testar a hierarquia adequada dos nós XML. [xsd define qual filho deve vir sob qual pai, etc, obedecendo o que será contado como erro, no exemplo acima, child_two não pode ser o filho imediato de root, mas é o filho da tag "pai" que por sua vez é um filho do nó "raiz", há uma hierarquia ..]
2) Você pode definir o tipo de dados dos valores dos nós. [no exemplo acima child_two não pode ter nenhum outro dado além do número]
3) Você também pode definir data_types personalizados, [exemplo, para o nó <month>, os dados possíveis podem ser um dos 12 meses .. então você precisa definir todos os 12 meses em um novo tipo de dados, gravando todos os nomes de 12 meses como valores de enumeração.
4) Você pode colocar a restrição na ocorrência dos elementos, usando minOccurs e maxOccurs, os valores padrão são 1 e 1.

.. e muitos mais ...

InfantPro'Aravind '
fonte
1
@ InfantPro'Aravind 'O que você quis dizer com "Você não pode validar um nó / atributo usando o valor de outro nó / atributo.". Por que alguém iria querer fazer isso?
Geek de
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '18 de
"Você não pode validar um nó / atributo usando o valor de outro nó / atributo". O que isso significa
GrowinMan
@ GrowinMan, validação condicional (não relacionamento pai-filho) Ex: Se este for o seu xml: <root> <A>A</A> <B/> <C/> </root>e se Node <A>for <A>B</A>, torne <B>obrigatório, se <A>C</A>então torne <C>obrigatório.
InfantPro'Aravind '
O requisito acima é impossível de alcançar apenas com o XSD
InfantPro'Aravind '
15

XSD:
XSD (XML Schema Definition) especifica como descrever formalmente os elementos em um documento Extensible Markup Language (XML).
Xml:
XML foi projetado para descrever dados . É independente de software e também de hardware.
Ele aprimora as seguintes coisas.
- Compartilhamento de dados.
-Plataforma independente.
-Aumentar a disponibilidade de dados.

Diferenças:

  1. XSD é baseado e escrito em XML.

  2. XSD define elementos e estruturas que podem aparecer no documento, enquanto XML não.

  3. O XSD garante que os dados sejam interpretados corretamente, enquanto o XML não.

  4. Um documento XSD é validado como XML, mas o oposto nem sempre pode ser verdadeiro.

  5. XSD é melhor em detectar erros do que XML.

Um XSD define elementos que podem ser usados ​​nos documentos, relacionados aos dados reais com os quais devem ser codificados.
por exemplo:
uma data expressa como 12/01/2010 pode significar 12 de janeiro ou 1º de dezembro. Declarar um tipo de dados de data em um documento XSD garante que ele siga o formato ditado pelo XSD.

Crânio
fonte
A primeira declaração descreveu tudo.
Ojonugwa Jude Ochalifu
6

EXEMPLO DE XML SIMPLES:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD OF ABOVE XML (Explicado):

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Aqui:

xs: elemento : define um elemento.

xs: sequência : Denota os elementos filhos que aparecem apenas na ordem mencionada.

xs: complexType : indica que contém outros elementos.

xs: simpleType : indica que eles não contêm outros elementos.

tipo: string, decimal, inteiro, booleano, data, hora,

  • Em palavras simples , xsd é outra maneira de representar e validar dados XML com o tipo específico.
  • Com a ajuda de atributos extras, podemos realizar várias operações.

  • Executar qualquer tarefa em xsd é mais simples do que xml.

shubham1js
fonte
Oi! Qual programa devo usar para criar um arquivo XSD?
Judith
Programa @Judith? você pode explicar sua pergunta. como editor, linguagem ou ferramenta?
shubham1js
1

Basicamente, um arquivo XSD define como o arquivo XML será. É um arquivo Schema que define a estrutura do arquivo XML. Portanto, ele especifica quais são os campos possíveis e qual o tamanho que eles terão.

Um arquivo XML é uma instância de XSD, pois usa as regras definidas no XSD.

SelMez
fonte
0

XML tem uma aplicação muito mais ampla do que f.ex. HTML. Ele não tem um "aplicativo" intrínseco ou padrão. Portanto, embora você possa realmente não se importar se as páginas da web também são regidas pelo que é permitido, do lado do autor, você provavelmente desejará definir com precisão o que um documento XML pode ou não conter.

É como projetar um banco de dados.

O que acontece com as tecnologias XML é que elas são de natureza textual. Com o XSD, isso significa que você tem uma estrutura de definição de estrutura de dados que pode ser "conectada" a ferramentas de processamento de texto como PHP. Portanto, você pode não apenas manipular os dados em si, mas também alterar e documentar a estrutura com muita facilidade e até gerar front-ends automaticamente.

Visto dessa forma, o XSD é a "cola" ou "middleware" entre os dados (XML) e as ferramentas de processamento de dados.

Hatebit
fonte