Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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