# SHACL Shapes generated by @inferal-relay/rdf-emitter

@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tsps: <https://relay.inferal.com/ontology/typespec/shapes/> .
@prefix tspv: <https://relay.inferal.com/ontology/typespec/versioning/> .
@prefix adm: <https://ontology.inferal.com/modules/advertising-measurement/> .
@prefix chatgptcommerce: <https://relay.inferal.com/ontology/chatgptcommerce/> .
@prefix schema: <https://schema.org/> .

# Class hierarchy
chatgptcommerce:Price rdfs:subClassOf schema:PriceSpecification .
chatgptcommerce:Category rdfs:subClassOf schema:CategoryCode .
chatgptcommerce:FeedProduct rdfs:subClassOf schema:Product .
chatgptcommerce:Media rdfs:subClassOf schema:MediaObject .
chatgptcommerce:Product rdfs:subClassOf schema:Product .
chatgptcommerce:Variant rdfs:subClassOf schema:ProductModel .
chatgptcommerce:Seller rdfs:subClassOf schema:Organization .
chatgptcommerce:Promotion rdfs:subClassOf schema:Offer .

<https://relay.inferal.com/ontology/chatgptcommerce/shapes> a tsps:ShapeGeneration ;
  tsps:shapeReferenceChainLimit 5 ;
  tsps:omittedShapeReferenceCount 0 .

# Shape for Amount Off Benefit
chatgptcommerce:AmountOffBenefitShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:AmountOffBenefit ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.AmountOffBenefit/amountOff> ;
    sh:name "amount off" ;
    sh:description "Amount discounted." ;
    sh:node chatgptcommerce:PriceShape ;
    sh:class chatgptcommerce:Price ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.AmountOffBenefit/type> ;
    sh:name "type" ;
    sh:description "Must be amount_off." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "amount_off" ;
  ] .

# Shape for Price
chatgptcommerce:PriceShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Price ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Price/amount> ;
    sh:name "amount" ;
    sh:description "Monetary amount expressed in ISO 4217 minor units." ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Price/currency> ;
    sh:name "currency" ;
    sh:description "Currency identifier." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Availability
chatgptcommerce:AvailabilityShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Availability ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Availability/available> ;
    sh:name "available" ;
    sh:description "Indicates whether the variant is currently purchasable." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Availability/status> ;
    sh:name "status" ;
    sh:description "Fulfillment state when availability is reported, for example in_stock, backorder, preorder, out_of_stock, or discontinued." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Barcode
chatgptcommerce:BarcodeShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Barcode ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Barcode/type> ;
    sh:name "type" ;
    sh:description "Barcode type." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Barcode/value> ;
    sh:name "value" ;
    sh:description "Barcode value." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Category
chatgptcommerce:CategoryShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Category ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Category/taxonomy> ;
    sh:name "taxonomy" ;
    sh:description "Taxonomy system used for the category value, such as google_product_category, shopify, or merchant." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Category/value> ;
    sh:name "value" ;
    sh:description "Category label or hierarchical path." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Date Time Range
chatgptcommerce:DateTimeRangeShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:DateTimeRange ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.DateTimeRange/endTime> ;
    sh:name "end time" ;
    sh:description "End timestamp." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.DateTimeRange/startTime> ;
    sh:name "start time" ;
    sh:description "Start timestamp." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
chatgptcommerce:DescriptionShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Description ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Description/html> ;
    sh:name "html" ;
    sh:description "HTML description." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Description/markdown> ;
    sh:name "markdown" ;
    sh:description "Markdown description." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Description/plain> ;
    sh:name "plain" ;
    sh:description "Plain-text description." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Feed Product
