Jaka jest różnica między XML a XSD?

111

Jaka jest różnica między Extensible Markup Language (XML) a XML Schema (XSD)?

Gandalf StormCrow
źródło

Odpowiedzi:

145

Właściwie XSD to sam XML. Jego celem jest sprawdzenie struktury innego dokumentu XML. XSD nie jest obowiązkowe dla żadnego XML, ale zapewnia, że ​​XML może być używany do określonych celów. XML zawiera tylko dane w odpowiednim formacie i strukturze.

anthares
źródło
Nie mam wątpliwości - jeśli osoba trzecia przesłała mi dokument .XSD z takimi elementami jak: <xs: element name = "QuoteRequestID" type = "xs: unsignedLong" minOccurs = "0" /> w zestawie - to tylko opis pól, prawda? Czy rozsądne jest poproszenie ich o rzeczywistą próbkę żądania, która będzie surowym plikiem XML z <QuoteResultID> itp. Itp.
James Wilson,
3
Z pewnością możesz ich zapytać. Możesz także użyć niektórych narzędzi online, które mogą to zrobić, na przykład tego - xsd2xml . Po prostu wklej xsd, a na jego podstawie wygeneruje przykładowy dokument xml.
anthares
@anthares, próbowałem link z: <?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> ale skończyło się na wyświetleniu błędu: Error!!! The 'minOccurs' attribute cannot be present.
heretoinfinity
Dlaczego miałoby to stanowić problem?
heretoinfinity
111


Brać przykład

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

i zaprojektuj w tym celu 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>


Co nie jest możliwe w przypadku XSD: chciałbym go najpierw zapisać, ponieważ lista jest bardzo mała
1) Nie można sprawdzić poprawności węzła / atrybutu przy użyciu wartości innego węzła / atrybutu.
2) To jest ograniczenie: element zdefiniowany w pliku XSD musi mieć tylko jeden typ danych. [w powyższym przykładzie, aby <child_two>pojawić się w innym <parent>węźle, typ danych nie może być zdefiniowany inaczej niż int.
3) Nie możesz zignorować walidacji elementów i atrybutów, tj. Jeśli element / atrybut pojawia się w XML, musi być dobrze zdefiniowany w odpowiednim pliku XSD. Chociaż użycie na <xsd:any>to pozwala, ale ma swoje własne zasady. Nieprzestrzeganie, które prowadzi do błędu walidacji. Próbowałem zastosować podobne podejście i na pewno się nie udało, oto pytania i odpowiedzi


co jest możliwe z XSD:
1) Możesz przetestować właściwą hierarchię węzłów XML. [xsd określa, które dziecko powinno podlegać któremu rodzicowi itp., co będzie liczone jako błąd, w powyższym przykładzie child_two nie może być bezpośrednim dzieckiem roota, ale jest to element potomny tagu "parent", który z kolei jest dziecko węzła "root", istnieje hierarchia ..]
2) Można zdefiniować typ danych wartości węzłów. [w powyższym przykładzie child_two nie może mieć żadnych innych danych niż liczba]
3) Możesz również zdefiniować własne typy danych, [na przykład dla węzła <month>, możliwe dane mogą być jednym z 12 miesięcy .. więc musisz zdefiniować wszystkie 12 miesięcy w nowym typie danych, zapisując wszystkie 12-miesięczne nazwy jako wartości wyliczenia.
4) Możesz nałożyć ograniczenie na występowanie elementów, używając minOccurs i maxOccurs, wartości domyślne to 1 i 1.

.. i wiele więcej ...

InfantPro'Aravind '
źródło
1
@ InfantPro'Aravind 'Co miałeś na myśli mówiąc „Nie możesz zweryfikować węzła / atrybutu używając wartości innego węzła / atrybutu.”. Dlaczego ktoś miałby to robić?
Geek,
@Geek stackoverflow.com/questions/4126988/…
InfantPro'Aravind '
„Nie można sprawdzić poprawności węzła / atrybutu, używając wartości innego węzła / atrybutu”. Co to znaczy
GrowinMan
@ GrowinMan, Walidacja warunkowa (nie relacja rodzic-dziecko) Np .: Jeśli to jest Twój xml: <root> <A>A</A> <B/> <C/> </root>a jeśli Node <A>to <A>B</A>, ustaw jako <B>obowiązkowe, <A>C</A>a jeśli to zrób <C>obowiązkowe.
InfantPro'Aravind '
Powyższego wymogu nie da się osiągnąć za pomocą samego XSD
InfantPro'Aravind '
15

