# Create and use reusable property schemas

**URL:** <https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859>\
**Category:** Module Development\
**Tags:** perspective\
**Created:** [April 25, 2023, 10:46am UTC](https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859 "2023-04-25T10:46:09Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![haakon.soehoel](https://avatars.discourse-cdn.com/v4/letter/h/ebca7d/32.png) [@haakon.soehoel](https://forum.inductiveautomation.com/u/haakon.soehoel)\
**Post date:** [April 25, 2023, 10:46am UTC](https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859/1 "2023-04-25T10:46:09Z")

</div>

In our perspective components module we typically have some configuration properties that are shared by multiple of our components. Is there a way to define the schema for such common properties in a separate file, and refer to it from other schemas. E.g. something like this:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/3/a302a0071872f273ae570be99ec85067f8b7e57b.png)  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/3/33483e8ef6ba0fd00d78806d423ccc489c81a712.png)

If so, how should the common.props.json file be loaded into the system so that it can be resolved by the components property schema?

---

<div class="post-metadata">

**Author:** ![Joe\_Seph](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/joe_seph/32/40277_2.png) [@Joe\_Seph](https://forum.inductiveautomation.com/u/Joe_Seph)\
**Post date:** [May 8, 2023, 9:40pm UTC](https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859/2 "2023-05-08T21:40:48Z")

</div>

Hi Haakon,

Welcome to the forums!

What kind of objects are these in Perspective and what kind of properties are you trying to define?

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [May 8, 2023, 9:59pm UTC](https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859/3 "2023-05-08T21:59:54Z")

</div>

> [@haakon.soehoel](#):
>
> If so, how should the common.props.json file be loaded into the system so that it can be resolved by the components property schema?

As far as I can tell, you have to prefix the ref with the same `urn:ignition-schema` prefix that we use, and then an attempt will be made to look up your schema at the given resource path under the current context classloader. I don't know offhand if that means it's actually impossible to provide your own schemas for use on the gateway, since your schema will be loaded under another classloader, but you might still be able to get the autocompletion in the JsonEditor in the designer, since the designer has a single flat classloader.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [April 8, 2025, 1:38am UTC](https://forum.inductiveautomation.com/t/create-and-use-reusable-property-schemas/72859/4 "2025-04-08T01:38:55Z")

</div>

Necro bump 🪦

The approach supplied in this thread allows referencing both Perspective's native schemas and your own reusable schemas.

> [@Musson Industrial's Embr-Periscope Module](https://forum.inductiveautomation.com/t/musson-industrials-embr-periscope-module/99047/43):
>
> man_mage More testing required, but this seems to make the gateway happy (no more errors in the logs). override fun startup(activationState: LicenseState) { ... logger.debug("Registering components...") val originalClassLoader = Thread.currentThread().contextClassLoader Thread.currentThread().contextClassLoader = context.perspectiveContext.javaClass.classLoader ... componentRegistry.registerComponent(...) modelDelegateRegistry.re…
