<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:nice="http://www.wipo.int/nicepub/NICE" targetNamespace="http://www.wipo.int/nicepub/NICE" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <!-- Simple Types -->
  <xs:simpleType name="LanguageCodeType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-z][a-z]"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="DottedGroupType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]+(\.[0-9]+)*\.[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="BasicNumberType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]{6}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="TagModificationType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="new"/>
      <xs:enumeration value="deleted"/>
    </xs:restriction>
  </xs:simpleType>
  <!-- text that can contain any number of links -->
  <xs:complexType name="TextWithLinksType" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="nice:NiceLink" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="nice:ExternalLink" minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:complexType>
  <!-- text that can contain modifications -->
  <xs:complexType name="ModificationTextType" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="NewText" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="DeletedText" minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:complexType>
  <!-- text that can contain modifications and links, and modifications can contain links -->
  <xs:complexType name="ModificationTextWithLinksType" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="nice:NiceLink" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="nice:ExternalLink" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="NewText" type="nice:TextWithLinksType" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="DeletedText" type="nice:TextWithLinksType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:choice>
  </xs:complexType>
  <xs:complexType name="ParagraphStructureContentsType" mixed="true">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="Emphasis" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="nice:ExternalLink" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element ref="nice:NiceLink" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="OrderedListType">
    <xs:sequence>
      <xs:element name="Introduction" minOccurs="0"/>
      <xs:element name="ListItem" type="nice:TextWithLinksType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <!-- Common Elements -->
  <xs:element name="NiceLink">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="linkTarget" use="required">
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="classNumber"/>
                <xs:enumeration value="hierarchyGroupNumber"/>
                <xs:enumeration value="basicNumber"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="targetNumber" type="xs:string" use="required"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="ExternalLink">
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base="xs:string">
          <xs:attribute name="linkURI" type="xs:anyURI"/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>
  <!-- Common Attribute Groups -->
  <xs:attributeGroup name="DateInForce">
    <xs:attribute name="dateInForce" type="xs:date" use="required"/>
    <xs:attribute name="dateOfGeneration" type="xs:date" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="LangInForce">
    <xs:attributeGroup ref="nice:DateInForce"/>
    <xs:attribute name="language" type="nice:LanguageCodeType" use="required"/>
  </xs:attributeGroup>
</xs:schema>
