2009-11-13 17 views
11

Sono nuovo di XSD e sono abbastanza confuso su quando utilizzare l'attributo e quando utilizzare l'elemento?XSD: differenza tra elemento e attributo

Perché non possiamo specificare minOccurs e maxOccurs nell'attributo?

Inoltre, perché non è possibile specificare use = "required" nell'elemento?

+0

Possibile duplicato di [attributo XML vs elemento XML] (http://stackoverflow.com/questions/33746/xml-attribute-vs-xml-element) – kjhughes

risposta

25

Un elemento è un elemento XML - un tag di apertura, alcuni contenuti, un tag di chiusura - sono gli elementi costitutivi del documento XML:

<test>someValue</test> 

Qui "test" sarebbe un elemento.

attributi è un informazioni aggiuntive su un tag - è un o di un info "add-on" in più su un elemento, ma non potrà mai esistere da solo:

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

"id" è un attributo.

Non è possibile avere più attributi con lo stesso nome su un singolo tag -> minOccurs/maxOccurs non ha senso. È possibile definire obbligatorio (o meno) per un attributo - qualsiasi altra cosa non ha senso.

Gli elementi sono definiti dalla loro presenza all'interno di tipi complessi - ad es. se si dispone di un tipo complesso con un <xs:sequence> all'interno - si definisce che tutti gli elementi devono essere presenti e devono i in questo particolare ordine:

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

All'interno di un elemento di questo tipo, i sottoelementi "Element1" e "Element2" sono obbligatori e devono apparire in questo ordine - non c'è bisogno di "richiesto" o meno (come con gli attributi). Se un elemento è richiesto o meno è definito dall'uso di minOccurs e maxOccurs; entrambi sono = 1 per impostazione predefinita, ad es. l'elemento deve verificarsi e può verificarsi solo una volta. Modificando queste impostazioni, puoi definire un elemento come facoltativo (minOccurs = 0) o permetterlo di apparire più volte (maxOccurs> 1).

Consiglio vivamente di dare un'occhiata allo W3Schools Tutorial on XML Schema e saperne di più sullo schema XML.

Marc

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

Non si può avere più di un attributo con lo stesso nome in XML, quindi non è possibile utilizzare minOccurs e maxOccurs per gli attributi.

Non è necessario utilizzare = "obbligatorio" per gli elementi perché è possibile avere minOccurs = "1".

È la vostra scelta quando utilizzare gli attributi e quando utilizzare gli elementi. Ecco alcune linee guida: http://www.ibm.com/developerworks/xml/library/x-eleatt.html

3

Un elemento è un nodo XML e può contenere altri nodi o attributi. Può essere un tipo semplice o un tipo complesso. È un'entità XML.

Un attributo è un descrittore. Non può contenere nulla e può essere solo un tipo semplice.

Dai un'occhiata allo this. Naturalmente, si può solo google qualcosa come "elemento XML vs attributo"

+0

A differenza delle altre risposte, che sembrano cercare di spiegare * come * definire un elemento/attributo, sei al punto. – dstibbe

4

Esempio: XSD Formato

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

formato XML

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


attribute è opzionale per impostazione predefinita. Per specificare che l'attributo è obbligatorio, utilizzare l'attributo use:

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

Maggiori informazioni su attributes e elements.

Un elemento complexType è un elemento XML che contiene altri elementi e/o attributi.

L'elemento all specifica che gli elementi figlio possono apparire in qualsiasi ordine e che ogni elemento figlio può verificarsi zero o una volta.

maxOccurs Opzionale. Specifica il numero massimo di volte che l'elemento può verificarsi. Il valore deve essere 1.

minOccurs Opzionale. Specifica il numero minimo di volte che l'elemento può verificarsi. Il valore può essere 0 o 1. Il valore predefinito è 1