2012-03-21 12 views
5

ho visto un tale campione:Rif attributo o attributo Type in XSD

<xsd:element name="Product"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ProductName" type="xsd:string" /> 
      <xsd:element name="Customer" type="xsd:CustomerType" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="CustomerType"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FullName" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:occupation" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

e mi chiedo perché qualcuno avrebbe scelto quello type invece di ref in tal caso:

<xsd:element name="Product"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ProductName" type="xsd:string" /> 
      <xsd:element ref="Customer" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="Customer"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FullName" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:occupation" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Cosa sarebbe il lato positivo dell'uso di Type invece di ref, qualcuno può spiegarmi? Quello che so è ref può anche avere l'opzione minOccurs e maxOccurs in modo da poter definire ref come matrici nel codice deserializzato.

risposta

5

Ci sono molti modi per osservare questo. Immagino che tutto sia iniziato con alcuni principi di base, come la coerenza nello stile dell'autore. Da lì, le persone hanno iniziato ad analizzare le implicazioni di fare da una parte all'altra; i nomi sono stati dati: bambola russa, fetta di salame, tende veneziane, il giardino dell'Eden. Se desideri saperne di più, una ricerca sugli stili di authoring XSD, chiamati anche modelli di design per XSD, produrrà una miriade di siti che trattano questo argomento. Questo link e this one sono piuttosto buoni riferimenti "fast-food" con cui vorrei iniziare ... Anche se non sono d'accordo con alcune affermazioni, ad es. contains only one global element (quindi, se definisco uno schema rq/rs per un servizio Web, non sarei conforme?) Nel complesso è un buon antipasto.

Nel tuo caso, la definizione coerente di modelli di contenuto basati su elementi di riferimento è un'indicazione di un modello "Salame Slice": tutti gli elementi globali, i tipi locali (anonimi). La prima implicazione è che non è possibile sbarazzarsi di uno spazio dei nomi associato a un tag.

Non utilizzare gli elementi di riferimento, ma invece fare affidamento sulle definizioni locali, con tipi globali, indica un modello "Veneziana". In linea con il commento dello spazio dei nomi sopra, con questo approccio è ora possibile controllare gli spazi dei nomi impostando l'attributo elementFormDefault sull'elemento dello schema.

I minOccurs/maxOccurs associati alle particelle non sono rilevanti qui. Per un elemento globale, questi attributi non si applicano. Per le particelle del modello di contenuto, gli elementi di un tipo, se l'elemento è rif o locale, non fa alcuna differenza.

+0

Il tuo primo collegamento sembra essere rotto. – BrianTheLion

+0

@BrianTheLion, ho aggiornato il primo link. –

Problemi correlati