worksWellWith

Links to other ingredient categories or interventions that complement this one, producing better outcomes when used together than either alone. Enables synergy discovery through knowledge graph traversal.

Canonical URL: https://healthschema.org/worksWellWith
Namespace: hs:
Category: Property

Why This Property Exists

Many health and skincare solutions work best in combination. Understanding which ingredients or interventions complement each other is essential for:

Schema.org can describe individual ingredients and their effects, but has no vocabulary for expressing synergistic relationships between ingredient categories. The worksWellWith property creates explicit links between complementary categories.

This enables powerful graph traversal:

SELECT ?complement ?name WHERE {
  hs:Humectant hs:worksWellWith ?complement .
  ?complement schema:name ?name .
}

Result: Occlusive, Emollient — the categories that complete what humectants start.

Domain and Range

Used On (Domain)

Type Context
hs:FunctionalIngredientCategory Links this category to others that produce synergistic effects

Expected Values (Range)

Type Notes
hs:FunctionalIngredientCategory Reference to another category (via @id) or inline definition. Arrays allowed for multiple complements.

Relationship Semantics

Symmetry

worksWellWith is a symmetric relationship. If A works well with B, then B works well with A. When defining categories, you should specify the relationship from both sides for completeness, though a graph processor could infer symmetry.

If you declare It implies
Humectant worksWellWith Occlusive Occlusive worksWellWith Humectant

Transitivity

worksWellWith is NOT transitive. If A works well with B, and B works well with C, it does NOT follow that A works well with C. Each pairing must be established independently.

Strength

This property indicates beneficial combination, not merely compatibility. The relationship means:

Degree of Benefit

The current property is binary (works well / doesn't work well). It doesn't capture degree of synergy. If you need to express that some combinations are more beneficial than others, use the description property or consider extending with a qualified relationship.

Usage Guidance

Do

Don't

Relationship Network Example

In lip care, the three main categories form a complete network:

Humectant ←→ Emollient ←→ Occlusive
    ↑                           ↑
    └───────────────────────────┘

Each category works well with both others, creating a triangle of complementary relationships. All three together address the complete problem.

Examples

Example 1: Basic Complementary Relationship

Humectant needs occlusive to seal in moisture:

{
  "@type": "FunctionalIngredientCategory",
  "@id": "#FunctionalIngredientCategory/Humectant",
  "name": "Humectant",
  "mechanismOfAction": "Attracts and binds water molecules from environment or deeper tissue",
  "insufficientAlone": "Cannot prevent evaporation of attracted moisture",
  "worksWellWith": [
    {"@id": "#FunctionalIngredientCategory/Occlusive"},
    {"@id": "#FunctionalIngredientCategory/Emollient"}
  ]
}

Why this works: The insufficientAlone explains the gap; worksWellWith points to what fills it. Together they tell a complete story.

Example 2: Bidirectional Declaration

Showing both sides of the relationship:

{
  "@graph": [
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#FunctionalIngredientCategory/Humectant",
      "name": "Humectant",
      "worksWellWith": [
        {"@id": "#FunctionalIngredientCategory/Occlusive"}
      ]
    },
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#FunctionalIngredientCategory/Occlusive",
      "name": "Occlusive",
      "worksWellWith": [
        {"@id": "#FunctionalIngredientCategory/Humectant"}
      ]
    }
  ]
}

Why bidirectional: Explicit declaration from both sides ensures the relationship is discoverable regardless of which category you start from.

Example 3: Treatment Category Synergies

Beyond skincare ingredients:

{
  "@type": "FunctionalIngredientCategory",
  "@id": "#Category/TopicalRetinoid",
  "name": "Topical Retinoid",
  "mechanismOfAction": "Increases cell turnover and collagen production via retinoic acid receptor activation",
  "insufficientAlone": "Causes significant barrier disruption; photosensitivity requires additional protection",
  "worksWellWith": [
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#Category/CeramideMoisturiser",
      "name": "Ceramide-containing moisturiser",
      "description": "Restores barrier function disrupted by retinoid use"
    },
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#Category/BroadSpectrumSPF",
      "name": "Broad-spectrum SPF",
      "description": "Protects photosensitised skin from UV damage"
    }
  ]
}

Why this works: Shows how worksWellWith applies to treatment categories, not just moisturising ingredients. The inline definitions include rationale for each synergy.

Example 4: Complete Lip Care Network

Full interconnected category definitions:

{
  "@graph": [
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#FunctionalIngredientCategory/Humectant",
      "name": "Humectant",
      "physiologicalRole": "Increases water content in tissue",
      "insufficientAlone": "Cannot prevent evaporation; may worsen dryness in low humidity",
      "worksWellWith": [
        {"@id": "#FunctionalIngredientCategory/Occlusive"},
        {"@id": "#FunctionalIngredientCategory/Emollient"}
      ]
    },
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#FunctionalIngredientCategory/Emollient",
      "name": "Emollient",
      "physiologicalRole": "Fills cellular gaps; provides sebum-like lipids",
      "insufficientAlone": "Does not create sufficient barrier to prevent TEWL",
      "worksWellWith": [
        {"@id": "#FunctionalIngredientCategory/Humectant"},
        {"@id": "#FunctionalIngredientCategory/Occlusive"}
      ]
    },
    {
      "@type": "FunctionalIngredientCategory",
      "@id": "#FunctionalIngredientCategory/Occlusive",
      "name": "Occlusive",
      "physiologicalRole": "Seals moisture; reduces TEWL by up to 99%",
      "insufficientAlone": "Seals in whatever moisture exists; provides no nutrients or lipid replacement",
      "worksWellWith": [
        {"@id": "#FunctionalIngredientCategory/Humectant"},
        {"@id": "#FunctionalIngredientCategory/Emollient"}
      ]
    }
  ]
}

Why this works: Creates a queryable network where starting from any category, you can discover what completes it. Each category's limitation (insufficientAlone) is addressed by what it worksWellWith.

Implementation Notes

Graph Traversal

This property is designed for knowledge graph use. Example queries:

Find all complements of a category:

SELECT ?complement WHERE {
  <#FunctionalIngredientCategory/Humectant> hs:worksWellWith ?complement .
}

Find categories that work well together:

SELECT ?cat1 ?cat2 WHERE {
  ?cat1 hs:worksWellWith ?cat2 .
  ?cat1 a hs:FunctionalIngredientCategory .
}

Find complete combinations (all three lip care categories):

SELECT ?product WHERE {
  ?product schema:containsIngredient ?ing1, ?ing2, ?ing3 .
  ?ing1 a hs:Humectant .
  ?ing2 a hs:Emollient .
  ?ing3 a hs:Occlusive .
}

JSON-LD Container

In the Health Schema context, worksWellWith is defined with @container: @list, preserving order if specified. However, the order typically has no semantic meaning—it's a set relationship.

Validation

Standard schema.org validators will not recognise this property. This is expected for Health Schema extensions. The property is defined in the Health Schema context and will be correctly interpreted by systems that load this context.