<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  targetNamespace="urn:ietf:params:xml:ns:vcard-4.0"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:ns1="urn:ietf:params:xml:ns:vcard-4.0"
  elementFormDefault="qualified">
  <!--

    3.3
    iana-token = xsd:string { pattern = "[a-zA-Z0-9-]+" }
    x-name = xsd:string { pattern = "x-[a-zA-Z0-9-]+" }
  -->
  <xs:simpleType name="iana-token">
    <xs:annotation>
      <xs:documentation>Section 3.3: vCard Format Specification
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <xs:simpleType name="x-name">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>
  <!--

    4.1
  -->
  <xs:element name="text" type="xs:string"/>
  <xs:group name="value-text-list">
    <xs:sequence>
      <xs:element ref="ns1:text" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  <!-- 4.2 -->
  <xs:element name="uri" type="xs:anyURI"/>
  <!-- 4.3.1 -->
  <xs:element name="date"
      substitutionGroup="ns1:value-date-and-or-time">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern
           value="\d{8}|\d{4}-\d\d|--\d\d(\d\d)?|---\d\d"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- 4.3.2 -->
  <xs:element name="time"
      substitutionGroup="ns1:value-date-and-or-time">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value=
  "(\d\d(\d\d(\d\d)?)?|-\d\d(\d\d?)|--\d\d)(Z|[+\-]\d\d(\d\d)?)?"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- 4.3.3 -->
  <xs:element name="date-time"
    substitutionGroup="ns1:value-date-and-or-time">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value=
  "(\d{8}|--\d{4}|---\d\d)T\d\d(\d\d(\d\d)?)?(Z|[+\-]\d\d(\d\d)?)?"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- 4.3.4 -->
  <xs:element name="value-date-and-or-time" abstract="true"/>
  <!-- 4.3.5 -->
  <xs:complexType name="value-timestamp">
    <xs:sequence>
      <xs:element ref="ns1:timestamp"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="timestamp">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="\d{8}T\d{6}(Z|[+\-]\d\d(\d\d)?)?"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- 4.4 -->
  <xs:element name="boolean" type="xs:boolean"/>
  <!-- 4.5 -->
  <xs:element name="integer" type="xs:integer"/>
  <!-- 4.6 -->
  <xs:element name="float" type="xs:float"/>
  <!-- 4.7 -->
  <xs:element name="utc-offset">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[+\-]\d\d(\d\d)?"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!-- 4.8 -->
  <xs:element name="language-tag">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value=
