XML API

The planning engine natively reads XML documents.

Here’s a simple annotated example of a data file in frePPLe’s format:

<?xml version="1.0" encoding="UTF-8"?>
<plan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <items>
    <!-- Define an item. -->
    <item name="item X">
  </items>
  <demands>
    <!-- Find or create an order. It also implicitly defines items, locations and
         customers that are referenced. -->
    <demand name="order A">
      <item name="item X"/>
      <location name="depot Y"/>
      <customer name="client Z"/>
      <quantity>10</quantity>
      <due>2016-01-10T00:00:00</due>
      <priority>1</priority>
    </demand>
    <!-- Similar to previous element, but using attributes for all simple data types. -->
    <demand name="order B" quantity="2" due="2016-03-11T00:00:00" priority="1">
      <item name="item X"/>
      <location name="depot Y"/>
      <customer name="client Z"/>
    </demand>
  </demands>
  <!-- Define an operation, including all materials it produces or consumes, and
    all resources it uses. -->
  <operations>
    <operation name="make item X" xsi:type="operation_time_per">
      <flows>
        <flow xsi:type="flow_end">
          <item name="item X"/>
          <quantity>-1</quantity>
        </flow>
        <flow xsi:type="flow_start">
          <item name="component 1"/>
          <quantity>-1</quantity>
        </flow>
      </flows>
      <loads>
        <load>
          <resource name="workcenter alfa"/>
          <quantity>1</quantity>
        </load>
      </loads>
      <duration>PT1H</duration>    <!-- 1 hour in XML format -->
      <duration_per>PT5M</duration_per>  <!-- 5 minutes in XML format -->
    </operation>
  </operations>
  <!-- Material consumption definitions as above, but not structured inside
     an operation element. Because of the flexible way that elements are allowed
     to be nested you can choose a layout of the XML document that best suits
     your data source and taste. -->
  <flows>
    <flow xsi:type="flow_start">
      <operation name="make item X"/>
      <item name="another component"/>
      <quantity>-1</quantity>
    </flow>
  </flows>
</plan>

The XML format is defined in XML schema format in https://raw.githubusercontent.com/frePPLe/frePPLe/master/bin/frepple.xsd (use master to see the development version, or replace it with the version number you’re using) or the file /usr/share/frepple/frepple.xsd in a local install. The engine can optionally validate the incoming documents against this schema and reject invalid data files.

The following encodings are supported for XML data: ASCII, UTF-8, UTF-16 (Big/Small Endian), UTF-32(Big/Small Endian), EBCDIC code pages IBM037, IBM1047 and IBM1140, ISO-8859-1 (aka Latin1) and Windows-1252. UTF-8 will be the best choice in most situations.

There are plenty of sample XML-files available:

  • The planning engine has a lot of its unit tests written as XML files.
    See the .xml files in the folders under https://github.com/frePPLe/frePPLe/tree/master/test
  • The connector with the Odoo ERP system is implemented as a web service that collects all ERP in frePPLe’s XML format. The frePPLe planning engine connects to this URL, retrieves the XML data and parses it in-memory to construct the planning model.
    While it may be hard to read without known the Odoo API and data model, it may still be worth to have a look at that code and get a flavor of how that looks.