Skip to content
On this page

xs:string

xml

Generate XML Schema Definition types from SQL schema

Example Output ​

Generated from the pet-store sample schema:

xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by @sqldoc/templates/xsd. DO NOT EDIT -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="Adoption">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="petId" type="xs:int"/>
      <xs:element name="ownerId" type="xs:int"/>
      <xs:element name="adoptedAt" type="xs:dateTime"/>
      <xs:element name="adoptionFee" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="AdoptionsAuditLog">
    <xs:sequence>
      <xs:element name="id" type="xs:long"/>
      <xs:element name="tableName" type="xs:string"/>
      <xs:element name="operation" type="xs:string"/>
      <xs:element name="oldData" type="xs:string" minOccurs="0"/>
      <xs:element name="newData" type="xs:string" minOccurs="0"/>
      <xs:element name="changedAt" type="xs:dateTime"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Category">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="name">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="description" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="LegacyInventory">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="itemName" type="xs:string" minOccurs="0"/>
      <xs:element name="oldSku" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Location">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="zip" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MedicalRecord">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="petId" type="xs:int"/>
      <xs:element name="visitDate" type="xs:date"/>
      <xs:element name="diagnosis" type="xs:string"/>
      <xs:element name="treatment" type="xs:string" minOccurs="0"/>
      <xs:element name="vetName" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Owner">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="name">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="email">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:pattern value="^[^@]+@[^@]+\.[^@]+$"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="phone" minOccurs="0">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:minLength value="7"/>
          <xs:maxLength value="20"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="createdAt" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Pet">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="categoryId" type="xs:int" minOccurs="0"/>
      <xs:element name="name">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="sku">
        <xs:simpleType>
          <xs:restriction base="xs:string">
          <xs:pattern value="^[A-Z]{3}-[0-9]{4}$"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="price">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
          <xs:minInclusive value="0"/>
          <xs:maxInclusive value="99999"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="internalNotes" type="xs:string" minOccurs="0"/>
      <xs:element name="status" type="xs:string"/>
      <xs:element name="createdAt" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="Review">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="petId" type="xs:int"/>
      <xs:element name="ownerId" type="xs:int"/>
      <xs:element name="rating">
        <xs:simpleType>
          <xs:restriction base="xs:int">
          <xs:minInclusive value="1"/>
          <xs:maxInclusive value="5"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="body" type="xs:string" minOccurs="0"/>
      <xs:element name="locationId" type="xs:int" minOccurs="0"/>
      <xs:element name="createdAt" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="StaffAuditLog">
    <xs:sequence>
      <xs:element name="id" type="xs:long"/>
      <xs:element name="tableName" type="xs:string"/>
      <xs:element name="operation" type="xs:string"/>
      <xs:element name="oldData" type="xs:string" minOccurs="0"/>
      <xs:element name="newData" type="xs:string" minOccurs="0"/>
      <xs:element name="changedAt" type="xs:dateTime"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Usage ​

Add to your sqldoc.config.ts:

typescript
export default {
  dialect: 'postgres',
  schema: ['./schema.sql'],
  codegen: [
    {
      template: 'xsd',
      output: './generated/schema.xsd',
    },
  ],
}

Then run:

bash
sqldoc codegen