Example 1: Comparing an Inline to an External Schema
To get started using inline schemas, we will look at an abridged version of the sample XML file (books.xml) (use-inline.xml). This file has been modified to include an inline schema, which will be used to validate the contents of any <book> element nodes that appear in the non-schema portion of the XML document
. The inline schema is nested within an <xsd:schema> element.
Note By design, inline schemas are never applied to the root element when validating document contents.
<?xml version="1.0"?> <catalog xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- START OF SCHEMA --> <xsd:schema> <xsd:element name="book"> <xsd:complexType> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="genre" type="xsd:string"/> <xsd:element name="price" type="xsd:float"/> <xsd:element name="publish_date" type="xsd:date"/> <xsd:element name="description" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:schema> <!-- END OF SCHEMA --> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> </catalog>
The inline schema version of the sample document is treated exactly the same as the external schema version of the same file (use-external.xml) provided below. In the external version, the only differences are the following:
- At the
<catalog>
element, the XML schema instancing ("xsi:
") namespace is declared. - At the
<book>
element, thexsi:schemaLocation
schema instance attribute is used to declare that the contents of the<book>
element can be validated against a schema contained in an external XSD file (books1.xsd), located in the same directory.
<?xml version="1.0"?> <catalog xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> <bookxsi:schemaLocation="book books1.xsd"
id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> <genre>Computer</genre> <price>44.95</price> <publish_date>2000-10-01</publish_date> <description>An in-depth look at creating applications with XML.</description> </book> </catalog>
<?xml version="1.0"?> <xsd:schema> <xsd:element name="book"> <xsd:complexType> <xsd:sequence> <xsd:element name="author" type="xsd:string"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="genre" type="xsd:string"/> <xsd:element name="price" type="xsd:float"/> <xsd:element name="publish_date" type="xsd:date"/> <xsd:element name="description" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:schema>
'Create an XML DOMDocument object. Dim xmldom, sXmlFile Set xmldom = CreateObject("MSXML2.DOMDocument.5.0") 'Get the name of the file to validate as user input. sXmlFile = InputBox("Enter the name of the file to validate:", _ Wscript.ScriptName, "use-inline.xml") 'Load and validate the specified file into the DOM. xmldom.async = False xmldom.validateOnParse = True xmldom.load sXmlFile 'Return validation results in message to the user. If xmldom.parseError.errorCode <> 0 Then MsgBox xmldom.parseError.errorCode & " " & _ xmldom.parseError.reason Else Dim node xmldom.setProperty "SelectionLanguage", "XPath" Set node = xmldom.selectSingleNode("//book") MsgBox "Validation successful" & vbCrLf & _ "=====================" & vbCrLf & node.xml End If
Try It!
- Copy the inline schema version of the sample XML file above and paste it into a text file. Save the file as use-inline.xml.
- Copy the external schema version of the sample XML file from above. Paste it into a text file, and save the file as use-external.xml in the same directory where you saved use-inline.xml.
- Copy the XSD schema for the
<book>
element from above. Paste it into a text file, and save the file as books1.xsd in the same directory where you saved the file in the previous steps. - Copy the VBScript code above. Paste it into a text file, and save the file as validate.vbs. Use the same directory as you did in the previous steps.
- Double-click validate.vbs.
An input box will appear that allows you to specify the name of the file to validate.
- Click OK to validate the default file (use-inline.xml).
- Repeat the previous step but substitute the version with the external XSD schema (use-external.xml) instead.
Both the inline and external versions of the XML sample file should validate successfully and display the same output.
See Also
Using Inline Schemas (XSD) | Example 2: Adding a Namespace to the Schema