<?xml version="1.0" encoding="UTF-8"?>
<xs:schema id="suppressions"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           targetNamespace="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd"
           xmlns:dc="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">

    <xs:complexType name="regexStringType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="regex" use="optional" type="xs:boolean" default="false"/>
                <xs:attribute name="caseSensitive" use="optional" type="xs:boolean" default="false"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:simpleType name="cvssScoreType">
        <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="10"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="cveType">
        <xs:restriction base="xs:string">
            <xs:pattern value="((\w+\-)?CVE\-\d\d\d\d\-\d+|\d+)"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="sha1Type">
        <xs:restriction base="xs:string">
            <xs:pattern value="[a-fA-F0-9]{40}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="suppressions">
        <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
                <xs:element name="suppress">
                    <xs:complexType>
                        <xs:sequence minOccurs="1" maxOccurs="1">
                            <xs:sequence minOccurs="0" maxOccurs="1">
                                <xs:element name="notes" type="xs:string"/>
                            </xs:sequence>
                            <xs:choice minOccurs="0" maxOccurs="1">
                                <xs:element name="filePath" type="dc:regexStringType"/>
                                <xs:element name="sha1" type="dc:sha1Type"/>
                                <xs:element name="gav" type="dc:regexStringType"/>
                                <xs:element name="packageUrl" type="dc:regexStringType"/>
                            </xs:choice>
                            <xs:choice minOccurs="1" maxOccurs="unbounded">
                                <xs:element name="cpe" type="dc:regexStringType"/>
                                <xs:element name="cve" type="dc:cveType"/>
                                <xs:element name="vulnerabilityName" type="dc:regexStringType"/>
                                <xs:element name="cwe" type="xs:positiveInteger"/>
                                <xs:element name="cvssBelow" type="dc:cvssScoreType"/>
                            </xs:choice>
                        </xs:sequence>
                        <xs:attribute name="base" use="optional" type="xs:boolean" default="false"/>
                        <xs:attribute name="until" use="optional" type="xs:date">
                            <xs:annotation>
                                <xs:documentation>
                                    When specified the suppression will only be active when the specified date is still in the future. On and after the 'until' date the suppression will no longer be active.
                                </xs:documentation>
                            </xs:annotation>
                        </xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
