Implementation

Here’s a breakdown of its key components:

  1. The root element is <bioprinting>, which contains all other elements.
  2. <printheads> defines the different printheads used in the job, each with its own technology and parameters.
  3. <materials> defines the materials used, each associated with a printhead and having its own properties.
  4. <print-job-configuration> specifies how the print job is set up, including layer settings and print sequence.
  5. <post-processing> allows for the definition of post-processing steps.

The schema includes specific types for different aspects of bioprinting:

  • TechnologyType enumerates the different printing technologies.
  • BioprintingParametersType allows for different parameter sets depending on the technology.
  • BioprintingMaterialParametersType includes general properties, cell properties, characterized data, and bioactive components.
  • MeasurementType ensures that all numerical values have associated units.

Breakdown of the attributes we’ve defined:

  • Root level attributes:
    • print-job-id
  • Printhead-related attributes:
    • id (for printhead)
    • name
    • technology
  • Bioprinting Parameters:
    • print-pressure
    • nozzle-temperature
    • bed-temperature
    • chamber-temperature
    • print-speed
    • droplet-volume
    • ejection-frequency
    • nozzle diameter
  • Material-related attributes:
    • id (for material)
    • name
    • associated-printhead-id
  • Material Parameters:
    • viscosity
    • density
    • concentration
    • cell-type
    • cell-concentration
    • passage-number
    • power-law-index
    • consistency-index
    • yield-stress
    • storage-modulus
    • loss-modulus
  • Bioactive Components:
    • growth-factor name
    • growth-factor concentration
  • Print Job Configuration:
    • layer-height
    • total-layers
  • Print Sequence:
    • order
    • material-id
    • printhead-id
    • description
  • Post-processing:
    • order
    • description
  • Universal attributes:
    • unit (used with MeasurementType)