XSD:
XSD (XML Schema Definition) określa, jak formalnie opisywać elementy w dokumencie Extensible Markup Language (XML).
XML:
XML został zaprojektowany do opisu danych i jest niezależny od oprogramowania i sprzętu.
Poprawia następujące rzeczy.
-Udostępnianie danych.
-Niezależne od platformy.
-Zwiększenie dostępności danych.

Różnice:

  1. XSD jest oparty i napisany w języku XML.

  2. XSD definiuje elementy i struktury, które mogą pojawić się w dokumencie, podczas gdy XML nie.

  3. XSD zapewnia, że ​​dane są poprawnie interpretowane, podczas gdy XML nie.

  4. Dokument XSD jest weryfikowany jako XML, ale nie zawsze może być odwrotnie.

  5. XSD lepiej wychwytuje błędy niż XML.

XSD definiuje elementy, które można wykorzystać w dokumentach, odnoszące się do faktycznych danych, którymi ma być zakodowany.
na przykład:
Data wyrażona jako 12.01.2010 może oznaczać 12 stycznia lub 1 grudnia. Zadeklarowanie typu danych daty w dokumencie XSD zapewnia, że ​​jest on zgodny z formatem narzuconym przez XSD.

Czaszka
źródło
Pierwsza wypowiedź opisała wszystko.
Ojonugwa Jude Ochalifu
6

PROSTY PRZYKŁAD XML:

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

XSD POWYŻEJ XML (wyjaśnione):

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

Tutaj:

xs: element : definiuje element.

xs: sequence : oznacza, że ​​elementy podrzędne pojawiają się tylko w podanej kolejności.

xs: complexType : oznacza, że ​​zawiera inne elementy.

xs: simpleType : Oznacza, że ​​nie zawierają innych elementów.

typ: string, decimal, integer, boolean, date, time,

  • Mówiąc prościej , xsd to inny sposób reprezentowania i sprawdzania poprawności danych XML za pomocą określonego typu.
  • Za pomocą dodatkowych atrybutów możemy wykonać wiele operacji.

  • Wykonywanie dowolnego zadania na xsd jest prostsze niż xml.

shubham1js
źródło
Cześć! Jakiego programu używam do tworzenia pliku XSD?
Judith
Program @Judith? czy możesz wyjaśnić swoje pytanie. jak edytor, język czy narzędzie?
shubham1js
1

Zasadniczo plik XSD określa, jak będzie wyglądał plik XML. Jest to plik schematu, który definiuje strukturę pliku XML. Więc określa, jakie są możliwe pola i jaki będzie rozmiar.

Plik XML jest instancją XSD, ponieważ używa reguł zdefiniowanych w XSD.

SelMez
źródło
0

XML ma znacznie szersze zastosowanie niż np. HTML. Nie ma wewnętrznej ani domyślnej „aplikacji”. Tak więc, chociaż możesz nie przejmować się tym, że strony internetowe są również regulowane przez to, co jest dozwolone, ze strony autora prawdopodobnie będziesz chciał precyzyjnie zdefiniować, co dokument XML może, a czego nie może zawierać.

To jak projektowanie bazy danych.

W technologiach XML chodzi o to, że mają one charakter tekstowy. Dzięki XSD oznacza to, że masz strukturę definicji struktury danych, którą można „podłączyć” do narzędzi przetwarzania tekstu, takich jak PHP. Dzięki temu możesz nie tylko manipulować danymi, ale także bardzo łatwo zmieniać i dokumentować strukturę, a nawet automatycznie generować interfejsy.

Patrząc w ten sposób, XSD jest „klejem” lub „oprogramowaniem pośrednim” między danymi (XML) a narzędziami do ich przetwarzania.

Hatebit
źródło