Condividi tramite


Creazione e modifica di uno schema XML

Le classi nello spazio dei nomi System.Xml.Schema si associano alle strutture definite nella raccomandazione XML Schema del World Wide Web Consortium (W3C). Dal momento che alcuni elementi dello schema possono avere attributi e contenere elementi figli, le classi corrispondenti nel modello SOM (Schema Object Model) dispongono di proprietà che possono contenere attributi ed elementi figli.

È possibile manipolare uno schema in memoria attraversando il modello SOM e impostando o annullando l'impostazione delle proprietà, per determinare la corrispondenza con la creazione, inserimento o eliminazione di nodi e attributi in un documento di schema. In base alla raccomandazione XML Schema del W3C , il modello di contenuto di uno schema viene indicato come:

Content: ((include | import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*).

Mentre si aggiungono nuovi elementi al modello SOM, il primo gruppo di elementi nel modello di contenuto (include, import e redefine) deve essere aggiunto all'insieme Schema.Includes e i restanti elementi nel modello di contenuto devono essere aggiunti all'insieme Schema.Items.

Nell'esempio che segue viene creato uno schema XML vuoto, viene modificato lo schema per contenere un elemento, Price, che ha un tipo di xs:integer, quindi si modifica lo schema per nidificare un elemento simpleType che ha una base di restrizione di tipo xs:positiveInteger.

Imports System.IO
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Text
Imports Microsoft.VisualBasic

Public Class EditSOM
  
Public Shared Sub ValidationCallbackOne(sender As Object, args As ValidationEventArgs)
      
      If args.Severity = XmlSeverityType.Warning Then
         Console.Write("WARNING: ")
      Else
         If args.Severity = XmlSeverityType.Error Then
            Console.Write("ERROR: ")
         End If 
      End If
      Console.WriteLine(args.Message)
   End Sub ' ValidationCallbackOne
   
    
   
Public Shared Sub Main()
      
      
      Dim schema As New XmlSchema()
      Console.WriteLine("Printing empty schema...")
      
      schema.Compile(AddressOf ValidationCallbackOne)
      schema.Write(Console.Out)
      Console.WriteLine(ControlChars.CrLf & ControlChars.CrLf)
      
      
      Dim priceElem As New XmlSchemaElement()
      priceElem.Name = "Price"
      priceElem.SchemaTypeName = New XmlQualifiedName("integer", "http://www.w3.org/2001/XMLSchema")
      
      schema.Items.Add(priceElem)
      schema.Compile(AddressOf ValidationCallbackOne)
      Console.WriteLine("Printing modified schema containing element with type=""integer""")
      schema.Write(Console.Out)
      Console.WriteLine(ControlChars.CrLf & ControlChars.CrLf)

      
      priceElem.SchemaTypeName = Nothing
      
      Dim PriceType As New XmlSchemaSimpleType()
      
      Dim PriceRestriction As New XmlSchemaSimpleTypeRestriction()
      PriceRestriction.BaseTypeName = New XmlQualifiedName("positiveInteger", "http://www.w3.org/2001/XMLSchema")
      PriceType.Content = PriceRestriction
      
      Dim maxExclusive As New XmlSchemaMaxExclusiveFacet()
      maxExclusive.Value = "100"
      PriceRestriction.Facets.Add(maxExclusive)
      
      priceElem.SchemaType = PriceType
      
      schema.Compile(AddressOf ValidationCallbackOne)
      Console.WriteLine("Printing modified schema containing element with nested simpleType")
      schema.Write(Console.Out)
   End Sub 'Main 
End Class 'EditSOM 
' Main(string[]) 

' EditSOM
[C#]
using System.IO; 
using System;
using System.Xml;  
using System.Xml.Schema;
using System.Text; 

public class EditSOM {

    public static void ValidationCallbackOne(object sender, ValidationEventArgs args) {

if(args.Severity == XmlSeverityType.Warning)
   Console.Write("WARNING: ");
      else if(args.Severity == XmlSeverityType.Error)
   Console.Write("ERROR: ");

      Console.WriteLine(args.Message);
    }

    public static void Main(string[] args){
      

        
      XmlSchema schema = new XmlSchema();        
      Console.WriteLine("Printing empty schema...");
        
      schema.Compile(new ValidationEventHandler(ValidationCallbackOne));
      schema.Write(Console.Out);
      Console.WriteLine("\n\n");
      
      
   XmlSchemaElement priceElem = new XmlSchemaElement();
   priceElem.Name = "Price"; 
   priceElem.SchemaTypeName =  new XmlQualifiedName("integer", "http://www.w3.org/2001/XMLSchema");

   schema.Items.Add(priceElem);
   schema.Compile(new ValidationEventHandler(ValidationCallbackOne));
   Console.WriteLine("Printing modified schema containing element with type=\"integer\"");
   schema.Write(Console.Out);
   Console.WriteLine("\n\n");
   
   priceElem.SchemaTypeName =  null; 
   
   XmlSchemaSimpleType PriceType = new XmlSchemaSimpleType();

   XmlSchemaSimpleTypeRestriction PriceRestriction = 
     new XmlSchemaSimpleTypeRestriction();
   PriceRestriction.BaseTypeName = 
     new XmlQualifiedName("positiveInteger", "http://www.w3.org/2001/XMLSchema");
   PriceType.Content = PriceRestriction; 

   XmlSchemaMaxExclusiveFacet maxExclusive = 
     new XmlSchemaMaxExclusiveFacet();
   maxExclusive.Value = "100";
   PriceRestriction.Facets.Add(maxExclusive);

   priceElem.SchemaType = PriceType; 

   schema.Compile(new ValidationEventHandler(ValidationCallbackOne));
   Console.WriteLine("Printing modified schema containing element with nested simpleType");
   schema.Write(Console.Out);


    }/* Main(string[]) */

}// EditSOM

L'output che segue è generato dall'esempio di codice precedente.

Printing empty schema...
    <?xml version="1.0"?>
    <schema  xmlns="http://www.w3.org/2001/XMLSchema">
    </schema>
  Printing modified schema containing element with type="integer"
   <?xml version="1.0"?>
      <schema  xmlns="http://www.w3.org/2001/XMLSchema">   
      <element name="Price" type="integer"/>
      </schema>
  Printing modified schema containing element with nested simpleType
  <?xml version="1.0"?>
      <schema  xmlns="http://www.w3.org/2001/XMLSchema" 
      xmlns:apo="http://www.example.com/PO1">
      <element name="Price">
          <simpleType>
            <restiction base="positiveInteger"> 
        <maxExclusive="100" />
       </restriction>
      </simpleType>
    </element>
    </schema>

Vedere anche

SOM (Schema Object Model) XML | Riferimento agli schemi XML (XSD) | Spazio dei nomi System.Xml.Schema