<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2004 The Apache Software Foundation

     Licensed 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. -->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="urn:lax.Doc.Compilation"
    xmlns:tns="urn:lax.Doc.Compilation"
    xmlns:pre="noResolutionNamespace"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">

    <xs:element name="ItemRequest" type="tns:ItemRequestType"/>
    <xs:complexType name="ItemRequestType">
        <xs:annotation>
            <xs:documentation>
                Ensure that XML content is allowed and not validated when the novdoc option is set
                provided content is XHTML compliant and no elements use the schema namespaces

                        <tns:ItemRequest>
                            foobaz
                        </tns:ItemRequest>
                <xs:complexType name="foobar">
                    <xs:sequence>
                        <xs:element name="foobaz" type="pre:String"/>
                    </xs:sequence>
                </xs:complexType>
                provided content is XHTML compliant and no elements use the schema namespaces
            </xs:documentation>
        </xs:annotation>
                <xs:sequence>
                    <xs:element name="foobaz" type="xs:string">
                        <xs:annotation>
                            <xs:documentation>
                   Ensure that XML content is allowed and not validated when the novdoc option is set
                provided content is XHTML compliant and no elements use the schema namespaces

                            </xs:documentation>
                        </xs:annotation>
                    </xs:element>
                </xs:sequence>
        <xs:attribute name="baz" use="required"/>
    </xs:complexType>
</xs:schema>


