2009-11-13 19 views
11

Jestem nowy w XSD i jestem bardzo zdezorientowany, kiedy użyć atrybutu i kiedy użyć elementu?XSD: różnica między elementem a atrybutem

Dlaczego nie możemy podać minOccurs i maxOccurs w atrybucie?

Ponadto, dlaczego nie możemy podać use = "required" w elemencie?

+0

Prawdopodobny duplikat [atrybutu XML vs element XML] (http://stackoverflow.com/questions/33746/xml-attribute-vs-xml-element) – kjhughes

Odpowiedz

25

element jest elementem XML - tag otwarcia, niektóre treści, tag zamykający - są budulcem dokumentu XML:

<test>someValue</test> 

Tutaj "test" byłby elementem.

Atrybuty jest dodatkowym informacji na tag - jest to „dodatek” lub dodatkowe informacje o elemencie, ale nigdy nie może istnieć sam:

<test id="5">somevalue</test> 

„id” jest atrybutem.

Nie można mieć wielu atrybutów o tej samej nazwie na jednym tagu -> minOccurs/maxOccurs nie ma sensu. Możesz zdefiniować wymagane (lub nie) atrybuty - wszystko inne nie ma sensu.

Elementy definiowane są przez ich występowanie wewnątrz typów złożonych - np. jeśli masz typ złożony z <xs:sequence> wewnątrz - definiowania, że ​​wszystkie elementy muszą być obecne i musi się w tej konkretnej kolejności:

<xs:complexType name="SomeType"> 
    <xs:sequence>  
     <xs:element name="Element1" type="xs:string" /> 
     <xs:element name="Element2" type="xs:string" /> 
    </xs:sequence> 
</xs:complexType> 

Wewnątrz elementu tego typu, podelementy „element1” i "Element2" są wymagane i muszą pojawić się w tej kolejności - nie ma potrzeby "wymagane" lub nie (jak w przypadku atrybutów). To, czy element jest wymagany, określa się za pomocą minOccurs i maxOccurs; oba są domyślnie = 1, np. element musi wystąpić i może wystąpić tylko raz. Dostosowując te ustawienia, można zdefiniować element jako opcjonalny (minOccurs = 0) lub zezwolić na jego wyświetlenie kilka razy (maxOccurs> 1).

Zdecydowanie polecam zapoznać się z W3Schools Tutorial on XML Schema i dowiedzieć się więcej o schemacie XML.

Marc

3
<element myAttribute="value"> 
    <subElement /> 
    <subElement anotherAttribute="this is an attribute's value">Element value</subElement> 
</element> 

Nie można mieć więcej niż jeden atrybut o tej samej nazwie w formacie XML, a zatem nie można używać minOccurs i maxOccurs dla atrybutów.

Nie musisz używać = "wymagane" dla elementów, ponieważ zamiast tego możesz mieć minOccurs = "1".

To jest twój wybór, kiedy używać atrybutów i kiedy używać elementów. Oto kilka wskazówek: http://www.ibm.com/developerworks/xml/library/x-eleatt.html

3

Element jest węzłem XML - i może zawierać inne węzły lub atrybuty. Może to być typ prosty lub złożony. Jest to encja XML.

Atrybut jest deskryptorem. Nie może zawierać niczego i może być tylko prostym typem.

Spójrz na this. Oczywiście, można po prostu google coś w stylu „element XML vs atrybut”

+0

W przeciwieństwie do innych odpowiedzi, które wydają się próbować wyjaśnić, * jak * zdefiniować element/atrybut, jesteś na temat. – dstibbe

4

Przykład: XSD Format

<xs:complexType name="contactInformation"> 
    <xs:all> 
     <xs:element name="firstName" type="xs:string" minOccurs="0"/> 
     <xs:element name="workCountryId" type="xs:long" minOccurs="0"/> 
    </xs:all> 
    <xs:attribute name="id" type="xs:long"/> 
</xs:complexType> 

XML Format

<contactInformation id=100> 
    <firstname>VELU</firstname> 
    <workCountryId>120</workCountryId> 
</contactInformation> 


attribute jest opcja domyślnie. Aby określić, że atrybut jest wymagany, użyj atrybutu use:

np. <xs:attribute name="id" type="xs:long" use="required"/>

Więcej o attributes i elements.

Element complexType jest elementem XML zawierającym inne elementy i/lub atrybuty.

Element all określa, że ​​elementy potomne mogą pojawiać się w dowolnej kolejności i że każdy element podrzędny może wystąpić zero lub jeden raz.

maxOccurs Opcjonalne. Określa maksymalną liczbę razy, kiedy element może wystąpić. Wartość musi wynosić 1.

minOccurs Opcjonalne. Określa minimalną liczbę razy, kiedy element może wystąpić. Wartość może wynosić 0 lub 1. Wartość domyślna to 1