"([a-z]{2,3}((-[a-z]{3}){0,3})?|[a-z]{4,8})(-[a-z]{4})?
(-([a-z]{2}|\d{3}))?(-([0-9a-z]{5,8}|\d[0-9a-z]{3}))*
(-[0-9a-wyz](-[0-9a-z]{2,8})+)*(-x(-[0-9a-z]{1,8})+)?
|x(-[0-9a-z]{1,8})+|[a-z]{1,3}(-[0-9a-z]{2,8}){1,2}"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <!--

    5.1
  -->
  <xs:group name="param-language">
    <xs:annotation>
      <xs:documentation>Section 5: Parameters</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element ref="ns1:language" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="language">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:language-tag"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.2 -->
  <xs:group name="param-pref">
    <xs:sequence>
      <xs:element ref="ns1:pref" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="pref">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="integer">
          <xs:simpleType>
            <xs:restriction base="xs:integer">
              <xs:minInclusive value="1"/>
              <xs:maxInclusive value="100"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.4 -->
  <xs:group name="param-altid">
    <xs:sequence>
      <xs:element ref="ns1:altid" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="altid">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.5 -->
  <xs:group name="param-pid">
    <xs:sequence>
      <xs:element ref="ns1:pid" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="pid">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="text" maxOccurs="unbounded">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="\d+(\.\d+)?"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.6 -->
  <xs:group name="param-type">
    <xs:sequence>
      <xs:element ref="ns1:type" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="type">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="text" maxOccurs="unbounded">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="work"/>
              <xs:enumeration value="home"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.7 -->
  <xs:group name="param-mediatype">
    <xs:sequence>
      <xs:element ref="ns1:mediatype" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="mediatype">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.8 -->
  <xs:group name="param-calscale">
    <xs:sequence>
      <xs:element ref="ns1:calscale" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="calscale">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="text">
          <xs:simpleType>
            <xs:restriction base="xs:token">
              <xs:enumeration value="gregorian"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.9 -->
  <xs:group name="param-sort-as">
    <xs:sequence>
      <xs:element ref="ns1:sort-as" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="sort-as">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:text" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 5.10 -->
  <xs:group name="param-geo">
    <xs:sequence>
      <xs:element name="geo" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="ns1:uri"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!-- 5.11 -->
  <xs:group name="param-tz">
    <xs:sequence>
      <xs:element name="tz" minOccurs="0">
        <xs:complexType>
          <xs:choice>
            <xs:element ref="ns1:text"/>
            <xs:element ref="ns1:uri"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!--
    6.1.3
  -->
  <xs:element name="source">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.1.4 -->
  <xs:element name="kind">
    <xs:complexType>
      <xs:sequence>
        <xs:annotation>
          <xs:documentation>
            The text value must be one of: individual, group, org,
      location or a ns1:x-name or a ns1:iana-token value
          </xs:documentation>
        </xs:annotation>
        <xs:element name="text" type="xs:token"
              minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.1 -->
  <xs:element name="fn">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.2 -->
  <xs:element name="n">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-sort-as"/>
              <xs:group ref="ns1:param-altid"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:surname"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:given"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:additional"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:prefix"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:suffix"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="surname" type="xs:string"/>
  <xs:element name="given" type="xs:string"/>
  <xs:element name="additional" type="xs:string"/>
  <xs:element name="prefix" type="xs:string"/>
  <xs:element name="suffix" type="xs:string"/>
  <!-- 6.2.3 -->
  <xs:element name="nickname">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:group ref="ns1:value-text-list"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.4 -->
  <xs:element name="photo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.5 -->
  <xs:element name="bday">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-calscale"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element ref="ns1:value-date-and-or-time"/>
          <xs:element ref="ns1:text"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.6 -->
  <xs:element name="anniversary">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-calscale"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element ref="ns1:value-date-and-or-time"/>
          <xs:element ref="ns1:text"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.2.7 -->
  <xs:element name="gender">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:sex"/>
        <xs:element ref="ns1:identity" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="sex">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value=""/>
        <xs:enumeration value="M"/>
        <xs:enumeration value="F"/>
        <xs:enumeration value="O"/>
        <xs:enumeration value="N"/>
        <xs:enumeration value="U"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="identity" type="xs:string"/>
  <!-- 6.3.1 -->
  <xs:group name="param-label">
    <xs:sequence>
      <xs:element ref="ns1:label" minOccurs="0"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="label">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="adr">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-geo"/>
              <xs:group ref="ns1:param-tz"/>
              <xs:group ref="ns1:param-label"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:pobox"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:ext"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:street"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:locality"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:region"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:code"
          minOccurs="0" maxOccurs="unbounded"/>
        <xs:element ref="ns1:country"
          minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="pobox" type="xs:string"/>
  <xs:element name="ext" type="xs:string"/>
  <xs:element name="street" type="xs:string"/>
  <xs:element name="locality" type="xs:string"/>
  <xs:element name="region" type="xs:string"/>
  <xs:element name="code" type="xs:string"/>
  <xs:element name="country" type="xs:string"/>
  <!-- 6.4.1 -->
  <xs:element name="tel">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"
                minOccurs="0"/>
              <xs:group ref="ns1:param-pid"
                minOccurs="0"/>
              <xs:group ref="ns1:param-pref"
                minOccurs="0"/>
              <xs:element name="type" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="text"
                      type="xs:string"
                      maxOccurs="unbounded">
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element ref="ns1:text"/>
          <xs:element ref="ns1:uri"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.4.2 -->
  <xs:element name="email">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.4.3 -->
  <xs:element name="impp">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.4.4 -->
  <xs:element name="lang">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:language-tag"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.5.1 -->
  <xs:group name="property-tz">
    <xs:sequence>
      <xs:element name="tz">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="parameters" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="ns1:param-altid"/>
                  <xs:group ref="ns1:param-pid"/>
                  <xs:group ref="ns1:param-pref"/>
                  <xs:group ref="ns1:param-type"/>
                  <xs:group
                  ref="ns1:param-mediatype"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:choice>
              <xs:element ref="ns1:text"/>
              <xs:element ref="ns1:uri"/>
              <xs:element ref="ns1:utc-offset"/>
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!-- 6.5.2 -->
  <xs:group name="property-geo">
    <xs:sequence>
      <xs:element name="geo">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="parameters" minOccurs="0">
              <xs:complexType>
                <xs:sequence>
                  <xs:group ref="ns1:param-altid"/>
                  <xs:group ref="ns1:param-pid"/>
                  <xs:group ref="ns1:param-pref"/>
                  <xs:group ref="ns1:param-type"/>
                  <xs:group
                  ref="ns1:param-mediatype"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element ref="ns1:uri"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <!-- 6.6.1 -->
  <xs:element name="title">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.6.2 -->
  <xs:element name="role">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.6.3 -->
  <xs:element name="logo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.6.4 -->
  <xs:element name="org">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-sort-as"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:group ref="ns1:value-text-list"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.6.5 -->
  <xs:element name="member">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.6.6 -->
  <xs:element name="related">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:element name="type" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="text" maxOccurs="unbounded">
                      <xs:simpleType>
                        <xs:restriction base="xs:token">
                          <xs:enumeration value="work"/>
                          <xs:enumeration value="home"/>
                          <xs:enumeration value="contact"/>
                          <xs:enumeration value="acquaintance"/>
                          <xs:enumeration value="friend"/>
                          <xs:enumeration value="met"/>
                          <xs:enumeration value="co-worker"/>
                          <xs:enumeration value="colleague"/>
                          <xs:enumeration value="co-resident"/>
                          <xs:enumeration value="neighbor"/>
                          <xs:enumeration value="child"/>
                          <xs:enumeration value="parent"/>
                          <xs:enumeration value="sibling"/>
                          <xs:enumeration value="spouse"/>
                          <xs:enumeration value="kin"/>
                          <xs:enumeration value="muse"/>
                          <xs:enumeration value="crush"/>
                          <xs:enumeration value="date"/>
                          <xs:enumeration value="sweetheart"/>
                          <xs:enumeration value="me"/>
                          <xs:enumeration value="agent"/>
                          <xs:enumeration value="emergency"/>
                        </xs:restriction>
                      </xs:simpleType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element ref="ns1:uri"/>
          <xs:element ref="ns1:text"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.1 -->
  <xs:element name="categories">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:group ref="ns1:value-text-list"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.2 -->
  <xs:element name="note">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.3 -->
  <xs:element name="prodid">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:text"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.4 -->
  <xs:element name="rev" type="ns1:value-timestamp"/>
  <!-- 6.7.5 -->
  <xs:element name="sound">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-language"/>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.6 -->
  <xs:element name="uid">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.7.7 -->
  <xs:element name="clientpidmap">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:sourceid"/>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="sourceid" type="xs:positiveInteger"/>
  <!-- 6.7.8 -->
  <xs:element name="url">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.8.1 -->
  <xs:element name="key">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:element ref="ns1:uri"/>
          <xs:element ref="ns1:text"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.9.1 -->
  <xs:element name="fburl">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.9.2 -->
  <xs:element name="caladruri">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- 6.9.3 -->
  <xs:element name="caluri">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="parameters" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:group ref="ns1:param-altid"/>
              <xs:group ref="ns1:param-pid"/>
              <xs:group ref="ns1:param-pref"/>
              <xs:group ref="ns1:param-type"/>
              <xs:group ref="ns1:param-mediatype"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element ref="ns1:uri"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!-- Top-level grammar -->
  <xs:group name="property">
    <xs:sequence>
      <xs:element ref="ns1:adr" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:anniversary" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:bday" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:caladruri" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:caluri" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:categories" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:clientpidmap" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:email" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:fburl" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:fn" minOccurs="1"
        maxOccurs="unbounded"/>
      <xs:group ref="ns1:property-geo" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:impp" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:key" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:kind" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:lang" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:logo" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:member" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:n" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:nickname" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:note" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:org" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:photo" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:prodid" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:related" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:rev" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:role" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:gender" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:sound" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:source" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:tel" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:title" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:group ref="ns1:property-tz" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:element ref="ns1:uid" minOccurs="0"
        maxOccurs="1"/>
      <xs:element ref="ns1:url" minOccurs="0"
        maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="vcards">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="ns1:vcard" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="vcardType">
    <xs:sequence>
      <xs:group ref="ns1:property"/>
      <xs:element ref="ns1:group" minOccurs="0"
        maxOccurs="unbounded"/>
      <xs:any namespace="##other" processContents="lax"
        minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="vcard" type="ns1:vcardType"/>
  <xs:element name="group">
    <xs:complexType>
      <xs:group ref="ns1:property"/>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
</xs:schema>