chatgptcommerce:FeedProductShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:FeedProduct ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant1Category> ;
    sh:name "custom variant1category" ;
    sh:description "Custom variant dimension 1" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant1Option> ;
    sh:name "custom variant1option" ;
    sh:description "Custom variant 1 option" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant2Category> ;
    sh:name "custom variant2category" ;
    sh:description "Custom variant dimension 2" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant2Option> ;
    sh:name "custom variant2option" ;
    sh:description "Custom variant 2 option" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant3Category> ;
    sh:name "custom variant3category" ;
    sh:description "Custom variant dimension 3" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/customVariant3Option> ;
    sh:name "custom variant3option" ;
    sh:description "Custom variant 3 option" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/acceptsExchanges> ;
    sh:name "accepts exchanges" ;
    sh:description "Accepts exchanges" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/acceptsReturns> ;
    sh:name "accepts returns" ;
    sh:description "Accepts returns" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/additionalImageUrls> ;
    sh:name "additional image urls" ;
    sh:description "Extra images" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/adsMetadata> ;
    sh:name "ads metadata" ;
    sh:description "Ad metadata values" ;
    sh:node <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/ageGroup> ;
    sh:name "age group" ;
    sh:description "Target demographic" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "newborn" "infant" "toddler" "kids" "adult" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/ageRestriction> ;
    sh:name "age restriction" ;
    sh:description "Minimum purchase age" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/availability> ;
    sh:name "availability" ;
    sh:description "Product availability" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "in_stock" "out_of_stock" "pre_order" "backorder" "unknown" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/availabilityDate> ;
    sh:name "availability date" ;
    sh:description "Availability date if pre-order" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/baseMeasure> ;
    sh:name "base measure" ;
    sh:description "Unit price and base measure" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/brand> ;
    sh:name "brand" ;
    sh:description "Product brand" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/color> ;
    sh:name "color" ;
    sh:description "Variant color" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/condition> ;
    sh:name "condition" ;
    sh:description "Condition of product" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/description> ;
    sh:name "description" ;
    sh:description "Full product description" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/dimensions> ;
    sh:name "dimensions" ;
    sh:description "Overall dimensions" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/dimensionsUnit> ;
    sh:name "dimensions unit" ;
    sh:description "Dimensions unit" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/expirationDate> ;
    sh:name "expiration date" ;
    sh:description "Remove product after date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/gender> ;
    sh:name "gender" ;
    sh:description "Gender target" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/geoAvailability> ;
    sh:name "geo availability" ;
    sh:description "Availability per region" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/geoPrice> ;
    sh:name "geo price" ;
    sh:description "Price by region" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/groupId> ;
    sh:name "group id" ;
    sh:description "Shared group identifier" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/gtin> ;
    sh:name "gtin" ;
    sh:description "Universal product identifier" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/height> ;
    sh:name "height" ;
    sh:description "Individual dimension" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/imageUrl> ;
    sh:name "image url" ;
    sh:description "Main product image URL" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/isAdsEligible> ;
    sh:name "is ads eligible" ;
    sh:description "Controls whether the product can be processed for ChatGPT ads. Use is_eligible_ads only as a legacy alias." ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/isDigital> ;
    sh:name "is digital" ;
    sh:description "Indicates if the product is digital" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/isEligibleCheckout> ;
    sh:name "is eligible checkout" ;
    sh:description "Allows direct purchase inside ChatGPT. is_eligible_search must be true for is_eligible_checkout to be enabled for the product." ;
    sh:datatype xsd:boolean ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/isEligibleSearch> ;
    sh:name "is eligible search" ;
    sh:description "Controls whether the product can be surfaced in ChatGPT search results." ;
    sh:datatype xsd:boolean ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/itemGroupTitle> ;
    sh:name "item group title" ;
    sh:description "Group product title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/itemId> ;
    sh:name "item id" ;
    sh:description "Merchant product ID (unique per variant)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/itemWeightUnit> ;
    sh:name "item weight unit" ;
    sh:description "Product weight unit" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/length> ;
    sh:name "length" ;
    sh:description "Individual dimension" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/listingHasVariations> ;
    sh:name "listing has variations" ;
    sh:description "Indicates whether listing has variants" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/marketplaceSeller> ;
    sh:name "marketplace seller" ;
    sh:description "Marketplace seller of record" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/material> ;
    sh:name "material" ;
    sh:description "Primary material(s)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/model3dUrl> ;
    sh:name "model3d url" ;
    sh:description "3D model" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/mpn> ;
    sh:name "mpn" ;
    sh:description "Manufacturer part number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/offerId> ;
    sh:name "offer id" ;
    sh:description "Offer ID (SKU+seller+price)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/pickupMethod> ;
    sh:name "pickup method" ;
    sh:description "Pickup options" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "in_store" "reserve" "not_supported" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/pickupSla> ;
    sh:name "pickup sla" ;
    sh:description "Pickup SLA" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/popularityScore> ;
    sh:name "popularity score" ;
    sh:description "Popularity indicator" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/price> ;
    sh:name "price" ;
    sh:description "Regular price" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/pricingTrend> ;
    sh:name "pricing trend" ;
    sh:description "Lowest price in N months" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/productCategory> ;
    sh:name "product category" ;
    sh:description "Category path" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/qAndA> ;
    sh:name "q and a" ;
    sh:description "FAQ content" ;
    sh:node chatgptcommerce:QuestionAnswerShape ;
    sh:class chatgptcommerce:QuestionAnswer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/relatedProductId> ;
    sh:name "related product id" ;
    sh:description "Associated product IDs" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/relationshipType> ;
    sh:name "relationship type" ;
    sh:description "Relationship type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "part_of_set" "required_part" "often_bought_with" "substitute" "different_brand" "accessory" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/returnDeadlineInDays> ;
    sh:name "return deadline in days" ;
    sh:description "Days allowed for return" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/returnPolicy> ;
    sh:name "return policy" ;
    sh:description "Return policy URL" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/returnRate> ;
    sh:name "return rate" ;
    sh:description "Return rate" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/reviewCount> ;
    sh:name "review count" ;
    sh:description "Number of product reviews" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/reviews> ;
    sh:name "reviews" ;
    sh:description "Review entries" ;
    sh:node chatgptcommerce:ProductReviewShape ;
    sh:class chatgptcommerce:ProductReview ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/salePrice> ;
    sh:name "sale price" ;
    sh:description "Discounted price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/salePriceEndDate> ;
    sh:name "sale price end date" ;
    sh:description "Sale end date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/salePriceStartDate> ;
    sh:name "sale price start date" ;
    sh:description "Sale start date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/sellerName> ;
    sh:name "seller name" ;
    sh:description "Seller name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/sellerPrivacyPolicy> ;
    sh:name "seller privacy policy" ;
    sh:description "Seller-specific policies" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/sellerTos> ;
    sh:name "seller tos" ;
    sh:description "Seller-specific terms of service" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/sellerUrl> ;
    sh:name "seller url" ;
    sh:description "Seller page" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/shipping> ;
    sh:name "shipping" ;
    sh:description "Shipping information" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/size> ;
    sh:name "size" ;
    sh:description "Variant size" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/sizeSystem> ;
    sh:name "size system" ;
    sh:description "Size system" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/starRating> ;
    sh:name "star rating" ;
    sh:description "Average review score" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/storeCountry> ;
    sh:name "store country" ;
    sh:description "Store country of the item" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/storeReviewCount> ;
    sh:name "store review count" ;
    sh:description "Number of brand or store reviews" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/storeStarRating> ;
    sh:name "store star rating" ;
    sh:description "Average store rating" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/targetCountries> ;
    sh:name "target countries" ;
    sh:description "Target countries of the item (first entry used)" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/title> ;
    sh:name "title" ;
    sh:description "Product title" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/unitPricingMeasure> ;
    sh:name "unit pricing measure" ;
    sh:description "Unit price and base measure" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/url> ;
    sh:name "url" ;
    sh:description "Product detail page URL" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/variantDict> ;
    sh:name "variant dict" ;
    sh:description "Variant attributes map" ;
    sh:node <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/videoUrl> ;
    sh:name "video url" ;
    sh:description "Product video" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/warning> ;
    sh:name "warning" ;
    sh:description "Product disclaimers" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/warningUrl> ;
    sh:name "warning url" ;
    sh:description "Product disclaimers" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/weight> ;
    sh:name "weight" ;
    sh:description "Product weight" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/width> ;
    sh:name "width" ;
    sh:description "Individual dimension" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Question Answer
