2009-06-29 18 views
8

Diciamo che voglio impostare un complexType generica in questo modo:Schema XML: impostazione di un valore predefinito per un complexType?

<xs:complexType name="button"> 
    <xs:sequence> 
     <xs:element name="id" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="href" type="xs:string" minOccurs="0" maxOccurs="1"/> 
     <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/> 
    </xs:sequence> 
</xs:complexType> 

E voglio fare riferimento a tale complexType in vari luoghi nel mio file di schema in questo modo:

<xs:element name="someButton" type="button" /> 

E 'possibile per io per impostare i valori predefiniti per i sotto-elementi del pulsante attraverso l'elemento someButton? (Cioè se voglio someButton di avere un'etichetta predefinita di "Go" o un href predefinito di "index.html")

Fondamentalmente ... adesso ho qualcosa di simile

<Field Name="State" DataSourceField="State" /> 

mi e' Sto cercando di rimuovere la ridondanza nel modo più semplice possibile.

risposta

18

No, solo per valori semplici. Ma forse puoi usarli per fare ciò che vuoi, dando valori predefiniti per tutte le parti semplici del tuo Tipo complesso. Tuttavia, funziona meglio per gli attributi che per gli elementi che hai (perché "I valori degli attributi di default si applicano quando mancano gli attributi, e i valori degli elementi predefiniti si applicano quando gli elementi sono vuoti" - vedi sotto). Attributi sono essi stessi facoltativi di default:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="button" type="button"/> 
    <xs:complexType name="button"> 
    <xs:attribute name="id" type="xs:string"/> 
    <xs:attribute name="href" type="xs:string" default="index.html"/> 
    <xs:attribute name="label" type="xs:string" default="Go"/> 
    </xs:complexType> 
</xs:schema> 

<button id="1"/> 

valori predefiniti di entrambi gli attributi e gli elementi sono dichiarate usando l'attributo predefinito, anche se questo attributo ha una conseguenza leggermente diverso in ciascun caso. Quando un attributo è dichiarato con un valore predefinito, il valore dell'attributo è qualsiasi valore visualizzato come valore dell'attributo in un documento di istanza; se l'attributo non appare nel documento dell'istanza, il processore dello schema fornisce all'attributo un valore uguale a quello dell'attributo predefinito. Si noti che i valori predefiniti per gli attributi hanno senso solo se gli attributi stessi sono opzionali, quindi è un errore specificare sia un valore predefinito che qualsiasi valore diverso da un valore facoltativo per l'uso.

Il processore dello schema tratta gli elementi predefiniti in modo leggermente diverso. Quando un elemento è dichiarato con un valore predefinito, il valore dell'elemento è qualunque valore appaia come contenuto dell'elemento nel documento dell'istanza; se l'elemento appare senza contenuto, il processore dello schema fornisce all'elemento un valore uguale a quello dell'attributo predefinito. Tuttavia, se l'elemento non appare nel documento di istanza, il processore dello schema non fornisce affatto l'elemento. In breve, le differenze tra valori predefiniti degli elementi e degli attributi possono essere definite come: I valori degli attributi predefiniti si applicano quando gli attributi sono mancanti e i valori degli elementi predefiniti si applicano quando gli elementi sono vuoti. [enfasi aggiunta]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

Problemi correlati