<?xml version="1.0" standalone="no"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->

<!DOCTYPE s1 SYSTEM "sbk:/style/dtd/document.dtd">

<s1 title="Sample: SCMPrint">

    <s2 title="SCMPrint">
        <p>SCMPrint shows how to access the Schema Content Model information.</p>

        <s3 title="Running SCMPrint">
          <p>This program parses the specified XSD file, then shows how to
            access the Schema Content Model information.</p>
<source>
Usage:
    SCMPrint [options] &lt;XSD file | List file&gt;

This program loads XML Schema file(s), to show how one can
access the Schema Content Model information.

Options:
    -f     Enable full schema constraint checking processing. Defaults to off.
    -l     Indicate the input file is a List File that has a list of XSD files.
           Default to off (Input file is a XSD file).
    -?     Show this help.
</source>
          <p>Here is some sample output from SCMPrint (as the output is verbose
             it has been truncated)</p>
<source>cd &XercesC3InstallDir;/samples/data
SCMPrint personal.xsd

********** Printing out information from Schema **********

Processing Namespace:   
============================================

Name:			personnel
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C0

--------------------------------------------
Name:			person
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C1

--------------------------------------------
Name:			name
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C2

--------------------------------------------
Name:			family
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C3

--------------------------------------------
Name:			given
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C4

--------------------------------------------
Name:			email
Component Type:	Element
Content Model
	Type:	Simple
	Name:	string

--------------------------------------------
Name:			url
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C5

--------------------------------------------
Name:			link
Component Type:	Element
Content Model
	Type:	Complex
	Name:	C6

--------------------------------------------
Processing Namespace:   http://www.w3.org/2001/XMLSchema
============================================

no elements


Name:			http://www.w3.org/2001/XMLSchema, anyType
Component Type:	Type Definition
Category:		Complex
Base:			anyType
Content Model:	(* (wildcard))

...
</source>
        </s3>
    </s2>
</s1>
