<?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 &XercesCInstallDir;-linux/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>