chatgptcommerce:QuestionAnswerShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:QuestionAnswer ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.QuestionAnswer/q> ;
    sh:name "q" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.QuestionAnswer/a> ;
    sh:name "a" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Product Review
chatgptcommerce:ProductReviewShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:ProductReview ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductReview/title> ;
    sh:name "title" ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductReview/content> ;
    sh:name "content" ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductReview/minRating> ;
    sh:name "min rating" ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductReview/maxRating> ;
    sh:name "max rating" ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductReview/rating> ;
    sh:name "rating" ;
    sh:datatype rdf:JSON ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Free Shipping Benefit
chatgptcommerce:FreeShippingBenefitShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:FreeShippingBenefit ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FreeShippingBenefit/type> ;
    sh:name "type" ;
    sh:description "Must be free_shipping." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "free_shipping" ;
  ] .

# Shape for Link
chatgptcommerce:LinkShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Link ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Link/title> ;
    sh:name "title" ;
    sh:description "Link title." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Link/type> ;
    sh:name "type" ;
    sh:description "Kind of destination, such as privacy_policy, terms_of_service, refund_policy, shipping_policy, or faq." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Link/url> ;
    sh:name "url" ;
    sh:description "Link destination URL." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Measure
chatgptcommerce:MeasureShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Measure ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Measure/unit> ;
    sh:name "unit" ;
    sh:description "Measure unit." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Measure/value> ;
    sh:name "value" ;
    sh:description "Measure value." ;
    sh:datatype xsd:double ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Media
