Skip to content

Instantly share code, notes, and snippets.

@jfinstrom
Created May 4, 2025 20:22
Show Gist options
  • Save jfinstrom/b079fe473b77accf8bf659a9580322ef to your computer and use it in GitHub Desktop.
Save jfinstrom/b079fe473b77accf8bf659a9580322ef to your computer and use it in GitHub Desktop.
FreePBX Module.xml schema
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<!-- Root element: module -->
<xs:element name="module">
<xs:complexType>
<xs:sequence>
<!-- Simple elements with string content -->
<xs:element name="rawname" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="repo" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="version" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="publisher" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="license" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="licenselink" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="canuninstall" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="candisable" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="category" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="more-info" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="type" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="modtype" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="authentication" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="location" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="md5sum" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="info" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="attention" type="xs:string" minOccurs="0" maxOccurs="1"/>
<!-- changelog element -->
<xs:element name="changelog" type="xs:string" minOccurs="0" maxOccurs="1"/>
<!-- Complex elements -->
<xs:element name="commercial" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="link" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="menuitems" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:any processContents="lax"/>
</xs:choice>
<xs:attribute name="needsenginedb" type="xs:string" use="optional"/>
<xs:attribute name="needsenginerunning" type="xs:string" use="optional"/>
<xs:attribute name="display" type="xs:string" use="optional"/>
<xs:attribute name="access" type="xs:string" use="optional"/>
<xs:attribute name="category" type="xs:string" use="optional"/>
<xs:attribute name="order" type="xs:string" use="optional"/>
<xs:attribute name="href" type="xs:string" use="optional"/>
<xs:attribute name="requires_auth" type="xs:string" use="optional"/>
<xs:attribute name="target" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="depends" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="module" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="rawname" type="xs:string" use="optional"/>
<xs:attribute name="type" type="xs:string" use="optional"/>
<xs:attribute name="version" type="xs:string" use="optional"/>
<xs:attribute name="errormessage" type="xs:string" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="version" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="phpversion" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="phpcomponent" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="engine" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="file" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="supported" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="version" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="database" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="table" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="field" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="length" type="xs:integer" use="optional"/>
<xs:attribute name="primarykey" type="xs:string" use="optional"/>
<xs:attribute name="primaryKey" type="xs:string" use="optional"/>
<xs:attribute name="autoincrement" type="xs:string" use="optional"/>
<xs:attribute name="notnull" type="xs:string" use="optional"/>
<xs:attribute name="default" type="xs:string" use="optional"/>
<xs:attribute name="unsigned" type="xs:string" use="optional"/>
<xs:attribute name="precision" type="xs:integer" use="optional"/>
<xs:attribute name="scale" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="key" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="column" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="hooks" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="console" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="command" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="alias" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="class" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="popovers" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="breaking" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="module" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="rawname" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="type" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="version" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="errormessage" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="fileinclude" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="install" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="methods" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="get_config" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="pri" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="bootstrap_hooks" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="pre_module_load" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="all_mods" type="xs:string" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="oobe" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="method" type="xs:string" use="required"/>
<xs:attribute name="priority" type="xs:integer" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="bugfix" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment