Condividi tramite


Supporto dell'associazione all'elemento Schema

Questo argomento è specifico di una tecnologia legacy. Servizi Web XML e client di servizi Web XML devono essere creati attualmente tramite Windows Communication Foundation.

In .NET Framework è incluso il supporto per l'associazione all'elemento <schema> .

L'elemento <schema> è l'elemento radice di un documento XML Schema.

Descrizione

L'elemento <schema> è l'elemento radice di un documento XML Schema.

Tra gli attributi di tale elemento, gli attributi **<>**blockDefault, finalDefault, id e version non presentano associazioni alle entità del codice .NET Framework. L'attributo targetNamespace è riconosciuto mentre gli attributi attributeFormDefault e elementFormDefault sono riconosciuti solo in parte. Fare riferimento alla tabella riportata di seguito. Per informazioni dettagliate, fare riferimento agli argomenti relativi ai singoli attributi.

Attributo targetNamespace

L'attributo targetNamespace dell'elemento radice <schema> specifica lo spazio dei nomi dello schema come URI (Uniform Resource Identifier). Lo strumento Xsd.exe correla l'attributo targetNamespace dell'elemento <schema> alle proprietà Namespace di vari attributi relativi a XML.

Durante la generazione di codice sorgente da un documento XML Schema, Xsd.exe utilizza il valore targetNamespace nel modo seguente:

  • Per ogni tipo generato corrispondente a un tipo di dati nello schema, Xsd.exe imposta la proprietà System.Xml.Serialization.XmlTypeAttribute.Namespace sul valore targetNamespace.

  • Per ogni tipo generato corrispondente a un tipo di dati che potrebbe essere visualizzato come radice di un documento XML conforme allo schema, Xsd.exe imposta la proprietà System.Xml.Serialization.XmlRootAttribute.Namespace sul valore targetNamespace. Un tipo di dati può essere visualizzato come home directory se viene utilizzato da un elemento <element> dichiarato globalmente (come figlio dell'elemento radice <schema>).

Durante la generazione di un documento XML Schema da un set di classi di un assembly, Xsd.exe crea un documento XML Schema con un attributo targetNamespace univoco per ogni valore univoco rilevato nella proprietà Namespace di determinate classi di attributi relative a XML. La proprietà viene visualizzata nel modo seguente:

Attributo attributeFormDefault

L'utilità Xsd.exe genera schemi XML che lasciano l'attributo attributeFormDefault globale non specificato. Quando rileva l'attributo in uno schema esistente, imposta nel modo appropriato la proprietà Form dell'attributo XmlAttributeAttribute di ogni campo non sottoposto a ovveride.

Spiegazione: attributo attributeFormDefault

XML Schema richiede che tutti gli elementi e gli attributi dichiarati globalmente (come figli dell'elemento <schema>) risultino qualificati come spazi dei nomi in un documento di istanza. Per gli elementi e gli attributi dichiarati localmente, ovvero all'interno di una definizione <complexType>, la qualifica come spazio dei nomi è facoltativa.

Per controllare la qualifica come spazio dei nomi per tutti gli elementi e gli attributi locali dichiarati in un documento XML Schema, utilizzare rispettivamente gli attributi elementFormDefault e attributeFormDefault dell'elemento radice <schema>. Per entrambi gli attributi, i valori possibili sono qualified e unqualified, che è anche il valore predefinito.

È inoltre possibile utilizzare l'attributo form in una dichiarazione <element> o <attribute> locale per eseguire l'override dell'impostazione predefinita dello schema per quel particolare elemento o attributo.

Nella tabella seguente viene descritta la modalità di elaborazione in Xsd.exe delle tre possibili opzioni per attributeFormDefault, ovvero qualified, unqualified, non specificato. Tenere presente che, durante la generazione di codice sorgente da un documento XML Schema, viene creato un campo pubblico per ogni attributo XML e applicato a tale campo l'attributo XmlAttributeAttribute di .NET Framework.

Valori attributeFormDefault possibili

Codice sorgente generato da XSD in Xsd.exe

XSD generato in Xsd.exe da assembly compilato dallo stesso sorgente

attributeFormDefault="unqualified"

Le classi e i campi corrispondenti agli attributi vengono visualizzati senza specificare alcuna forma.

Non specificato, viene ripristinata l'impostazione predefinita attributeFormDefault="unqualified".

Unspecified

Le classi e i campi corrispondenti agli attributi vengono visualizzati senza specificare alcuna forma.

Non specificato, viene ripristinata l'impostazione predefinita attributeFormDefault="unqualified".

attributeFormDefault="qualified"

I campi corrispondenti sia agli attributi dichiarati localmente che a quelli di riferimento dichiarati globalmente vengono visualizzato con un attributo XmlAttribute a cui viene passato Form=XmlSchemaForm.Qualified.

Non specificato, viene ripristinata l'impostazione predefinita attributeFormDefault="unqualified".

Inoltre, ogni dichiarazione di attributo specifica form="qualified" inclusi gli attributi di riferimento dichiarati globalmente.

Il parametro passato alla dichiarazione XmlAttribute imposta la proprietà Form, i cui valori possibili derivano dall'enumerazione XmlSchemaForm:

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: impostazione predefinita

In seguito all'utilizzo di un parametro XmlAttribute quella che era un'impostazione globale nel documento XSD originale viene specificata in base a un attributo XML nel codice sorgente e nell'XSD generato. Si suppone sempre che l'attributo attributeFormDefault globale non sia specificato, ripristinando il valore predefinito unqualified.

Esempio: attributo attributeFormDefault

Documento XML Schema di input in cui attributeFormDefault="qualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:attribute name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
    <xsd:attribute ref="version" />
    <xsd:attribute name="public" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Classe C# generata dal precedente documento XML Schema:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string version;
        
    System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public bool @public;
}

Elemento radice <schema> di XML Schema generato da un assembly compilato dal codice sorgente C# precedente (anche le dichiarazioni di attributo vengono visualizzate senza l'attributo form):

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   ...
</xs:schema>

Attributo elementFormDefault

L'utilità Xsd.exe genera schemi XML che lasciano l'attributo elementFormDefault globale impostato su "qualified". Quando l'attributo viene rilevato in uno schema esistente, imposta nel modo appropriato la proprietà Form dell'attributo XmlElementAttribute di ogni campo non sottoposto a ovveride.

Spiegazione: attributo elementFormDefault

XML Schema richiede che tutti gli elementi e gli attributi dichiarati globalmente (come figli dell'elemento <schema>) risultino qualificati come spazi dei nomi in un documento di istanza. Per gli elementi e gli attributi dichiarati localmente, ovvero all'interno di una definizione <complexType>, la qualifica come spazio dei nomi è facoltativa.

Per controllare la qualifica come spazio dei nomi per tutti gli elementi e gli attributi locali dichiarati in un documento XML Schema, utilizzare rispettivamente gli attributi elementFormDefault e attributeFormDefault dell'elemento radice <schema>. Per entrambi gli attributi, i valori possibili sono qualified e unqualified, che è anche il valore predefinito.

È inoltre possibile utilizzare l'attributo form in una dichiarazione <element> o <attribute> locale per eseguire l'override dell'impostazione predefinita dello schema per quel particolare elemento o attributo.

Sebbene il valore predefinito di elementFormDefault sia unqualified, .NET Framework considera in realtà qualified come impostazione predefinita, continuando a rispettare l'utilizzo di unqualified. Nella tabella seguente viene descritta la modalità di elaborazione in Xsd.exe delle tre possibili opzioni per elementFormDefault, ovvero qualified, unqualified, non specificato. Tenere presente che, durante la generazione di codice sorgente da un documento XML Schema, in Xsd.exe viene creato un campo pubblico per ogni elemento XML.

Valori elementFormDefault possibili

Codice sorgente generato da XSD in Xsd.exe

XSD generato in Xsd.exe da assembly compilato dallo stesso sorgente

elementFormDefault="qualified"

Le classi e i campi corrispondenti agli elementi vengono visualizzati senza specificare alcuna forma.

elementFormDefault="qualified"

Unspecified

Le classi e i campi corrispondenti agli elementi vengono visualizzati senza specificare alcuna forma.

elementFormDefault="qualified"

elementFormDefault="unqualified"

I campi corrispondenti agli elementi dichiarati localmente vengono visualizzati con un attributo XmlElement a cui viene passato Form=XmlSchemaForm.Unqualified. I campi corrispondenti agli elementi di riferimento dichiarati globalmente vengono visualizzati senza specificare alcuna forma.

elementFormDefault="qualified"

Inoltre, per ogni elemento dichiarato localmente in origine viene utilizzata l'impostazione form="unqualified". Gli elementi dichiarati globalmente in origine vengono visualizzati localmente senza un attributo form.

Il parametro passato alla dichiarazione XmlElement imposta la proprietà Form, i cui valori possibili derivano dall'enumerazione XmlSchemaForm:

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: impostazione predefinita

In seguito all'utilizzo di un parametro XmlElement quella che era un'impostazione globale nel documento XSD originale viene specificata in base a ciascun elemento XML nel codice sorgente e nell'XSD generato. Si suppone che l'attributo elementFormDefault globale abbia sempre il valore qualified.

Esempio: attributo elementFormDefault

Documento XML Schema di input in cui elementFormDefault="unqualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
  <xsd:element name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
      <xsd:sequence>
      <xsd:element ref="version" />
      <xsd:element name="public" type="xsd:boolean" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Classe C# generata dal precedente documento XML Schema:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
 public class keyInfo {
        
     public string version;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public bool @public;
}

Documento XML Schema generato da un assembly compilato dal codice sorgente C# precedente:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="key" type="tns:keyInfo" />
  <xs:complexType name="keyInfo">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Attributi possibili Supporto per l'associazione

attributeFormDefault

.NET Framework riconosce il valore predefinito unqualified. Lo strumento Xsd.exe converte un valore qualified in base a ciascun campo, impostando nel modo appropriato la proprietà Form dell'attributo XmlAttributeAttribute di ogni campo non sottoposto a override.

Vedere la sezione precedente Attributo AttributeFormDefault.

blockDefault

L'attributo blockDefault dell'elemento <schema> fornisce un valore predefinito per gli attributi block degli elementi <complexType> ed <element>.

Lo strumento Xsd.exe ignora l'attributo blockDefault dell'elemento <schema>, nonché l'attributo block nei rispettivi elementi.

elementFormDefault

In .NET Framework viene utilizzato in modo efficace un valore predefinito differente, ovvero qualified. Lo strumento Xsd.exe genera sempre un elemento <schema> con l'impostazione elementFormDefault="qualified". Converte inoltre un valore unqualified in base a ciascun campo, impostando nel modo appropriato la proprietà Form dell'attributo XmlElementAttribute di ogni campo non sottoposto a override.

Vedere la sezione precedente Attributo ElementFormDefault.

finalDefault

L'attributo finalDefault dell'elemento <schema> fornisce un valore predefinito per gli attributi final di determinati elementi.

Lo strumento Xsd.exe ignora l'attributo finalDefault dell'elemento <schema>, nonché l'attributo final nei rispettivi elementi.

id

L'utilità Xsd.exe ignora l'attributo id che fornisce un identificatore univoco

xml:lang

Xsd.exe ignora l'attributo lang dello spazio dei nomi http://www.w3.org/XML/1198, quando viene utilizzato nell'elemento radice <schema>.

targetNamespace

Lo strumento Xsd.exe correla l'attributo targetNamespace dell'elemento <schema> alle proprietà Namespace di vari attributi relativi a XML. La scelta degli attributi da utilizzare dipende dalla direzione della conversione.

Vedere la sezione precedente Attributo TargetNamespace.

version

L'attributo version è disponibile per la documentazione e viene ignorato in Xsd.exe.

Elementi padre possibili: nessuno (elemento radice)

Elementi figlio possibili: <annotation>, <attribute>, <attributeGroup>, <complexType>, <element>, <group>, <import>, <include>, <notation>, <redefine>, <simpleType>

Vedere anche

Riferimento

XmlSchema