Additionally, our schema allows for extensibility in several areas. For example:

  • Multiple printheads can be defined, each with its own set of parameters.
  • Multiple materials can be defined, each with its own properties.
  • Multiple growth factors can be specified for each material.
  • Multiple print steps and post-processing steps can be defined.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://example.com/3dmanufacturing/bioprinting/2023/06"
           xmlns="http://example.com/3dmanufacturing/bioprinting/2023/06"
           elementFormDefault="qualified">

  <xs:element name="bioprinting">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="printheads" type="PrintheadsType"/>
        <xs:element name="materials" type="MaterialsType"/>
        <xs:element name="print-job-configuration" type="PrintJobConfigurationType"/>
        <xs:element name="post-processing" type="PostProcessingType" minOccurs="0"/>
      </xs:sequence>
      <xs:attribute name="print-job-id" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="PrintheadsType">
    <xs:sequence>
      <xs:element name="printhead" type="PrintheadType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PrintheadType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="technology" type="TechnologyType"/>
      <xs:element name="bioprinting-parameters" type="BioprintingParametersType"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:positiveInteger" use="required"/>
  </xs:complexType>

  <xs:simpleType name="TechnologyType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="pressure-assisted-extrusion"/>
      <xs:enumeration value="inkjet"/>
      <xs:enumeration value="laser-assisted"/>
      <xs:enumeration value="melt-electrowriting"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="BioprintingParametersType">
    <xs:choice maxOccurs="unbounded">
      <xs:element name="pressure-control" type="PressureControlType" minOccurs="0"/>
      <xs:element name="temperature-control" type="TemperatureControlType" minOccurs="0"/>
      <xs:element name="motion-control" type="MotionControlType" minOccurs="0"/>
      <xs:element name="droplet-control" type="DropletControlType" minOccurs="0"/>
      <xs:element name="nozzle-properties" type="NozzlePropertiesType" minOccurs="0"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="PressureControlType">
    <xs:sequence>
      <xs:element name="print-pressure" type="MeasurementType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="TemperatureControlType">
    <xs:choice maxOccurs="unbounded">
      <xs:element name="nozzle-temperature" type="MeasurementType" minOccurs="0"/>
      <xs:element name="bed-temperature" type="MeasurementType" minOccurs="0"/>
      <xs:element name="chamber-temperature" type="MeasurementType" minOccurs="0"/>
    </xs:choice>
  </xs:complexType>

  <xs:complexType name="MotionControlType">
    <xs:sequence>
      <xs:element name="print-speed" type="MeasurementType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="DropletControlType">
    <xs:sequence>
      <xs:element name="droplet-volume" type="MeasurementType"/>
      <xs:element name="ejection-frequency" type="MeasurementType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="NozzlePropertiesType">
    <xs:sequence>
      <xs:element name="diameter" type="MeasurementType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MaterialsType">
    <xs:sequence>
      <xs:element name="material" type="MaterialType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MaterialType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="associated-printhead-id" type="xs:positiveInteger"/>
      <xs:element name="bioprinting-material-parameters" type="BioprintingMaterialParametersType"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:positiveInteger" use="required"/>
  </xs:complexType>

  <xs:complexType name="BioprintingMaterialParametersType">
    <xs:sequence>
      <xs:element name="general-properties" type="GeneralPropertiesType"/>
      <xs:element name="cell-properties" type="CellPropertiesType" minOccurs="0"/>
      <xs:element name="characterized-bioink-data" type="CharacterizedBioinkDataType" minOccurs="0"/>
      <xs:element name="bioactive-components" type="BioactiveComponentsType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="GeneralPropertiesType">
    <xs:sequence>
      <xs:element name="viscosity" type="MeasurementType" minOccurs="0"/>
      <xs:element name="density" type="MeasurementType" minOccurs="0"/>
      <xs:element name="concentration" type="MeasurementType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CellPropertiesType">
    <xs:sequence>
      <xs:element name="cell-type" type="xs:string"/>
      <xs:element name="cell-concentration" type="MeasurementType"/>
      <xs:element name="passage-number" type="xs:positiveInteger" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="CharacterizedBioinkDataType">
    <xs:sequence>
      <xs:element name="shear-thinning-behavior" type="ShearThinningBehaviorType" minOccurs="0"/>
      <xs:element name="yield-stress" type="MeasurementType" minOccurs="0"/>
      <xs:element name="storage-modulus" type="MeasurementType" minOccurs="0"/>
      <xs:element name="loss-modulus" type="MeasurementType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ShearThinningBehaviorType">
    <xs:sequence>
      <xs:element name="power-law-index" type="xs:decimal"/>
      <xs:element name="consistency-index" type="MeasurementType" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="BioactiveComponentsType">
    <xs:sequence>
      <xs:element name="growth-factor" type="GrowthFactorType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="GrowthFactorType">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="concentration" type="MeasurementType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PrintJobConfigurationType">
    <xs:sequence>
      <xs:element name="layer-settings" type="LayerSettingsType"/>
      <xs:element name="print-sequence" type="PrintSequenceType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="LayerSettingsType">
    <xs:sequence>
      <xs:element name="layer-height" type="MeasurementType"/>
      <xs:element name="total-layers" type="xs:positiveInteger"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PrintSequenceType">
    <xs:sequence>
      <xs:element name="step" type="PrintStepType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PrintStepType">
    <xs:sequence>
      <xs:element name="order" type="xs:positiveInteger"/>
      <xs:element name="material-id" type="xs:positiveInteger"/>
      <xs:element name="printhead-id" type="xs:positiveInteger"/>
      <xs:element name="description" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PostProcessingType">
    <xs:sequence>
      <xs:element name="step" type="PostProcessingStepType" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="PostProcessingStepType">
    <xs:sequence>
      <xs:element name="order" type="xs:positiveInteger"/>
      <xs:element name="description" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="MeasurementType">
    <xs:simpleContent>
      <xs:extension base="xs:decimal">
        <xs:attribute name="unit" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

</xs:schema>

Example of Bioprinting Parameters for Multiple Materials and Printheads

Key features of this structure:

  • Printheads: Each printhead has its own ID, technology type, and specific bioprinting parameters.
  • Materials: Each material is associated with a specific printhead and has its own set of material parameters.
  • Print Job Configuration: This section describes how the printheads and materials are used together, including layer settings and print sequence.
  • Flexibility: This structure can accommodate any number of printheads and materials, each with their own unique parameters.
  • Technology-Specific Parameters: Different parameter sets can be defined for different printing technologies (e.g., pressure control for extrusion, droplet control for inkjet).