chatgptcommerce:MediaShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Media ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Media/altText> ;
    sh:name "alt text" ;
    sh:description "Alternate text." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Media/height> ;
    sh:name "height" ;
    sh:description "Media height." ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Media/type> ;
    sh:name "type" ;
    sh:description "Media type." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Media/url> ;
    sh:name "url" ;
    sh:description "Media URL." ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Media/width> ;
    sh:name "width" ;
    sh:description "Media width." ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] .

# Shape for Percent Off Benefit
chatgptcommerce:PercentOffBenefitShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:PercentOffBenefit ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.PercentOffBenefit/percentOff> ;
    sh:name "percent off" ;
    sh:description "Percentage discounted." ;
    sh:datatype xsd:double ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.PercentOffBenefit/type> ;
    sh:name "type" ;
    sh:description "Must be percent_off." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "percent_off" ;
  ] .

# Shape for Product
chatgptcommerce:ProductShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Product ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/description> ;
    sh:name "description" ;
    sh:description "Product description content." ;
    sh:node chatgptcommerce:DescriptionShape ;
    sh:class chatgptcommerce:Description ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/id> ;
    sh:name "id" ;
    sh:description "Stable global identifier for this product." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/media> ;
    sh:name "media" ;
    sh:description "Product-level media assets." ;
    sh:node chatgptcommerce:MediaShape ;
    sh:class chatgptcommerce:Media ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/title> ;
    sh:name "title" ;
    sh:description "Product title." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/url> ;
    sh:name "url" ;
    sh:description "Canonical product URL." ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Product/variants> ;
    sh:name "variants" ;
    sh:description "Variants associated with the product." ;
    sh:node chatgptcommerce:VariantShape ;
    sh:class chatgptcommerce:Variant ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Variant
chatgptcommerce:VariantShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Variant ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/availability> ;
    sh:name "availability" ;
    sh:description "Availability state for the variant." ;
    sh:node chatgptcommerce:AvailabilityShape ;
    sh:class chatgptcommerce:Availability ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/barcodes> ;
    sh:name "barcodes" ;
    sh:description "Variant barcode values." ;
    sh:node chatgptcommerce:BarcodeShape ;
    sh:class chatgptcommerce:Barcode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/categories> ;
    sh:name "categories" ;
    sh:description "Categories associated with the variant." ;
    sh:node chatgptcommerce:CategoryShape ;
    sh:class chatgptcommerce:Category ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/condition> ;
    sh:name "condition" ;
    sh:description "Applicable item conditions." ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/description> ;
    sh:name "description" ;
    sh:description "Variant description content." ;
    sh:node chatgptcommerce:DescriptionShape ;
    sh:class chatgptcommerce:Description ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/id> ;
    sh:name "id" ;
    sh:description "Stable global identifier for this variant." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/listPrice> ;
    sh:name "list price" ;
    sh:description "Reference price before any discount is applied." ;
    sh:node chatgptcommerce:PriceShape ;
    sh:class chatgptcommerce:Price ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/media> ;
    sh:name "media" ;
    sh:description "Variant media assets. The first entry is treated as primary." ;
    sh:node chatgptcommerce:MediaShape ;
    sh:class chatgptcommerce:Media ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/price> ;
    sh:name "price" ;
    sh:description "Active sale price for this variant." ;
    sh:node chatgptcommerce:PriceShape ;
    sh:class chatgptcommerce:Price ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/seller> ;
    sh:name "seller" ;
    sh:description "Seller metadata for the variant." ;
    sh:node chatgptcommerce:SellerShape ;
    sh:class chatgptcommerce:Seller ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/title> ;
    sh:name "title" ;
    sh:description "Variant title." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/unitPrice> ;
    sh:name "unit price" ;
    sh:description "Unit pricing metadata." ;
    sh:node chatgptcommerce:UnitPriceShape ;
    sh:class chatgptcommerce:UnitPrice ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/url> ;
    sh:name "url" ;
    sh:description "Variant URL." ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Variant/variantOptions> ;
    sh:name "variant options" ;
    sh:description "Set of option selections for the variant, such as color or size." ;
    sh:node chatgptcommerce:VariantOptionShape ;
    sh:class chatgptcommerce:VariantOption ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Seller
chatgptcommerce:SellerShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Seller ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Seller/links> ;
    sh:name "links" ;
    sh:description "Seller-related links." ;
    sh:node chatgptcommerce:LinkShape ;
    sh:class chatgptcommerce:Link ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Seller/name> ;
    sh:name "name" ;
    sh:description "Seller name." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Unit Price
