<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- 
XML Schema for the CCFF message repository
Version 0.91
=================================================================
PGI Document Notice and License

 Copyright (c) 2016, NVIDIA CORPORATION.  All rights reserved.

Permission to use, copy, and distribute the contents of this document, in
any medium for any purpose and without fee or royalty is hereby granted,
provided that you include the following on ALL copies of the document, or
portions thereof:

   1. A link or URL to the original document located at:

       https://www.pgroup.com/doc/pgexplain.xsd

   2. The copyright notice listed above.

When space permits, inclusion of the full text of this NOTICE should be
provided. We request that authorship attribution be provided in any
software, documents, or other items or products that you create pursuant to
the implementation of the contents of this document, or any portion
thereof.

The right to create modifications or derivatives is granted provided that
that you indicate any modification that you make by changing the namespace
so as to distinguish your altered version from the PGI version. We further
request you include a statement regarding who made the modifications, when,
and what changes were made.

THIS DOCUMENT IS PROVIDED "AS IS," AND THE COPYRIGHT HOLDER MAKES NO
REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE
SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL
NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
RIGHTS.

THE COPYRIGHT HOLDER WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL
OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE
PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.

The name and trademarks of the copyright holder may NOT be used in
advertising or publicity pertaining to this document or its contents
without specific, written prior permission. Title to copyright in this
document will at all times remain with copyright holders.  
-->

<!-- definition of simple types -->

<xs:simpleType name="stringtype">
  <xs:restriction base="xs:string"/>
</xs:simpleType>

<!-- definition of complex types -->

<!-- <type> element contains one each of 
         <typename>     -  symbolic identifier for the message type
         <typeusername> -  human-friendly name for the message type
         <typeclass>    -  a higher-level categorization of message
                           types, eg there may be several message
                           types with typeclass "opt" (for optimization)

        and optionally one of                   

         <typeexplain>  -  human-friendly explanation of what the 
                           message type means
-->
<xs:complexType name="typetype">
 <xs:sequence>
  <xs:element name="typename"     type="stringtype"/>
  <xs:element name="typeusername" type="stringtype"/>
  <xs:element name="typeclass"    type="stringtype"/>
  <xs:element name="typeexplain"  type="stringtype" minOccurs="0"/>
 </xs:sequence>
</xs:complexType>

<!-- <msg> element contains one each of
         <msgid>       -  symbolic identifier for the message
         <msgtype>     -  category of this message, maps to <type><typename>
         <msgtext>     -  text of the message, may contain replaceable params

       and optionally contains one or the other of

         <msgseealso>  -  msgid of another message.  use the msgexplain element
                          of that message for this message.
         <msgexplain>  -  explanation of the message, and optionally some hints
                          about what the user might do as a result
-->
<xs:group name="msgtypegroup">
 <xs:choice>
  <xs:element name="msgseealso"  type="stringtype" minOccurs="0"/>
  <xs:element name="msgexplain"  type="stringtype" minOccurs="0" maxOccurs="unbounded"/>
 </xs:choice>
</xs:group>

<xs:complexType name="msgtype">
 <xs:sequence>
  <xs:element name="msgid"       type="stringtype"/>
  <xs:element name="msgtype"     type="stringtype"/>
  <xs:element name="msgtext"     type="stringtype"/>
  <xs:group   ref="msgtypegroup"  minOccurs="0"/>
 </xs:sequence>
</xs:complexType>

<!--    <msgfile> contains elements 
            <type>  -  defines a category of messages, e.g. messages
                       having to do with OpenMP
            <msg>   -  defines a specific message within a category
        in any quantity and any order
-->
<xs:group name="msgfilegroup">
 <xs:choice>
  <xs:element name="type" type="typetype" maxOccurs="unbounded"/>
  <xs:element name="msg"  type="msgtype"  maxOccurs="unbounded"/>
 </xs:choice>
</xs:group>

<xs:complexType name="msgfiletype">
 <xs:sequence>
  <xs:group ref="msgfilegroup" maxOccurs="unbounded"/>
 </xs:sequence>
</xs:complexType>

<!-- definition of top-level element -->
<xs:element name="msgfile" type="msgfiletype"/>

</xs:schema>
Click me