<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.dmg.org/PMML-3_0"
xmlns="http://www.dmg.org/PMML-3_0"
elementFormDefault="unqualified">
<xs:include schemaLocation="pmml-3-0.xsd"/>
<!-- ================================================================== -->
<!-- NOTE: this is just to facilitate testing use-case fragments -->
<xs:element name="BaselineModels">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="BaselineModel" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="TestDistributions" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
</xs:element>
<!-- ================================================================== -->
<xs:element name="BaselineModel">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="MiningSchema"/>
<xs:element ref="Output" minOccurs="0" />
<xs:element ref="ModelStats" minOccurs="0"/>
<xs:element ref="Targets" minOccurs="0" />
<xs:element ref="LocalTransformations" minOccurs="0" />
<xs:element ref="TestDistributions"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="modelName" type="xs:string" use="optional" />
<xs:attribute name="functionName" type="MINING-FUNCTION" use="required" />
<xs:attribute name="algorithmName" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<!-- ================================================================== -->
<xs:element name="TestDistributions">
<xs:complexType>
<xs:sequence>
<xs:group ref="BASELINE-AND-ALTERNATE" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="field" type="FIELD-NAME" use="optional" />
<xs:attribute name="testStatistic" type="BASELINE-TEST-STATISTIC" use="optional" />
<xs:attribute name="testType" type="BASELINE-TEST-TYPE" use="required" />
<xs:attribute name="threshold" type="REAL-NUMBER" use="required" />
<xs:attribute name="resetValue" type="REAL-NUMBER" default="0.0" use="optional" />
</xs:complexType>
</xs:element>
<xs:simpleType name="BASELINE-TEST-STATISTIC">
<xs:restriction base="xs:string">
<xs:enumeration value="count" />
<xs:enumeration value="zValue" />
<xs:enumeration value="chiSquared" />
<xs:enumeration value="fisher" />
<xs:enumeration value="fisherExact" />
<xs:enumeration value="yatesContinuityCorrection" />
<xs:enumeration value="CUSUM" />
<xs:enumeration value="GLR" />
<xs:enumeration value="logOddsRatio" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BASELINE-TEST-TYPE">
<xs:restriction base="xs:string">
<xs:enumeration value="threshold" />
<xs:enumeration value="singleSidedPValue" />
<xs:enumeration value="twoSidedPValue" />
</xs:restriction>
</xs:simpleType>
<!-- ================================================================== -->
<!-- standard, least-restricted contents of TestDistributions -->
<xs:group name="BASELINE-AND-ALTERNATE">
<xs:sequence>
<xs:group ref="BASELINE-DISTRIBUTION" minOccurs="1" maxOccurs="1"/>
<xs:group ref="ALTERNATE-DISTRIBUTIONS" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<!-- the choice to use Baseline and Alternate container elements
(rather than an equivalent role attribute on the Distribution
elements) makes this quite complex.
TODO:? disallow mixing of Continuous and Discrete Distribution
Elements. This will require some "Derivation by Restriction"
trickery, otherwise "nondeterministic content" errors result.
-->
<xs:group name="ANY-DISTRIBUTION">
<xs:choice>
<xs:group ref="CONTINUOUS-DISTRIBUTION"/>
<xs:group ref="DISCRETE-DISTRIBUTION"/>
</xs:choice>
</xs:group>
<xs:element name="Baseline">
<xs:complexType>
<xs:sequence>
<xs:group ref="ANY-DISTRIBUTION" minOccurs="1" maxOccurs="1"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Alternate">
<xs:complexType>
<xs:sequence>
<xs:group ref="ANY-DISTRIBUTION" minOccurs="1" maxOccurs="unbounded"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- default to Baseline if Distribution not wrapped
in Baseline or Alternate elements -->
<xs:group name="BASELINE-DISTRIBUTION">
<xs:choice>
<xs:element ref="Baseline"/>
<xs:group ref="ANY-DISTRIBUTION"/>
</xs:choice>
</xs:group>
<xs:group name="ALTERNATE-DISTRIBUTIONS">
<xs:choice>
<xs:element ref="Alternate"/>
</xs:choice>
</xs:group>
<!-- ================================================================== -->
<xs:group name="CONTINUOUS-DISTRIBUTION">
<xs:choice>
<xs:element ref="AnyDistribution"/>
<xs:element ref="GaussianDistribution"/>
<xs:element ref="PoissonDistribution"/>
<xs:element ref="UniformDistribution"/>
</xs:choice>
</xs:group>
<xs:element name="AnyDistribution">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="mean" type="REAL-NUMBER" use="required" />
<xs:attribute name="variance" type="REAL-NUMBER" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="GaussianDistribution">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="mean" type="REAL-NUMBER" use="required" />
<xs:attribute name="variance" type="REAL-NUMBER" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="PoissonDistribution">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="mean" type="REAL-NUMBER" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="UniformDistribution">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="lower" type="REAL-NUMBER" use="required" />
<xs:attribute name="upper" type="REAL-NUMBER" use="required" />
</xs:complexType>
</xs:element>
<!-- ================================================================== -->
<xs:group name="DISCRETE-DISTRIBUTION">
<xs:choice>
<xs:element ref="CountTable"/>
<xs:element ref="NormalizedCountTable"/>
<xs:element ref="HistogramTable"/>
</xs:choice>
</xs:group>
<xs:element name="CountTable" type="COUNT-TABLE-TYPE" />
<xs:element name="NormalizedCountTable" type="COUNT-TABLE-TYPE" />
<xs:element name="HistogramTable" type="COUNT-TABLE-TYPE" />
<xs:complexType name="COUNT-TABLE-TYPE">
<xs:sequence>
<xs:element ref="FieldValueCounts" minOccurs="1" maxOccurs="unbounded"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:element name="FieldValueCounts">
<xs:complexType>
<xs:sequence>
<xs:element ref="FieldValueCount" minOccurs="1" maxOccurs="unbounded"/>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="field" type="FIELD-NAME" use="required" />
<xs:attribute name="value" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="FieldValueCount">
<xs:complexType>
<xs:sequence>
<xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="field" type="FIELD-NAME" use="required" />
<xs:attribute name="value" use="optional" />
<xs:attribute name="count" type="NUMBER" use="required" />
</xs:complexType>
</xs:element>
<!-- ================================================================== -->
</xs:schema>