Freigeben über


Erstellen und Bearbeiten des XML-Schemas

Die Klassen im System.Xml.Schema-Namespace entsprechen den Strukturen, die in der XML-Schemaempfehlung des W3C (World Wide Web Consortium) festgelegt sind. Da einige Schemaelemente Attribute und untergeordnete Elemente beinhalten können, verfügen die entsprechenden Klassen im Schemaobjektmodell (SOM) über Eigenschaften, die ebenfalls Attribute und untergeordnete Elemente enthalten können.

Ein Schema im Speicher kann durch Traversieren des SOMs und entsprechende Einstellungen der Eigenschaften verändert werden, um mit erstellenden, einfügenden oder löschenden Knoten und Attributen eines Schemadokuments übereinzustimmen. Gemäß der XML-Schemaempfehlung des W3C wird das Inhaltsmodell eines Schemas folgendermaßen angegeben:

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

Beim Hinzufügen neuer Elemente zum SOM sollte der erste Satz von Elementen im Inhaltsmodell (include, import und redefine) zur Schema.Includes-Auflistung und die übrigen Elemente im Inhaltsmodell zur Schema.Items-Auflistung hinzugefügt werden.

Im folgenden Beispiel wird ein leeres XML-Schema erstellt, das dahin gehend verändert wird, dass es das Element Price beinhalten kann, das über einen Typ von xs:integer verfügt. Anschließend wird das Schema zur Verschachtelung eines simpleType-Elements modifiziert, das über eine Beschränkungsbasis von xs:positiveInteger verfügt.

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

Die folgende Ausgabe wurde aus dem vorangehenden Codebeispiel generiert.

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>

Siehe auch

XML-Schemaobjektmodell (SOM) | XML-Schemareferenz (XSD) | System.Xml.Schema-Namespace