<b:bioprinting print-job-id="multi-material-multi-technology-construct">
  <b:printheads>
    <b:printhead id="1">
      <b:name>Pressure-assisted extruder</b:name>
      <b:technology>pressure-assisted-extrusion</b:technology>
      <b:bioprinting-parameters>
        <b:pressure-control>
          <b:print-pressure unit="kPa">30</b:print-pressure>
        </b:pressure-control>
        <b:temperature-control>
          <b:nozzle-temperature unit="celsius">37</b:nozzle-temperature>
        </b:temperature-control>
        <b:motion-control>
          <b:print-speed unit="mm/s">10</b:print-speed>
        </b:motion-control>
        <b:nozzle-properties>
          <b:diameter unit="mm">0.3</b:diameter>
        </b:nozzle-properties>
      </b:bioprinting-parameters>
    </b:printhead>
    
    <b:printhead id="2">
      <b:name>Inkjet dispenser</b:name>
      <b:technology>inkjet</b:technology>
      <b:bioprinting-parameters>
        <b:droplet-control>
          <b:droplet-volume unit="pL">10</b:droplet-volume>
          <b:ejection-frequency unit="Hz">5000</b:ejection-frequency>
        </b:droplet-control>
        <b:temperature-control>
          <b:printhead-temperature unit="celsius">30</b:printhead-temperature>
        </b:temperature-control>
        <b:motion-control>
          <b:print-speed unit="mm/s">50</b:print-speed>
        </b:motion-control>
      </b:bioprinting-parameters>
    </b:printhead>
  </b:printheads>
  
  <b:materials>
    <b:material id="1">
      <b:name>Cell-laden hydrogel</b:name>
      <b:associated-printhead-id>1</b:associated-printhead-id>
      <b:bioprinting-material-parameters>
        <b:general-properties>
          <b:viscosity unit="mPa·s">300</b:viscosity>
          <b:density unit="g/cm³">1.05</b:density>
          <b:concentration unit="percent">2</b:concentration>
        </b:general-properties>
        <b:cell-properties>
          <b:cell-type>chondrocytes</b:cell-type>
          <b:cell-concentration unit="cells/mL">1000000</b:cell-concentration>
        </b:cell-properties>
        <b:characterized-bioink-data>
          <b:shear-thinning-behavior>
            <b:power-law-index>0.6</b:power-law-index>
          </b:shear-thinning-behavior>
          <!-- Other characterized data -->
        </b:characterized-bioink-data>
      </b:bioprinting-material-parameters>
    </b:material>
    
    <b:material id="2">
      <b:name>Growth factor solution</b:name>
      <b:associated-printhead-id>2</b:associated-printhead-id>
      <b:bioprinting-material-parameters>
        <b:general-properties>
          <b:viscosity unit="mPa·s">1.5</b:viscosity>
          <b:density unit="g/cm³">1.00</b:density>
        </b:general-properties>
        <b:bioactive-components>
          <b:growth-factor>
            <b:name>TGF-beta</b:name>
            <b:concentration unit="ng/mL">100</b:concentration>
          </b:growth-factor>
        </b:bioactive-components>
        <b:characterized-bioink-data>
          <b:surface-tension unit="mN/m">72</b:surface-tension>
          <!-- Other characterized data -->
        </b:characterized-bioink-data>
      </b:bioprinting-material-parameters>
    </b:material>
  </b:materials>
  
  <b:print-job-configuration>
    <b:layer-settings>
      <b:layer-height unit="mm">0.1</b:layer-height>
      <b:total-layers>50</b:total-layers>
    </b:layer-settings>
    <b:print-sequence>
      <b:step>
        <b:order>1</b:order>
        <b:material-id>1</b:material-id>
        <b:printhead-id>1</b:printhead-id>
        <b:description>Print cell-laden hydrogel frame</b:description>
      </b:step>
      <b:step>
        <b:order>2</b:order>
        <b:material-id>2</b:material-id>
        <b:printhead-id>2</b:printhead-id>
        <b:description>Deposit growth factor solution in specific patterns</b:description>
      </b:step>
    </b:print-sequence>
  </b:print-job-configuration>
  
  <b:post-processing>
    <b:step>
      <b:order>1</b:order>
      <b:description>UV crosslinking of hydrogel, 30 seconds</b:description>
    </b:step>
    <!-- Other post-processing steps -->
  </b:post-processing>
</b:bioprinting>