В чем разница между XML и XSD?

111

В чем разница между Extensible Markup Language (XML) и XML Schema (XSD)?

Гэндальф ШтормВорона
источник

Ответы:

145

Фактически XSD - это сам XML. Его цель - проверить структуру другого XML-документа. XSD не является обязательным для любого XML, но он гарантирует, что XML может быть использован для определенных целей. XML содержит данные только в подходящем формате и структуре.

Anthares
источник
Я так понимаю - если третья сторона прислала мне документ .XSD, например: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> - это просто описание полей, не так ли. Разумно ли попросить у них фактический образец запроса, который будет необработанным XML с <QuoteResultID> и т. Д. И т. Д.
Джеймс Уилсон,
3
Конечно, вы можете их спросить. Вы также можете использовать некоторые онлайн-инструменты, которые могут сделать это за вас, например, этот - xsd2xml . Просто вставьте xsd, и на его основе будет сгенерирован образец xml-документа.
Anthares
@anthares, я попробовал ссылку с помощью: <?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> но в итоге получил ошибку: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity
Почему это может быть проблемой?
heretoinfinity
111


Взять пример

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

и создайте для этого xsd:

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


Что невозможно с XSD: хотелось бы написать его первым, поскольку список очень маленький
1) Вы не можете проверить узел / атрибут, используя значение другого узла / атрибута.
2) Это ограничение: элемент, определенный в файле XSD, должен быть определен только с одним типом данных. [в приведенном выше примере для <child_two>отображения в другом <parent>узле тип данных не может быть определен кроме int.
3) Вы не можете игнорировать проверку элементов и атрибутов, т. Е. Если элемент / атрибут появляется в XML, он должен быть четко определен в соответствующем XSD. Хотя использование <xsd:any>позволяет, но имеет свои правила. Соблюдение, которое приводит к ошибке проверки. Я пробовал использовать аналогичный подход, но безуспешно, вот вопросы и ответы.


что возможно с XSD:
1) Вы можете проверить правильность иерархии узлов XML. [xsd определяет, какой дочерний элемент должен относиться к какому родительскому элементу и т. д., соблюдение которого будет считаться ошибкой, в приведенном выше примере child_two не может быть непосредственным дочерним элементом root, но это дочерний элемент тега «parent», который, в свою очередь, является дочерний элемент «корневого» узла, существует иерархия ..]
2) Вы можете определить Тип данных значений узлов. [в приведенном выше примере child_two не может иметь никаких других данных, кроме числа]
3) Вы также можете определить пользовательские data_types, [например, для узла <month>возможные данные могут быть одним из 12 месяцев .. поэтому вам нужно определить все 12 месяцев в новом типе данных, записывая все названия 12 месяцев в качестве значений перечисления.
4) Вы можете установить ограничение на появление элементов, используя minOccurs и maxOccurs, значения по умолчанию - 1 и 1.

.. и многое другое ...

МладенецПро'Аравинд '
источник
1
@ InfantPro'Aravind 'Что вы имели в виду, говоря «Невозможно проверить узел / атрибут, используя значение другого узла / атрибута». Зачем кому-то это нужно?
Geek
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '18
«Вы не можете проверить узел / атрибут, используя значение другого узла / атрибута». Что это значит
GrowinMan
@ GrowinMan, Условная проверка (не родитель-потомок) Пример: Если это ваш XML: <root> <A>A</A> <B/> <C/> </root>если узел <A>является <A>B</A>, то сделать <B>обязательно, если <A>C</A>затем сделать <C>обязательным.
InfantPro'Aravind '
Вышеуказанное требование невозможно выполнить с помощью
Вышеуказанное
15

XSD:
XSD (определение схемы XML) определяет, как формально описывать элементы в документе расширяемого языка разметки (XML).
Xml:
XML был разработан для описания данных. Он не зависит от программного обеспечения и оборудования.
Это улучшает следующие вещи.
-Обмен данными.
-Независимая платформа.
-Увеличение доступности данных.

Отличия:

  1. XSD основан и написан на XML.

  2. XSD определяет элементы и структуры, которые могут появляться в документе, а XML - нет.

  3. XSD обеспечивает правильную интерпретацию данных, а XML - нет.

  4. Документ XSD проверяется как XML, но обратное не всегда может быть верным.

  5. XSD лучше распознает ошибки, чем XML.

XSD определяет элементы, которые могут использоваться в документах, относящиеся к фактическим данным, с помощью которых они должны быть закодированы.
например:
дата, выраженная как 1/12/2010, может означать 12 января или 1 декабря. Объявление типа данных даты в документе XSD гарантирует, что он соответствует формату, продиктованному XSD.

Череп
источник
В первом заявлении все описывалось.
Ojonugwa Jude Ochalifu
6

XML против XSD

XML - определяет синтаксис из элементов и атрибутов для структурирования данных в хорошо сформированный документе.

XSD (он же XML - схемы) , как DTD ранее, полномочия е X растяжимость в XML , позволяя пользователю определить словарный запас и грамматику из элементов и атрибутов в действительный XML документа.

kjhughes
источник
6

ПРОСТОЙ ПРИМЕР XML:

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

XSD ВЫШЕ XML (объяснено):

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

Вот:

хз: элемент : определяет элемент.

xs: последовательность : обозначает, что дочерние элементы появляются только в указанном порядке.

хз: ComplexType : означает, что он содержит другие элементы.

хз: simpleType : Означает, что они не содержат других элементов.

тип: строка, десятичное число, целое число, логическое значение, дата, время,

  • Проще говоря , xsd - это еще один способ представления и проверки XML-данных определенного типа.
  • С помощью дополнительных атрибутов мы можем выполнять несколько операций.

  • Выполнить любую задачу на xsd проще, чем на xml.

shubham1js
источник
Здравствуй! Какую программу я использую для создания файла XSD?
Джудит
Программа @Judith? Вы можете объяснить свой вопрос. как редактор, язык или инструмент?
shubham1js
1

По сути, XSD-файл определяет, как будет выглядеть XML-файл. Это файл схемы который определяет структуру файла XML. Таким образом, он указывает, какие есть возможные поля и какого размера они будут.

XML-файл является экземпляром XSD, поскольку он использует правила, определенные в XSD.

SelMez
источник
0

XML имеет гораздо более широкое применение, чем f.ex. HTML. У него нет встроенного или стандартного "приложения". Итак, хотя вам может быть все равно, что веб-страницы также управляются тем, что разрешено, со стороны автора вы, вероятно, захотите точно определить, что XML-документ может содержать, а что не может.

Это похоже на разработку базы данных.

Особенность технологий XML в том, что они текстовые по своей природе. С XSD это означает, что у вас есть среда определения структуры данных, которую можно «подключить» к инструментам обработки текста, таким как PHP. Таким образом, вы можете не только манипулировать самими данными, но также очень легко изменять и документировать структуру и даже автоматически создавать интерфейсы.

С этой точки зрения XSD является «связующим звеном» или «промежуточным программным обеспечением» между данными (XML) и инструментами обработки данных.

Hatebit
источник