Compartir a través de


Generar y editar esquemas XML

Las clases del espacio de nombres System.Xml.Schema se asignan a las estructuras definidas en la recomendación de XML Schema del W3C (World Wide Web Consortium). Puesto que algunos elementos del esquema pueden tener atributos y contener elementos secundarios, las clases correspondientes en SOM (Schema Object Model, Modelo de objetos de esquemas) tienen propiedades que pueden contener atributos y elementos secundarios.

Puede manipular un esquema en la memoria si recorre SOM y establece o anula ciertas propiedades, en función de la creación, inserción o eliminación de nodos y atributos en un documento de esquema. De acuerdo con la recomendación de XML Schema del W3C, el modelo de contenido de un esquema dado es el siguiente:

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

Al tiempo que se agregan nuevos elementos a SOM, se debe agregar el primer conjunto de elementos del modelo de contenido (include, import y redefine) a la colección Schema.Includes y los demás elementos del modelo de contenido se deben agregar a la colección Schema.Items.

En el ejemplo siguiente se crea un esquema XML vacío, se modifica el esquema para que contenga un elemento Price con el tipo xs:integer y, a continuación, se vuelve a modificar el esquema para anidar un elemento simpleType que tiene una base de restricción de 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

La salida siguiente se genera a partir del ejemplo de código anterior.

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>

Vea también

Modelo de objetos de esquemas XML (SOM) | Referencia de esquemas XML (XSD) | System.Xml.Schema (Espacio de nombres)