¿Cuál es la diferencia entre XML y XSD?

111

¿Cuál es la diferencia entre el lenguaje de marcado extensible (XML) y el esquema XML (XSD)?

Gandalf StormCrow
fuente

Respuestas:

145

En realidad, el XSD es XML en sí mismo. Su propósito es validar la estructura de otro documento XML. El XSD no es obligatorio para ningún XML, pero asegura que el XML podría usarse para algunos propósitos particulares. El XML solo contiene datos en formato y estructura adecuados.

anthares
fuente
Para que quede claro: si un tercero me ha enviado un documento .XSD con el tipo: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> incluido, esto es solo una descripción de los campos, ¿no? ¿Es razonable pedirles una solicitud de muestra real que sería XML sin formato con <QuoteResultID>, etc., etc.?
James Wilson
3
Seguro que puedes preguntarles. También puede utilizar algunas de las herramientas en línea que pueden hacer esto por usted, como esta, por ejemplo: xsd2xml . Simplemente pegue el xsd y generará un documento xml de muestra basado en él.
anthares
@anthares, probé el enlace con: <?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> pero terminé obteniendo el error: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity
¿Por qué sería eso un problema?
heretoinfinity
111


Toma un ejemplo

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

y diseña un xsd para eso:

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


Lo que no es posible con XSD: me gustaría escribirlo primero ya que la lista es muy pequeña
1) No puede validar un nodo / atributo usando el valor de otro nodo / atributo.
2) Esta es una restricción: un elemento definido en un archivo XSD debe definirse con un solo tipo de datos. [en el ejemplo anterior, para <child_two>aparecer en otro <parent>nodo, el tipo de datos no se puede definir más que int.
3) No se puede ignorar la validación de elementos y atributos, es decir, si un elemento / atributo aparece en XML, debe estar bien definido en el XSD correspondiente. Aunque el uso de lo <xsd:any>permite, tiene sus propias reglas. Mantener lo que conduce al error de validación. Intenté un enfoque similar, y ciertamente no tuve éxito, aquí están las preguntas y respuestas


lo que es posible con XSD:
1) Puede probar la jerarquía adecuada de los nodos XML. [xsd define qué hijo debe pertenecer a qué padre, etc., permaneciendo cuál se contará como error, en el ejemplo anterior, child_two no puede ser el hijo inmediato de root, pero es el hijo de la etiqueta "parent", que a su vez es un hijo del nodo "raíz", hay una jerarquía ..]
2) Puede definir el tipo de datos de los valores de los nodos. [en el ejemplo anterior, child_two no puede tener ningún otro dato que el número]
3) También puede definir tipos de datos personalizados, [ejemplo, para el nodo <month>, los datos posibles pueden ser uno de los 12 meses ... así que debe definir todos los 12 meses en un nuevo tipo de datos escribiendo todos los nombres de los 12 meses como valores de enumeración.
4) Puede poner la restricción en la ocurrencia de los elementos, usando minOccurs y maxOccurs, los valores predeterminados son 1 y 1.

.. y muchos más ...

InfantPro'Aravind '
fuente
1
@ InfantPro'Aravind '¿Qué quisiste decir con "No se puede validar un nodo / atributo usando el valor de otro nodo / atributo". ¿Por qué alguien querría hacer eso?
Geek
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '18 de
"No se puede validar un nodo / atributo utilizando el valor de otro nodo / atributo". ¿Qué significa esto
GrowinMan
@ GrowinMan, validación condicional (no relación padre-hijo) Ej: si este es su xml: <root> <A>A</A> <B/> <C/> </root>y si Node lo <A>es <A>B</A>, entonces haga <B>obligatorio, si <A>C</A>luego haga <C>obligatorio.
InfantPro'Aravind '
El requisito anterior es imposible de lograr con XSD solo
InfantPro'Aravind '
15

XSD:
XSD (Definición de esquema XML) especifica cómo describir formalmente los elementos en un documento de Lenguaje de marcado extensible (XML).
Xml:
XML fue diseñado para describir datos . Es independiente tanto del software como del hardware.
Mejora las siguientes cosas.
-Compartir datos.
-Plataforma independiente.
-Aumentar la disponibilidad de Datos.

Diferencias:

  1. XSD está basado y escrito en XML.

  2. XSD define elementos y estructuras que pueden aparecer en el documento, mientras que XML no.

  3. XSD garantiza que los datos se interpreten correctamente, mientras que XML no.

  4. Un documento XSD se valida como XML, pero es posible que lo contrario no siempre sea cierto.

  5. XSD es mejor para detectar errores que XML.

Un XSD define elementos que se pueden utilizar en los documentos, relacionados con los datos reales con los que se codificará.
por ejemplo:
una fecha expresada como 1/12/2010 puede significar el 12 de enero o el 1 de diciembre. La declaración de un tipo de datos de fecha en un documento XSD garantiza que siga el formato dictado por XSD.

Cráneo
fuente
La primera declaración describió todo.
Ojonugwa Jude Ochalifu
6

EJEMPLO XML SIMPLE:

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

XSD DEL XML ARRIBA (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>

Aquí:

xs: element : define un elemento.

xs: sequence : indica que los elementos secundarios solo aparecen en el orden mencionado.

xs: complexType : indica que contiene otros elementos.

xs: simpleType : indica que no contienen otros elementos.

tipo: cadena, decimal, entero, booleano, fecha, hora,

  • En palabras simples , xsd es otra forma de representar y validar datos XML con el tipo específico.
  • Con la ayuda de atributos adicionales, podemos realizar múltiples operaciones.

  • Realizar cualquier tarea en xsd es más simple que xml.

shubham1js
fuente
¡Hola! ¿Qué programa utilizo para crear un archivo XSD?
Judith
@ Programa Judith? ¿Puede explicar su pregunta? como editor o lenguaje o herramienta?
shubham1js
1

Básicamente, un archivo XSD define cómo se verá el archivo XML. Es un archivo de esquema que define la estructura del archivo XML. Por lo que especifica cuáles son los campos posibles y qué tamaño van a tener.

Un archivo XML es una instancia de XSD, ya que utiliza las reglas definidas en XSD.

SelMez
fuente
0

XML tiene una aplicación mucho más amplia que f.ex. HTML. No tiene una "aplicación" intrínseca o predeterminada. Por lo tanto, si bien es posible que no le importe que las páginas web también se rijan por lo que está permitido, desde el lado del autor, probablemente desee definir con precisión lo que un documento XML puede y no puede contener.

Es como diseñar una base de datos.

Lo que pasa con las tecnologías XML es que son de naturaleza textual. Con XSD, significa que tiene un marco de definición de estructura de datos que se puede "conectar" a herramientas de procesamiento de texto como PHP. Por lo tanto, no solo puede manipular los datos en sí, sino que también puede cambiar y documentar la estructura con mucha facilidad, e incluso generar automáticamente interfaces.

Visto así, XSD es el "pegamento" o "middleware" entre los datos (XML) y las herramientas de procesamiento de datos.

Odio
fuente