chatgptcommerce:UnitPriceShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:UnitPrice ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.UnitPrice/amount> ;
    sh:name "amount" ;
    sh:description "Unit price amount." ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.UnitPrice/currency> ;
    sh:name "currency" ;
    sh:description "Currency code." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.UnitPrice/measure> ;
    sh:name "measure" ;
    sh:description "Measured quantity." ;
    sh:node chatgptcommerce:MeasureShape ;
    sh:class chatgptcommerce:Measure ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.UnitPrice/reference> ;
    sh:name "reference" ;
    sh:description "Reference quantity." ;
    sh:node chatgptcommerce:ReferenceMeasureShape ;
    sh:class chatgptcommerce:ReferenceMeasure ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Reference Measure
chatgptcommerce:ReferenceMeasureShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:ReferenceMeasure ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ReferenceMeasure/unit> ;
    sh:name "unit" ;
    sh:description "Reference unit." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ReferenceMeasure/value> ;
    sh:name "value" ;
    sh:description "Reference value." ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Variant Option
chatgptcommerce:VariantOptionShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:VariantOption ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.VariantOption/name> ;
    sh:name "name" ;
    sh:description "Option name, such as color or size." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.VariantOption/value> ;
    sh:name "value" ;
    sh:description "Selected option value." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Product Target
chatgptcommerce:ProductTargetShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:ProductTarget ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductTarget/productId> ;
    sh:name "product id" ;
    sh:description "Product targeted by the promotion." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.ProductTarget/variantIds> ;
    sh:name "variant ids" ;
    sh:description "Variants targeted within the product." ;
    sh:datatype xsd:string ;
  ] .

# Shape for Promotion
chatgptcommerce:PromotionShape a sh:NodeShape ;
  sh:targetClass chatgptcommerce:Promotion ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/activePeriod> ;
    sh:name "active period" ;
    sh:description "Start and end time for the promotion." ;
    sh:node chatgptcommerce:DateTimeRangeShape ;
    sh:class chatgptcommerce:DateTimeRange ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/appliesTo> ;
    sh:name "applies to" ;
    sh:description "Products or variants targeted by the promotion." ;
    sh:node chatgptcommerce:ProductTargetShape ;
    sh:class chatgptcommerce:ProductTarget ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/benefits> ;
    sh:name "benefits" ;
    sh:description "Benefits applied by the promotion." ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:or (
      [ sh:node chatgptcommerce:AmountOffBenefitShape ; sh:class chatgptcommerce:AmountOffBenefit ]
      [ sh:node chatgptcommerce:PercentOffBenefitShape ; sh:class chatgptcommerce:PercentOffBenefit ]
      [ sh:node chatgptcommerce:FreeShippingBenefitShape ; sh:class chatgptcommerce:FreeShippingBenefit ]
    ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/description> ;
    sh:name "description" ;
    sh:description "Promotion description content." ;
    sh:node chatgptcommerce:DescriptionShape ;
    sh:class chatgptcommerce:Description ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/id> ;
    sh:name "id" ;
    sh:description "Promotion identifier." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/status> ;
    sh:name "status" ;
    sh:description "Promotion status." ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/title> ;
    sh:name "title" ;
    sh:description "Promotion title." ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.Promotion/url> ;
    sh:name "url" ;
    sh:description "Canonical promotion URL." ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] .

# Generated Record container shape for Chatgptcommerce.FeedProduct.adsMetadata
<https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/adsMetadata> ] ;
    sh:class chatgptcommerce:FeedProduct ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/entry> ;
    sh:node <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh:select """SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/key> ?key . ?right <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/key> ?key . }"""
  ] .

# Generated Record entry shape for Chatgptcommerce.FeedProduct.adsMetadata
<https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/adsMetadata/value> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .

# Generated Record container shape for Chatgptcommerce.FeedProduct.variantDict
<https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/chatgptcommerce/property/Chatgptcommerce.FeedProduct/variantDict> ] ;
    sh:class chatgptcommerce:FeedProduct ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/entry> ;
    sh:node <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/Entry> ;
    sh:nodeKind sh:BlankNodeOrIRI
  ] ;
  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "Record entry keys must be unique" ;
    sh:select """SELECT $this ?key WHERE { $this <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/key> ?key . ?right <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/key> ?key . }"""
  ] .

# Generated Record entry shape for Chatgptcommerce.FeedProduct.variantDict
<https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/chatgptcommerce/record/Chatgptcommerce.FeedProduct/variantDict/value> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .
