{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "http://product-information-graph.org/schema/2026-01-12/jsonld/Property.json",
    "title": "PIG Property JSON-LD Schema",
    "description": "Validates Property class definitions that specify attributes for entities and relationships. May include datatype specifications (string, integer, double, boolean, dateTime, etc.), cardinality constraints (sh:minCount, sh:maxCount, value constraints (sh:minInclusive, sh:maxInclusive, sh:maxLength, sh:pattern), enumeration values (pig:eligibleValue), default values, measurement units, and support for composed properties.",
    "type": "object",
    "properties": {
        "@id": {
            "$ref": "#/$defs/idString"
        },
        "@type": {
            "$ref": "#/$defs/idString"
        },
        "pig:specializes": {
            "$ref": "#/$defs/idObject"
        },
        "pig:itemType": {
            "type": "object",
            "required": [
                "@id"
            ],
            "properties": {
                "@id": {
                    "type": "string",
                    "enum": [
                        "pig:Property"
                    ],
                    "description": "The PigItemType for pig:Property"
                }
            },
            "additionalProperties": false
        },
        "dcterms:title": {
            "type": "array",
            "minItems": 1,
            "items": {
                "$ref": "#/$defs/languageValue"
            }
        },
        "dcterms:description": {
            "type": "array",
            "minItems": 1,
            "items": {
                "$ref": "#/$defs/languageValue"
            }
        },
        "sh:datatype": {
            "$ref": "#/$defs/idObject"
        },
        "sh:minCount": {
            "type": "number",
            "minimum": 0
        },
        "sh:maxCount": {
            "type": "number",
            "minimum": 0
        },
        "sh:maxLength": {
            "type": "number",
            "minimum": 0
        },
        "sh:minInclusive": {
            "type": "number"
        },
        "sh:maxInclusive": {
            "type": "number"
        },
        "sh:pattern": {
            "type": "string",
            "description": "Regular expression pattern for string validation"
        },
        "pig:unit": {
            "type": "string",
            "description": "Unit of measurement (SI unit)"
        },
        "sh:defaultValue": {
            "type": "string",
            "description": "Default value for this property"
        },
        "pig:eligibleValue": {
            "type": "array",
            "description": "Enumeration of allowed values",
            "items": {
                "type": "object",
                "required": [
                    "@id",
                    "dcterms:title"
                ],
                "properties": {
                    "@id": {
                        "$ref": "#/$defs/idString"
                    },
                    "dcterms:title": {
                        "type": "array",
                        "minItems": 1,
                        "items": {
                            "$ref": "#/$defs/languageValue"
                        }
                    }
                },
                "additionalProperties": false
            }
        },
        "pig:composedProperty": {
            "type": "array",
            "description": "References to other properties that compose this property",
            "items": {
                "$ref": "#/$defs/idObject"
            }
        }
    },
    "required": [
        "@id",
        "pig:itemType",
        "dcterms:title",
        "sh:datatype"
    ],
    "oneOf": [
        {
            "required": [
                "@type"
            ]
        },
        {
            "required": [
                "pig:specializes"
            ]
        }
    ],
    "additionalProperties": false,
    "$defs": {
        "idString": {
            "type": "string",
            "pattern": "^(?:[A-Za-z0-9_\\-]+:[^:\\s]+|https?:\\/\\/[^\\s]+)$",
            "description": "A valid ID string: either a namespaced identifier (prefix:name) or a URL"
        },
        "idObject": {
            "type": "object",
            "required": [
                "@id"
            ],
            "properties": {
                "@id": {
                    "$ref": "#/$defs/idString"
                }
            },
            "additionalProperties": false,
            "description": "JSON-LD ID object wrapper"
        },
        "languageValue": {
            "type": "object",
            "required": [
                "@value"
            ],
            "properties": {
                "@value": {
                    "type": "string",
                    "description": "The actual text content"
                },
                "@language": {
                    "type": "string",
                    "pattern": "^[a-z]{2}(-[A-Z]{2})?$",
                    "description": "IETF language tag (e.g., 'en', 'de', 'en-US')"
                }
            },
            "additionalProperties": false,
            "description": "Multi-language text value with optional language tag"
        }
    }
}