JMPTech
 
XSD custom types

Use to create a custom type library

userDB.xml
<?xml version="1.0" encoding="UTF-8"?>
<userDB xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="userDB.xsd">
<!-- NOTE: XML Format example only. Edit content before use. -->
  <users>
    <user>
      <userid>This is a string</userid>
      <name>This is a string</name>
      <email>username@isp.com</email>
      <phone>+19998887777</phone>
      <hash>This is a string</hash>
      <priviliges>This is a string</priviliges>
    </user>
  </users>
</userDB>

A simple xml file. Note the phone and email tags, these will be handled by custom types defined in jmpTypes.xsd

userDB.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by genSchema.php -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <!-- uncomment if types needed -->
  <xs:include schemaLocation="jmpTypes.xsd"/>
  <xs:element name="userDB">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="users"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="users">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="user" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="user">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="userid" type="xs:string"/>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="email" type="emailType"/>
        <xs:element name="phone" type="internationalPhoneType"/>
        <xs:element name="hash" type="xs:string"/>
        <xs:element name="priviliges" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

The schema. Note

  • the <xs:include> which will include jmpTypes.xsd

  • phone and email use the internationalPhoneType and emailType respectively.

jmpTypes.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:simpleType name="internationalPhoneType">
    <xs:restriction base="xs:string">
      <!-- Optional + followed by 7 to 15 digits -->
      <!-- Matches(e.g.) +18005551212 or +2408812345 -->
      <xs:pattern value="\+?[0-9]{7,15}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="emailType">
    <xs:restriction base="xs:string">
      <xs:pattern value="[^@]+@[^\.]+\..+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="SSNType">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}-\d{2}-\d{4}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="privilegesType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="admin"/>
      <xs:enumeration value="user"/>
      <xs:enumeration value="guest"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

The common types library.


JMP - 2026-08-18 11:27:30 email