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.
Das Schemaobjektmodell (SOM) gewährt vollen Zugriff auf reguläre Ausdrücke, wie durch das W3C (World Wide Web Consortium) in "XML Schema Part 2: Datatypes Recommendation" (nur auf Englisch verfügbar) festgelegt. Im XML-Schema werden reguläre Ausdrücke zur Bindung eines Wertebereichs an Werte verwendet, die mit einem bestimmten regulären Ausdruck übereinstimmen.
Im folgenden Codebeispiel wird ein XML-Schema erstellt, das ein SKU (Stock Keeping Unit)-Element definiert. Dieses kann nur Zeichenfolgen enthalten. Diese Zeichenfolgen werden noch weiter eingeschränkt: Sie müssen mit drei Ziffern beginnen, gefolgt von einem Bindestrich, und mit zwei Buchstaben des Alphabets enden.
Imports System.IO
Imports System
Imports System.Xml
Imports System.Xml.Schema
Class RegexSample
Public Shared Sub ValidationCallbackOne(sender As Object, args As ValidationEventArgs)
Console.WriteLine(args.Message)
End Sub 'ValidationCallbackOne
Public Shared Sub Main()
Try
Dim schema As New XmlSchema()
' <xs:element name="quantity">
Dim skuElem As New XmlSchemaElement()
skuElem.Name = "SKU"
schema.Items.Add(skuElem)
' <xs:simpleType name="SKU">
Dim SKUType As New XmlSchemaSimpleType()
skuElem.SchemaType = SKUType
' <xs:restriction base="xs:string">
Dim SKURestriction As New XmlSchemaSimpleTypeRestriction()
SKURestriction.BaseTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")
SKUType.Content = SKURestriction
'<xs:pattern value="\d{3}-[A-Z]{2}"/>
Dim SKUpattern As New XmlSchemaPatternFacet()
SKUpattern.Value = "\d{3}-[A-Z]{2}"
SKURestriction.Facets.Add(SKUpattern)
'Compile and print to the screen.
schema.Compile(AddressOf ValidationCallbackOne)
schema.Write(Console.Out)
Catch e As Exception
Console.WriteLine(e)
End Try
End Sub
End Class
[C#]
using System.IO;
using System;
using System.Xml;
using System.Xml.Schema;
class RegexSample {
public static void ValidationCallbackOne(object sender, ValidationEventArgs args) {
Console.WriteLine(args.Message);
}
public static void Main() {
try{
XmlSchema schema = new XmlSchema();
// <xs:element name="quantity">
XmlSchemaElement skuElem = new XmlSchemaElement();
skuElem.Name = "SKU";
schema.Items.Add(skuElem);
// <xs:simpleType name="SKU">
XmlSchemaSimpleType SKUType = new XmlSchemaSimpleType();
skuElem.SchemaType = SKUType;
// <xs:restriction base="xs:string">
XmlSchemaSimpleTypeRestriction SKURestriction =
new XmlSchemaSimpleTypeRestriction();
SKURestriction.BaseTypeName =
new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");
SKUType.Content = SKURestriction;
// <xs:pattern value="\d{3}-[A-Z]{2}"/>
XmlSchemaPatternFacet SKUpattern = new XmlSchemaPatternFacet();
SKUpattern.Value = "\\d{3}-[A-Z]{2}";
SKURestriction.Facets.Add(SKUpattern);
// Compile and print to the screen.
schema.Compile(new ValidationEventHandler(ValidationCallbackOne));
schema.Write(Console.Out);
}catch(Exception e){
Console.WriteLine(e);
}
}
}
Die folgende Ausgabe (ein XML-Schema) wurde aus dem vorangegangenen Codebeispiel generiert.
<?xml version="1.0" encoding="IBM437"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SKU">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{3}-[A-Z]{2}" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
Ungültige Beschränkungen für Muster regulärer Ausdrücke
Es besteht die Möglichkeit, ein Muster zu erstellen, das einen Typ auf ungültige Weise einschränkt.
Ein Beispiel: Das Format des Typs dateTime ist CCYY-MM-DDThh:mm:ss. Dabei repräsentiert CC das Jahrhundert, YY das Jahr, MM den Monat und DD den Tag, gefolgt von einem optionalen negativen Vorzeichen (-) für eine negative Zahl. Bei Auslassen dieses Zeichens wird von einem positiven (+) Wert ausgegangen. Der Buchstabe T hat die Funktion eines Trennzeichens von Datums- und Zeitangabe. Stunden, Minuten und Sekunden werden jeweils durch hh, mm, und ss repräsentiert.
Im folgenden XML-Schemabeispiel wird der Versuch unternommen, den dateTime-Typ so einzuschränken, dass er dem time-Typ gleicht.
<xs:simpleType name="time">
<xs:restriction base="xs:dateTime">
<xs:pattern value="\d\d:\d\d(:\d\d)?" />
</xs:restriction>
</xs:simpleType>
Die Einschränkung im oben angegebenen Beispiel ist ungültig, denn es wird keine Untergruppe des dateTime-Typs erstellt. Stattdessen wird ein neuer, sich davon unterscheidender Typ erstellt. Er enthält eine Menge potenzieller Werte, die sich nicht mit der Menge potenzieller Werte des dateTime-Typs überschneidet.
**Hinweis **Bei der Erstellung eines ungültigen Musters gibt der Prozessor keine Warnmeldung aus. Dennoch schlägt die Überprüfung aller Instanzdokumente fehl, deren Inhalt nicht mit der Basis des eingeschränkten Typs übereinstimmt.
Weitere Informationen über Reguläre Ausdrücke und XML-Schemas finden Sie unter http://www.w3.org/TR/xmlschema-2/\#regexs im Anhang der XML-Schemaempfehlung zu Datentypen des W3C.