# 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 schema: <https://schema.org/> .
@prefix amadeus: <https://relay.inferal.com/ontology/amadeus/> .
@prefix http: <http://www.w3.org/2011/http#> .

# Class hierarchy
amadeus:AmadeusError rdfs:subClassOf schema:Thing .
amadeus:GeoCode rdfs:subClassOf schema:GeoCoordinates .
amadeus:Address rdfs:subClassOf schema:PostalAddress .
amadeus:Location rdfs:subClassOf schema:Place .
amadeus:Distance rdfs:subClassOf schema:QuantitativeValue .
amadeus:FlexibleLocation rdfs:subClassOf schema:Place .
amadeus:Airline rdfs:subClassOf schema:Airline .
amadeus:Airport rdfs:subClassOf schema:Airport .
amadeus:DirectDestination rdfs:subClassOf schema:Place .
amadeus:FlightOffer rdfs:subClassOf schema:Offer .
amadeus:FlightSegment rdfs:subClassOf schema:Flight .
amadeus:OperatingCarrier rdfs:subClassOf schema:Airline .
amadeus:FlightOfferPrice rdfs:subClassOf schema:PriceSpecification .
amadeus:Fee rdfs:subClassOf schema:PriceSpecification .
amadeus:Tax rdfs:subClassOf schema:PriceSpecification .
amadeus:AdditionalService rdfs:subClassOf schema:Service .
amadeus:TravelerPrice rdfs:subClassOf schema:PriceSpecification .
amadeus:BaggageAllowance rdfs:subClassOf schema:QuantitativeValue .
amadeus:ChargeableCheckedBags rdfs:subClassOf amadeus:BaggageAllowance .
amadeus:FlightOrder rdfs:subClassOf schema:FlightReservation .
amadeus:Traveler rdfs:subClassOf schema:Person .
amadeus:Contact rdfs:subClassOf schema:ContactPoint .
amadeus:CreditCard rdfs:subClassOf schema:PaymentCard .
amadeus:ContactInfo rdfs:subClassOf schema:ContactPoint .
amadeus:Payment rdfs:subClassOf schema:PaymentMethod .
amadeus:HotelPrice rdfs:subClassOf schema:PriceSpecification .
amadeus:HotelTax rdfs:subClassOf schema:PriceSpecification .
amadeus:Hotel rdfs:subClassOf schema:Hotel .
amadeus:HotelAddress rdfs:subClassOf schema:PostalAddress .
amadeus:HotelOffers rdfs:subClassOf schema:Offer .
amadeus:HotelOffer rdfs:subClassOf schema:Offer .
amadeus:Room rdfs:subClassOf schema:HotelRoom .
amadeus:HotelSentiment rdfs:subClassOf schema:Rating .
amadeus:HotelGuest rdfs:subClassOf schema:Person .
amadeus:HotelGuestContact rdfs:subClassOf schema:ContactPoint .
amadeus:HotelPayment rdfs:subClassOf schema:PaymentMethod .
amadeus:HotelPaymentCard rdfs:subClassOf schema:PaymentCard .
amadeus:HotelBooking rdfs:subClassOf schema:LodgingReservation .
amadeus:HotelStakeholder rdfs:subClassOf schema:Person .
amadeus:HotelContact rdfs:subClassOf schema:ContactPoint .
amadeus:HotelOrder rdfs:subClassOf schema:LodgingReservation .
amadeus:TransferOffer rdfs:subClassOf schema:Offer .
amadeus:TransferLocation rdfs:subClassOf schema:Place .
amadeus:TransferAddress rdfs:subClassOf schema:PostalAddress .
amadeus:Vehicle rdfs:subClassOf schema:Vehicle .
amadeus:ServiceProvider rdfs:subClassOf schema:LocalBusiness .
amadeus:ContactWithAddress rdfs:subClassOf schema:ContactPoint .
amadeus:Quotation rdfs:subClassOf schema:PriceSpecification .
amadeus:ExtraService rdfs:subClassOf schema:Service .
amadeus:TransferDistance rdfs:subClassOf schema:QuantitativeValue .
amadeus:TransferOrder rdfs:subClassOf schema:TaxiReservation .
amadeus:TransferPassenger rdfs:subClassOf schema:Person .
amadeus:TransferPassengerContact rdfs:subClassOf schema:ContactPoint .
amadeus:TransferAgency rdfs:subClassOf schema:Organization .
amadeus:TransferPayment rdfs:subClassOf schema:PaymentMethod .
amadeus:TransferCreditCard rdfs:subClassOf schema:PaymentCard .
amadeus:Corporation rdfs:subClassOf schema:Organization .
amadeus:PointOfInterest rdfs:subClassOf schema:TouristAttraction .
amadeus:City rdfs:subClassOf schema:City .
amadeus:CityAddress rdfs:subClassOf schema:PostalAddress .
amadeus:LocationScore rdfs:subClassOf schema:Rating .
amadeus:TravelRecommendation rdfs:subClassOf schema:Place .
amadeus:SafePlace rdfs:subClassOf schema:Place .
amadeus:SafetyScore rdfs:subClassOf schema:Rating .
amadeus:Activity rdfs:subClassOf schema:TouristTrip .
amadeus:ActivityPrice rdfs:subClassOf schema:PriceSpecification .
amadeus:HotelOrderPayment rdfs:subClassOf schema:PaymentMethod .

<https://relay.inferal.com/ontology/amadeus/shapes> a tsps:ShapeGeneration ;
  tsps:shapeReferenceChainLimit 5 ;
  tsps:omittedShapeReferenceCount 4
  ;
  tsps:omittedShapeReference [
    tsps:referenceFrom amadeus:BrandedFaresUpsellRequestShape ;
    tsps:referenceTo <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BrandedFaresUpsellRequest/dataShape> ;
    tsps:omittedBecause "over-long"
  ] ;
  tsps:omittedShapeReference [
    tsps:referenceFrom amadeus:FlightChoiceRequestShape ;
    tsps:referenceTo <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightChoiceRequest/dataShape> ;
    tsps:omittedBecause "over-long"
  ] ;
  tsps:omittedShapeReference [
    tsps:referenceFrom amadeus:FlightOffersPriceRequestShape ;
    tsps:referenceTo <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOffersPriceRequest/dataShape> ;
    tsps:omittedBecause "over-long"
  ] ;
  tsps:omittedShapeReference [
    tsps:referenceFrom amadeus:FlightOrderCreateRequestShape ;
    tsps:referenceTo <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOrderCreateRequest/dataShape> ;
    tsps:omittedBecause "over-long"
  ] .

# Shape for Access Token Request
amadeus:AccessTokenRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:AccessTokenRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenRequest/grantType> ;
    sh:name "grant type" ;
    sh:description "Must be 'client_credentials'" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "client_credentials" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenRequest/clientId> ;
    sh:name "client id" ;
    sh:description "Your API Key (client ID)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenRequest/clientSecret> ;
    sh:name "client secret" ;
    sh:description "Your API Secret (client secret)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Access Token Response
amadeus:AccessTokenResponseShape a sh:NodeShape ;
  sh:targetClass amadeus:AccessTokenResponse ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/type> ;
    sh:name "type" ;
    sh:description "Resource type (amadeusOAuth2Token)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "amadeusOAuth2Token" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/username> ;
    sh:name "username" ;
    sh:description "Your username (email address)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/applicationName> ;
    sh:name "application name" ;
    sh:description "Application name associated with the credentials" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/clientId> ;
    sh:name "client id" ;
    sh:description "Client ID used for authentication" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/tokenType> ;
    sh:name "token type" ;
    sh:description "Token type (always 'Bearer')" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "Bearer" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/accessToken> ;
    sh:name "access token" ;
    sh:description "The access token to use for API requests" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/expiresIn> ;
    sh:name "expires in" ;
    sh:description "Token expiration time in seconds" ;
    sh:datatype xsd:int ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/state> ;
    sh:name "state" ;
    sh:description "Token state" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "approved" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AccessTokenResponse/scope> ;
    sh:name "scope" ;
    sh:description "Granted scopes (typically empty for self-service)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Amadeus Error
amadeus:AmadeusErrorShape a sh:NodeShape ;
  sh:targetClass amadeus:AmadeusError ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AmadeusError/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:ErrorDetailShape ;
    sh:class amadeus:ErrorDetail ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Error Detail
amadeus:ErrorDetailShape a sh:NodeShape ;
  sh:targetClass amadeus:ErrorDetail ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorDetail/status> ;
    sh:name "status" ;
    sh:description "HTTP status code" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorDetail/code> ;
    sh:name "code" ;
    sh:description "Error code (e.g., 477, 4926)" ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorDetail/title> ;
    sh:name "title" ;
    sh:description "Error title (e.g., 'INVALID FORMAT')" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorDetail/detail> ;
    sh:name "detail" ;
    sh:description "Detailed error description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorDetail/source> ;
    sh:name "source" ;
    sh:description "Source of the error" ;
    sh:node amadeus:ErrorSourceShape ;
    sh:class amadeus:ErrorSource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Error Source
amadeus:ErrorSourceShape a sh:NodeShape ;
  sh:targetClass amadeus:ErrorSource ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorSource/pointer> ;
    sh:name "pointer" ;
    sh:description "Pointer to the parameter that caused the error" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorSource/parameter> ;
    sh:name "parameter" ;
    sh:description "Name of the parameter that caused the error" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ErrorSource/example> ;
    sh:name "example" ;
    sh:description "Example of a valid value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Not Found Error
amadeus:NotFoundErrorShape a sh:NodeShape ;
  sh:targetClass amadeus:NotFoundError ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.NotFoundError/statusCode> ;
    sh:name "status code" ;
    sh:datatype xsd:integer ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "404"^^xsd:integer ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.NotFoundError/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:ErrorDetailShape ;
    sh:class amadeus:ErrorDetail ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Issue
amadeus:IssueShape a sh:NodeShape ;
  sh:targetClass amadeus:Issue ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Issue/status> ;
    sh:name "status" ;
    sh:description "HTTP status code" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Issue/code> ;
    sh:name "code" ;
    sh:description "Error code (e.g., 477, 4926)" ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Issue/title> ;
    sh:name "title" ;
    sh:description "Error title (e.g., 'INVALID FORMAT')" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Issue/detail> ;
    sh:name "detail" ;
    sh:description "Detailed error description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Issue/source> ;
    sh:name "source" ;
    sh:description "Source of the error" ;
    sh:node amadeus:ErrorSourceShape ;
    sh:class amadeus:ErrorSource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Response Error
amadeus:response_errorShape a sh:NodeShape ;
  sh:targetClass amadeus:response_error ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.response_error/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:IssueShape ;
    sh:class amadeus:Issue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Warning
amadeus:WarningShape a sh:NodeShape ;
  sh:targetClass amadeus:Warning ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Warning/code> ;
    sh:name "code" ;
    sh:description "Warning code" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Warning/title> ;
    sh:name "title" ;
    sh:description "Warning title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Warning/detail> ;
    sh:name "detail" ;
    sh:description "Detailed warning message" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Warning/source> ;
    sh:name "source" ;
    sh:description "Source of the warning" ;
    sh:node amadeus:ErrorSourceShape ;
    sh:class amadeus:ErrorSource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Error400
amadeus:Error400Shape a sh:NodeShape ;
  sh:targetClass amadeus:Error400 ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error400/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:IssueShape ;
    sh:class amadeus:Issue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Error401
amadeus:Error401Shape a sh:NodeShape ;
  sh:targetClass amadeus:Error401 ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error401/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:IssueShape ;
    sh:class amadeus:Issue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Error404
amadeus:Error404Shape a sh:NodeShape ;
  sh:targetClass amadeus:Error404 ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error404/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:IssueShape ;
    sh:class amadeus:Issue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Error500
amadeus:Error500Shape a sh:NodeShape ;
  sh:targetClass amadeus:Error500 ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error500/errors> ;
    sh:name "errors" ;
    sh:description "List of errors" ;
    sh:node amadeus:IssueShape ;
    sh:class amadeus:Issue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Error
amadeus:ErrorShape a sh:NodeShape ;
  sh:targetClass amadeus:Error ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error/status> ;
    sh:name "status" ;
    sh:description "HTTP status code" ;
    sh:datatype xsd:long ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error/code> ;
    sh:name "code" ;
    sh:description "Error code (e.g., 477, 4926)" ;
    sh:datatype xsd:long ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error/title> ;
    sh:name "title" ;
    sh:description "Error title (e.g., 'INVALID FORMAT')" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error/detail> ;
    sh:name "detail" ;
    sh:description "Detailed error description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Error/source> ;
    sh:name "source" ;
    sh:description "Source of the error" ;
    sh:node amadeus:ErrorSourceShape ;
    sh:class amadeus:ErrorSource ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Collection Links
amadeus:CollectionLinksShape a sh:NodeShape ;
  sh:targetClass amadeus:CollectionLinks ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/self> ;
    sh:name "self" ;
    sh:description "Link to this page" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/next> ;
    sh:name "next" ;
    sh:description "Link to next page" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/previous> ;
    sh:name "previous" ;
    sh:description "Link to previous page" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/last> ;
    sh:name "last" ;
    sh:description "Link to last page" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/first> ;
    sh:name "first" ;
    sh:description "Link to first page" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionLinks/up> ;
    sh:name "up" ;
    sh:description "Link to parent resource" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Collection Meta
amadeus:CollectionMetaShape a sh:NodeShape ;
  sh:targetClass amadeus:CollectionMeta ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionMeta/count> ;
    sh:name "count" ;
    sh:description "Total count of results" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionMeta/links> ;
    sh:name "links" ;
    sh:description "Links to related resources" ;
    sh:node amadeus:CollectionLinksShape ;
    sh:class amadeus:CollectionLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CollectionMeta/oneWayCombinations> ;
    sh:name "one way combinations" ;
    sh:description "One-way combination suggestions for multi-city searches" ;
    sh:node amadeus:OneWayCombinationShape ;
    sh:class amadeus:OneWayCombination ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for One Way Combination
amadeus:OneWayCombinationShape a sh:NodeShape ;
  sh:targetClass amadeus:OneWayCombination ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OneWayCombination/originDestinationId> ;
    sh:name "origin destination id" ;
    sh:description "Origin-destination ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OneWayCombination/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "List of flight offer IDs that can be combined" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Resource Meta
amadeus:ResourceMetaShape a sh:NodeShape ;
  sh:targetClass amadeus:ResourceMeta ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ResourceMeta/links> ;
    sh:name "links" ;
    sh:description "Links to related resources" ;
    sh:node amadeus:CollectionLinksShape ;
    sh:class amadeus:CollectionLinks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Dictionaries
amadeus:DictionariesShape a sh:NodeShape ;
  sh:targetClass amadeus:Dictionaries ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/carriers> ;
    sh:name "carriers" ;
    sh:description "Airline/carrier code to name mapping" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/aircraft> ;
    sh:name "aircraft" ;
    sh:description "Aircraft code to name mapping" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/currencies> ;
    sh:name "currencies" ;
    sh:description "Currency code to name mapping" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/locations> ;
    sh:name "locations" ;
    sh:description "Location code to details mapping" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/ContainerShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/Container> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Location Dictionary Entry
amadeus:LocationDictionaryEntryShape a sh:NodeShape ;
  sh:targetClass amadeus:LocationDictionaryEntry ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationDictionaryEntry/cityCode> ;
    sh:name "city code" ;
    sh:description "City IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationDictionaryEntry/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] .

# Shape for Geo Code
amadeus:GeoCodeShape a sh:NodeShape ;
  sh:targetClass amadeus:GeoCode ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeoCode/latitude> ;
    sh:name "latitude" ;
    sh:description "Latitude in decimal degrees" ;
    sh:datatype xsd:double ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minInclusive "-90"^^xsd:double ;
    sh:maxInclusive "90"^^xsd:double ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeoCode/longitude> ;
    sh:name "longitude" ;
    sh:description "Longitude in decimal degrees" ;
    sh:datatype xsd:double ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minInclusive "-180"^^xsd:double ;
    sh:maxInclusive "180"^^xsd:double ;
  ] .

# Shape for Address
amadeus:AddressShape a sh:NodeShape ;
  sh:targetClass amadeus:Address ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/lines> ;
    sh:name "lines" ;
    sh:description "Street address lines" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/postalCode> ;
    sh:name "postal code" ;
    sh:description "Postal/ZIP code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/cityName> ;
    sh:name "city name" ;
    sh:description "City name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/cityCode> ;
    sh:name "city code" ;
    sh:description "City IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/countryName> ;
    sh:name "country name" ;
    sh:description "Country name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code (ISO 3166-1 alpha-2)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/stateCode> ;
    sh:name "state code" ;
    sh:description "State or province code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Address/regionCode> ;
    sh:name "region code" ;
    sh:description "Region code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Location
amadeus:LocationShape a sh:NodeShape ;
  sh:targetClass amadeus:Location ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/type> ;
    sh:name "type" ;
    sh:description "Location type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/subType> ;
    sh:name "sub type" ;
    sh:description "Location subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/name> ;
    sh:name "name" ;
    sh:description "Location name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/detailedName> ;
    sh:name "detailed name" ;
    sh:description "Detailed name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/id> ;
    sh:name "id" ;
    sh:description "Location ID (IATA code)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/self> ;
    sh:name "self" ;
    sh:description "Self-referential link" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Location/selfShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Location/self> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/timeZoneOffset> ;
    sh:name "time zone offset" ;
    sh:description "Time zone offset from UTC" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/address> ;
    sh:name "address" ;
    sh:description "Physical address" ;
    sh:node amadeus:AddressShape ;
    sh:class amadeus:Address ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/distance> ;
    sh:name "distance" ;
    sh:description "Distance from reference point" ;
    sh:node amadeus:DistanceShape ;
    sh:class amadeus:Distance ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/analytics> ;
    sh:name "analytics" ;
    sh:description "Analytics data" ;
    sh:node amadeus:LocationAnalyticsShape ;
    sh:class amadeus:LocationAnalytics ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/relevance> ;
    sh:name "relevance" ;
    sh:description "Relevance score (0-10 range based on distance and analytics)" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/category> ;
    sh:name "category" ;
    sh:description "Location category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "SIGHTS" "BEACH_PARK" "HISTORICAL" "NIGHTLIFE" "RESTAURANT" "SHOPPING" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/tags> ;
    sh:name "tags" ;
    sh:description "Related topic tags" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location/rank> ;
    sh:name "rank" ;
    sh:description "Fame-based position ranking (1 = highest)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Distance
amadeus:DistanceShape a sh:NodeShape ;
  sh:targetClass amadeus:Distance ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Distance/value> ;
    sh:name "value" ;
    sh:description "Great-circle distance value" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Distance/unit> ;
    sh:name "unit" ;
    sh:description "Unit of measurement (KM or MI)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "KM" "MI" ) ;
  ] .

# Shape for Location Analytics
amadeus:LocationAnalyticsShape a sh:NodeShape ;
  sh:targetClass amadeus:LocationAnalytics ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationAnalytics/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers data" ;
    sh:node amadeus:TravelersShape ;
    sh:class amadeus:Travelers ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Travelers
amadeus:TravelersShape a sh:NodeShape ;
  sh:targetClass amadeus:Travelers ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Travelers/score> ;
    sh:name "score" ;
    sh:description "Traveler score (approximate ranking based on number of travelers)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Flexible Location
amadeus:FlexibleLocationShape a sh:NodeShape ;
  sh:targetClass amadeus:FlexibleLocation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlexibleLocation/locationCode> ;
    sh:name "location code" ;
    sh:description "Location IATA code (airport or city)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlexibleLocation/locationType> ;
    sh:name "location type" ;
    sh:description "Location type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlexibleLocation/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates for radius search" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlexibleLocation/radius> ;
    sh:name "radius" ;
    sh:description "Radius for geographic search in kilometers" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Airline
amadeus:AirlineShape a sh:NodeShape ;
  sh:targetClass amadeus:Airline ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airline/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "airline" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airline/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA airline code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airline/icaoCode> ;
    sh:name "icao code" ;
    sh:description "ICAO airline code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airline/businessName> ;
    sh:name "business name" ;
    sh:description "Business name of the airline" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airline/commonName> ;
    sh:name "common name" ;
    sh:description "Common name of the airline" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Airline Destination
amadeus:AirlineDestinationShape a sh:NodeShape ;
  sh:targetClass amadeus:AirlineDestination ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineDestination/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "airline-destination" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineDestination/origin> ;
    sh:name "origin" ;
    sh:description "Departure airport IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineDestination/destination> ;
    sh:name "destination" ;
    sh:description "Destination airport IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineDestination/name> ;
    sh:name "name" ;
    sh:description "Name of the destination" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Airline Route
amadeus:AirlineRouteShape a sh:NodeShape ;
  sh:targetClass amadeus:AirlineRoute ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRoute/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "airline-route" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRoute/origin> ;
    sh:name "origin" ;
    sh:description "Origin airport IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRoute/destination> ;
    sh:name "destination" ;
    sh:description "Destination airport IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Airport
amadeus:AirportShape a sh:NodeShape ;
  sh:targetClass amadeus:Airport ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/subType> ;
    sh:name "sub type" ;
    sh:description "Location subtype (AIRPORT or CITY)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/name> ;
    sh:name "name" ;
    sh:description "Location name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/detailedName> ;
    sh:name "detailed name" ;
    sh:description "Detailed name including city" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/address> ;
    sh:name "address" ;
    sh:description "Physical address" ;
    sh:node amadeus:AddressShape ;
    sh:class amadeus:Address ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/timeZoneOffset> ;
    sh:name "time zone offset" ;
    sh:description "Time zone offset" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/analytics> ;
    sh:name "analytics" ;
    sh:description "Traveler analytics data" ;
    sh:node amadeus:AirportAnalyticsShape ;
    sh:class amadeus:AirportAnalytics ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Airport/relevance> ;
    sh:name "relevance" ;
    sh:description "Relevance score for search results" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] .

# Shape for Airport Analytics
amadeus:AirportAnalyticsShape a sh:NodeShape ;
  sh:targetClass amadeus:AirportAnalytics ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirportAnalytics/travelers> ;
    sh:name "travelers" ;
    sh:description "Number of travelers" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirportAnalytics/travelersShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirportAnalytics/travelers> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for On Time Performance Data
amadeus:OnTimePerformanceDataShape a sh:NodeShape ;
  sh:targetClass amadeus:OnTimePerformanceData ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OnTimePerformanceData/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "on-time-performance" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OnTimePerformanceData/id> ;
    sh:name "id" ;
    sh:description "Resource identifier" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OnTimePerformanceData/onTime> ;
    sh:name "on time" ;
    sh:description "On-time performance percentage" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Airport Route
amadeus:AirportRouteShape a sh:NodeShape ;
  sh:targetClass amadeus:AirportRoute ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirportRoute/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "airport-route" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirportRoute/destination> ;
    sh:name "destination" ;
    sh:description "Destination airport or city" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirportRoute/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype (AIRPORT or CITY)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] .

# Shape for Direct Destination
amadeus:DirectDestinationShape a sh:NodeShape ;
  sh:targetClass amadeus:DirectDestination ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/subType> ;
    sh:name "sub type" ;
    sh:description "Location subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/name> ;
    sh:name "name" ;
    sh:description "Destination name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/address> ;
    sh:name "address" ;
    sh:description "Address information" ;
    sh:node amadeus:AddressShape ;
    sh:class amadeus:Address ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DirectDestination/timeZoneOffset> ;
    sh:name "time zone offset" ;
    sh:description "Time zone offset" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Offer
amadeus:FlightOfferShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOffer ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-offer" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/id> ;
    sh:name "id" ;
    sh:description "Unique identifier for this offer" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/source> ;
    sh:name "source" ;
    sh:description "Offer source (GDS)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "GDS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/instantTicketingRequired> ;
    sh:name "instant ticketing required" ;
    sh:description "Whether instant ticketing is required" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/disablePricing> ;
    sh:name "disable pricing" ;
    sh:description "Whether pricing is disabled for this offer" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/nonHomogeneous> ;
    sh:name "non homogeneous" ;
    sh:description "Whether it's a non-homogeneous offer" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/oneWay> ;
    sh:name "one way" ;
    sh:description "Whether one way combinable" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/paymentCardRequired> ;
    sh:name "payment card required" ;
    sh:description "Whether payment card is required" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/lastTicketingDate> ;
    sh:name "last ticketing date" ;
    sh:description "Last ticketing date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/lastTicketingDateTime> ;
    sh:name "last ticketing date time" ;
    sh:description "Last ticketing date and time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/numberOfBookableSeats> ;
    sh:name "number of bookable seats" ;
    sh:description "Number of bookable seats" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/itineraries> ;
    sh:name "itineraries" ;
    sh:description "Flight itineraries" ;
    sh:node amadeus:ItineraryShape ;
    sh:class amadeus:Itinerary ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/price> ;
    sh:name "price" ;
    sh:description "Price information" ;
    sh:node amadeus:FlightOfferPriceShape ;
    sh:class amadeus:FlightOfferPrice ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/pricingOptions> ;
    sh:name "pricing options" ;
    sh:description "Pricing options" ;
    sh:node amadeus:PricingOptionsShape ;
    sh:class amadeus:PricingOptions ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/validatingAirlineCodes> ;
    sh:name "validating airline codes" ;
    sh:description "Validating airline codes" ;
    sh:datatype xsd:string ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/travelerPricings> ;
    sh:name "traveler pricings" ;
    sh:description "Traveler pricings" ;
    sh:node amadeus:TravelerPricingShape ;
    sh:class amadeus:TravelerPricing ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffer/dictionaries> ;
    sh:name "dictionaries" ;
    sh:description "Dictionaries for code lookup" ;
    sh:node amadeus:DictionariesShape ;
    sh:class amadeus:Dictionaries ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Itinerary
amadeus:ItineraryShape a sh:NodeShape ;
  sh:targetClass amadeus:Itinerary ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Itinerary/duration> ;
    sh:name "duration" ;
    sh:description "Total duration in ISO 8601 format" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Itinerary/segments> ;
    sh:name "segments" ;
    sh:description "Flight segments" ;
    sh:node amadeus:FlightSegmentShape ;
    sh:class amadeus:FlightSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Segment
amadeus:FlightSegmentShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightSegment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/departure> ;
    sh:name "departure" ;
    sh:description "Departure information" ;
    sh:node amadeus:FlightEndpointShape ;
    sh:class amadeus:FlightEndpoint ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival information" ;
    sh:node amadeus:FlightEndpointShape ;
    sh:class amadeus:FlightEndpoint ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Marketing carrier code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/number> ;
    sh:name "number" ;
    sh:description "Flight number" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/aircraft> ;
    sh:name "aircraft" ;
    sh:description "Aircraft information" ;
    sh:node amadeus:AircraftShape ;
    sh:class amadeus:Aircraft ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/operating> ;
    sh:name "operating" ;
    sh:description "Operating carrier information" ;
    sh:node amadeus:OperatingCarrierShape ;
    sh:class amadeus:OperatingCarrier ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/duration> ;
    sh:name "duration" ;
    sh:description "Flight duration in ISO 8601 format" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/id> ;
    sh:name "id" ;
    sh:description "Segment ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/numberOfStops> ;
    sh:name "number of stops" ;
    sh:description "Number of stops" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/blacklistedInEU> ;
    sh:name "blacklisted in eu" ;
    sh:description "Blacklisted in EU indicator" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/stops> ;
    sh:name "stops" ;
    sh:description "Technical stop information" ;
    sh:node amadeus:FlightStopShape ;
    sh:class amadeus:FlightStop ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Segment/co2Emissions> ;
    sh:name "co2emissions" ;
    sh:description "CO2 emissions for this segment" ;
    sh:node amadeus:Co2EmissionShape ;
    sh:class amadeus:Co2Emission ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Flight Endpoint
amadeus:FlightEndpointShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightEndpoint ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightEndpoint/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code of airport" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightEndpoint/terminal> ;
    sh:name "terminal" ;
    sh:description "Terminal" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightEndpoint/at> ;
    sh:name "at" ;
    sh:description "Date and time" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Aircraft
amadeus:AircraftShape a sh:NodeShape ;
  sh:targetClass amadeus:Aircraft ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Aircraft/code> ;
    sh:name "code" ;
    sh:description "IATA aircraft code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Operating Carrier
amadeus:OperatingCarrierShape a sh:NodeShape ;
  sh:targetClass amadeus:OperatingCarrier ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OperatingCarrier/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Operating carrier code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] .

# Shape for Flight Stop
amadeus:FlightStopShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightStop ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStop/iataCode> ;
    sh:name "iata code" ;
    sh:description "Stop airport IATA code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStop/duration> ;
    sh:name "duration" ;
    sh:description "Stop duration in ISO 8601 format" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStop/arrivalAt> ;
    sh:name "arrival at" ;
    sh:description "Arrival time at stop" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStop/departureAt> ;
    sh:name "departure at" ;
    sh:description "Departure time from stop" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Co2Emission
amadeus:Co2EmissionShape a sh:NodeShape ;
  sh:targetClass amadeus:Co2Emission ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Co2Emission/weight> ;
    sh:name "weight" ;
    sh:description "Weight in kilograms" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Co2Emission/weightUnit> ;
    sh:name "weight unit" ;
    sh:description "Weight unit" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "KG" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Co2Emission/cabin> ;
    sh:name "cabin" ;
    sh:description "Cabin class" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ECONOMY" "PREMIUM_ECONOMY" "BUSINESS" "FIRST" ) ;
  ] .

# Shape for Flight Offer Price
amadeus:FlightOfferPriceShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOfferPrice ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/currency> ;
    sh:name "currency" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/total> ;
    sh:name "total" ;
    sh:description "Total price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/base> ;
    sh:name "base" ;
    sh:description "Base price (without taxes)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/fees> ;
    sh:name "fees" ;
    sh:description "Fees" ;
    sh:node amadeus:FeeShape ;
    sh:class amadeus:Fee ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/taxes> ;
    sh:name "taxes" ;
    sh:description "Taxes" ;
    sh:node amadeus:TaxShape ;
    sh:class amadeus:Tax ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/refundableTaxes> ;
    sh:name "refundable taxes" ;
    sh:description "Refundable taxes amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/margin> ;
    sh:name "margin" ;
    sh:description "Margin amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/markups> ;
    sh:name "markups" ;
    sh:description "Markup information" ;
    sh:node amadeus:MarkupShape ;
    sh:class amadeus:Markup ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/grandTotal> ;
    sh:name "grand total" ;
    sh:description "Grand total including all fees and taxes" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/sellingTotal> ;
    sh:name "selling total" ;
    sh:description "Selling total (total + margins + markup + totalFees - discounts)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/billingCurrency> ;
    sh:name "billing currency" ;
    sh:description "Billing currency (may differ from display currency)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOfferPrice/additionalServices> ;
    sh:name "additional services" ;
    sh:description "Additional services pricing" ;
    sh:node amadeus:AdditionalServiceShape ;
    sh:class amadeus:AdditionalService ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Fee
amadeus:FeeShape a sh:NodeShape ;
  sh:targetClass amadeus:Fee ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Fee/amount> ;
    sh:name "amount" ;
    sh:description "Fee amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Fee/type> ;
    sh:name "type" ;
    sh:description "Fee type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "SUPPLIER" "TICKETING" "FORM_OF_PAYMENT" ) ;
  ] .

# Shape for Tax
amadeus:TaxShape a sh:NodeShape ;
  sh:targetClass amadeus:Tax ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Tax/amount> ;
    sh:name "amount" ;
    sh:description "Tax amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Tax/code> ;
    sh:name "code" ;
    sh:description "Tax code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Markup
amadeus:MarkupShape a sh:NodeShape ;
  sh:targetClass amadeus:Markup ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Markup/amount> ;
    sh:name "amount" ;
    sh:description "Markup amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Additional Service
amadeus:AdditionalServiceShape a sh:NodeShape ;
  sh:targetClass amadeus:AdditionalService ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalService/amount> ;
    sh:name "amount" ;
    sh:description "Service amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalService/type> ;
    sh:name "type" ;
    sh:description "Service type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CHECKED_BAGS" "MEALS" "SEATS" "OTHER_SERVICES" ) ;
  ] .

# Shape for Pricing Options
amadeus:PricingOptionsShape a sh:NodeShape ;
  sh:targetClass amadeus:PricingOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PricingOptions/fareType> ;
    sh:name "fare type" ;
    sh:description "Fare type (published, negotiated, etc.)" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PricingOptions/includedCheckedBagsOnly> ;
    sh:name "included checked bags only" ;
    sh:description "Include checked bags only" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PricingOptions/refundableFare> ;
    sh:name "refundable fare" ;
    sh:description "Refundable fare only" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PricingOptions/noRestrictionFare> ;
    sh:name "no restriction fare" ;
    sh:description "No restriction fare only" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PricingOptions/noPenaltyFare> ;
    sh:name "no penalty fare" ;
    sh:description "No penalty fare only" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Traveler Pricing
amadeus:TravelerPricingShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelerPricing ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/travelerId> ;
    sh:name "traveler id" ;
    sh:description "Traveler ID reference" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/fareOption> ;
    sh:name "fare option" ;
    sh:description "Fare option" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "STANDARD" "INCLUSIVE_TOUR" "SPANISH_MELILLA_RESIDENT" "SPANISH_CEUTA_RESIDENT" "SPANISH_CANARY_RESIDENT" "SPANISH_BALEARIC_RESIDENT" "AIR_FRANCE_METROPOLITAN_DISCOUNT_PASS" "AIR_FRANCE_DOM_DISCOUNT_PASS" "AIR_FRANCE_COMBINED_DISCOUNT_PASS" "AIR_FRANCE_FAMILY" "ADULT_WITH_COMPANION" "COMPANION" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/travelerType> ;
    sh:name "traveler type" ;
    sh:description "Traveler type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "ADULT" "CHILD" "SEATED_INFANT" "HELD_INFANT" "STUDENT" "SENIOR" "YOUNG" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/associatedAdultId> ;
    sh:name "associated adult id" ;
    sh:description "If type is HELD_INFANT, corresponds to the adult traveler's ID who will share the seat" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/price> ;
    sh:name "price" ;
    sh:description "Price for this traveler" ;
    sh:node amadeus:TravelerPriceShape ;
    sh:class amadeus:TravelerPrice ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPricing/fareDetailsBySegment> ;
    sh:name "fare details by segment" ;
    sh:description "Fare details by segment" ;
    sh:node amadeus:FareDetailsShape ;
    sh:class amadeus:FareDetails ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Traveler Price
amadeus:TravelerPriceShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelerPrice ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/currency> ;
    sh:name "currency" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/total> ;
    sh:name "total" ;
    sh:description "Total price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/base> ;
    sh:name "base" ;
    sh:description "Base price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/fees> ;
    sh:name "fees" ;
    sh:description "Fees" ;
    sh:node amadeus:FeeShape ;
    sh:class amadeus:Fee ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/taxes> ;
    sh:name "taxes" ;
    sh:description "Taxes" ;
    sh:node amadeus:TaxShape ;
    sh:class amadeus:Tax ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerPrice/refundableTaxes> ;
    sh:name "refundable taxes" ;
    sh:description "Refundable taxes" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Fare Details By Segment
amadeus:FareDetailsShape a sh:NodeShape ;
  sh:targetClass amadeus:FareDetails ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/segmentId> ;
    sh:name "segment id" ;
    sh:description "Segment ID reference" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/cabin> ;
    sh:name "cabin" ;
    sh:description "Cabin class" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ECONOMY" "PREMIUM_ECONOMY" "BUSINESS" "FIRST" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/fareBasis> ;
    sh:name "fare basis" ;
    sh:description "Fare basis code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/brandedFare> ;
    sh:name "branded fare" ;
    sh:description "Branded fare information" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/brandedFareLabel> ;
    sh:name "branded fare label" ;
    sh:description "Branded fare label" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/class> ;
    sh:name "class" ;
    sh:description "Booking class" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/includedCheckedBags> ;
    sh:name "included checked bags" ;
    sh:description "Included checked bags" ;
    sh:or (
      [ sh:node amadeus:BaggageAllowanceShape ; sh:class amadeus:BaggageAllowance ]
      [ sh:node amadeus:ChargeableCheckedBagsShape ; sh:class amadeus:ChargeableCheckedBags ]
    ) ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/includedCabinBags> ;
    sh:name "included cabin bags" ;
    sh:description "Included cabin bags" ;
    sh:or (
      [ sh:node amadeus:BaggageAllowanceShape ; sh:class amadeus:BaggageAllowance ]
      [ sh:node amadeus:ChargeableCheckedBagsShape ; sh:class amadeus:ChargeableCheckedBags ]
    ) ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/additionalServices> ;
    sh:name "additional services" ;
    sh:description "Additional services for this segment" ;
    sh:node amadeus:AdditionalServicesRequestShape ;
    sh:class amadeus:AdditionalServicesRequest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/amenities> ;
    sh:name "amenities" ;
    sh:description "Amenities" ;
    sh:node amadeus:AmenityShape ;
    sh:class amadeus:Amenity ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/isAllotment> ;
    sh:name "is allotment" ;
    sh:description "Whether fare is from allotment" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/allotmentDetails> ;
    sh:name "allotment details" ;
    sh:description "Allotment details for tour bookings" ;
    sh:node amadeus:AllotmentDetailsShape ;
    sh:class amadeus:AllotmentDetails ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FareDetailsBySegment/sliceDiceIndicator> ;
    sh:name "slice dice indicator" ;
    sh:description "Slice/dice indicator for fare type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "LOCAL_AVAILABILITY" "SUB_OD_AVAILABILITY_1" "SUB_OD_AVAILABILITY_2" ) ;
  ] .

# Shape for Baggage Allowance
amadeus:BaggageAllowanceShape a sh:NodeShape ;
  sh:targetClass amadeus:BaggageAllowance ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BaggageAllowance/quantity> ;
    sh:name "quantity" ;
    sh:description "Number of bags" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BaggageAllowance/weight> ;
    sh:name "weight" ;
    sh:description "Weight per bag" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BaggageAllowance/weightUnit> ;
    sh:name "weight unit" ;
    sh:description "Weight unit" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "KG" "LB" ) ;
  ] .

# Shape for Additional Services Request
amadeus:AdditionalServicesRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:AdditionalServicesRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalServicesRequest/chargeableCheckedBags> ;
    sh:name "chargeable checked bags" ;
    sh:description "Details of chargeable checked bags" ;
    sh:node amadeus:ChargeableCheckedBagsShape ;
    sh:class amadeus:ChargeableCheckedBags ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalServicesRequest/chargeableSeat> ;
    sh:name "chargeable seat" ;
    sh:description "Details of chargeable seat" ;
    sh:node amadeus:ChargeableSeatShape ;
    sh:class amadeus:ChargeableSeat ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalServicesRequest/chargeableSeatNumber> ;
    sh:name "chargeable seat number" ;
    sh:description "DEPRECATED - use the chargeableSeat attribute - seat number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AdditionalServicesRequest/otherServices> ;
    sh:name "other services" ;
    sh:description "Other services to add" ;
    sh:datatype xsd:string ;
    sh:in ( "PRIORITY_BOARDING" "AIRPORT_CHECKIN" ) ;
  ] .

# Shape for Chargeable Checked Bags
amadeus:ChargeableCheckedBagsShape a sh:NodeShape ;
  sh:targetClass amadeus:ChargeableCheckedBags ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ChargeableCheckedBags/id> ;
    sh:name "id" ;
    sh:description "ID of the chargeable bag" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Chargeable Seat
amadeus:ChargeableSeatShape a sh:NodeShape ;
  sh:targetClass amadeus:ChargeableSeat ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ChargeableSeat/id> ;
    sh:name "id" ;
    sh:description "ID of the chargeable seat" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ChargeableSeat/number> ;
    sh:name "number" ;
    sh:description "Seat number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Amenity
amadeus:AmenityShape a sh:NodeShape ;
  sh:targetClass amadeus:Amenity ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Amenity/description> ;
    sh:name "description" ;
    sh:description "Amenity description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Amenity/isChargeable> ;
    sh:name "is chargeable" ;
    sh:description "Whether chargeable" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Amenity/amenityType> ;
    sh:name "amenity type" ;
    sh:description "Amenity type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Amenity/amenityProvider> ;
    sh:name "amenity provider" ;
    sh:description "Amenity provider" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Amenity/amenityProviderShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Amenity/amenityProvider> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Allotment Details
amadeus:AllotmentDetailsShape a sh:NodeShape ;
  sh:targetClass amadeus:AllotmentDetails ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AllotmentDetails/tourName> ;
    sh:name "tour name" ;
    sh:description "Tour name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AllotmentDetails/tourReference> ;
    sh:name "tour reference" ;
    sh:description "Tour reference code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Order
amadeus:FlightOrderShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOrder ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-order" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/id> ;
    sh:name "id" ;
    sh:description "Order ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/queuingOfficeId> ;
    sh:name "queuing office id" ;
    sh:description "Queuing office ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/ownerOfficeId> ;
    sh:name "owner office id" ;
    sh:description "Owner office ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/associatedRecords> ;
    sh:name "associated records" ;
    sh:description "Associated airline records (PNRs)" ;
    sh:node amadeus:AssociatedRecordShape ;
    sh:class amadeus:AssociatedRecord ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/flightOffers> ;
    sh:name "flight offers" ;
    sh:description "Flight offers in this order" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers in this order" ;
    sh:node amadeus:TravelerShape ;
    sh:class amadeus:Traveler ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/remarks> ;
    sh:name "remarks" ;
    sh:description "Remarks/comments" ;
    sh:node amadeus:RemarksShape ;
    sh:class amadeus:Remarks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/formOfPayments> ;
    sh:name "form of payments" ;
    sh:description "Forms of payment" ;
    sh:node amadeus:FormOfPaymentShape ;
    sh:class amadeus:FormOfPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/ticketingAgreement> ;
    sh:name "ticketing agreement" ;
    sh:description "Ticketing agreement" ;
    sh:node amadeus:TicketingAgreementShape ;
    sh:class amadeus:TicketingAgreement ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/automatedProcess> ;
    sh:name "automated process" ;
    sh:description "Automated process information" ;
    sh:node amadeus:AutomatedProcessShape ;
    sh:class amadeus:AutomatedProcess ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/contacts> ;
    sh:name "contacts" ;
    sh:description "Contact information" ;
    sh:node amadeus:ContactInfoShape ;
    sh:class amadeus:ContactInfo ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/tickets> ;
    sh:name "tickets" ;
    sh:description "Issued tickets" ;
    sh:node amadeus:AirTravelDocumentShape ;
    sh:class amadeus:AirTravelDocument ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrder/formOfIdentifications> ;
    sh:name "form of identifications" ;
    sh:description "Form of identification" ;
    sh:node amadeus:FormOfIdentificationShape ;
    sh:class amadeus:FormOfIdentification ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Associated Record
amadeus:AssociatedRecordShape a sh:NodeShape ;
  sh:targetClass amadeus:AssociatedRecord ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AssociatedRecord/reference> ;
    sh:name "reference" ;
    sh:description "Record reference (PNR)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AssociatedRecord/creationDate> ;
    sh:name "creation date" ;
    sh:description "Record creation date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AssociatedRecord/originSystemCode> ;
    sh:name "origin system code" ;
    sh:description "Office ID that created the record" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AssociatedRecord/flightOfferId> ;
    sh:name "flight offer id" ;
    sh:description "Airline code that owns the record" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Traveler
amadeus:TravelerShape a sh:NodeShape ;
  sh:targetClass amadeus:Traveler ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/id> ;
    sh:name "id" ;
    sh:description "Traveler unique identifier" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/dateOfBirth> ;
    sh:name "date of birth" ;
    sh:description "Date of birth (YYYY-MM-DD)" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/gender> ;
    sh:name "gender" ;
    sh:description "Gender" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MALE" "FEMALE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/name> ;
    sh:name "name" ;
    sh:description "Traveler name" ;
    sh:node amadeus:TravelerNameShape ;
    sh:class amadeus:TravelerName ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/contact> ;
    sh:name "contact" ;
    sh:description "Contact information" ;
    sh:node amadeus:ContactShape ;
    sh:class amadeus:Contact ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/documents> ;
    sh:name "documents" ;
    sh:description "Identity documents" ;
    sh:node amadeus:TravelerDocumentShape ;
    sh:class amadeus:TravelerDocument ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Traveler/loyaltyPrograms> ;
    sh:name "loyalty programs" ;
    sh:description "Loyalty programs" ;
    sh:node amadeus:LoyaltyProgramShape ;
    sh:class amadeus:LoyaltyProgram ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Traveler Name
amadeus:TravelerNameShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelerName ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerName/firstName> ;
    sh:name "first name" ;
    sh:description "First name / given name" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerName/lastName> ;
    sh:name "last name" ;
    sh:description "Last name / surname" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerName/middleName> ;
    sh:name "middle name" ;
    sh:description "Middle name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerName/secondLastName> ;
    sh:name "second last name" ;
    sh:description "Second last name (for certain countries)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Contact
amadeus:ContactShape a sh:NodeShape ;
  sh:targetClass amadeus:Contact ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/phone> ;
    sh:name "phone" ;
    sh:description "Phone number (E.123 format)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/email> ;
    sh:name "email" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/emailAddress> ;
    sh:name "email address" ;
    sh:description "Email address (alternative)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/phones> ;
    sh:name "phones" ;
    sh:description "Phone numbers" ;
    sh:node amadeus:PhoneShape ;
    sh:class amadeus:Phone ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/companyName> ;
    sh:name "company name" ;
    sh:description "Company name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Contact/purpose> ;
    sh:name "purpose" ;
    sh:description "Contact purpose" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "STANDARD" "INVOICE" "STANDARD_AND_INVOICE" ) ;
  ] .

# Shape for Phone
amadeus:PhoneShape a sh:NodeShape ;
  sh:targetClass amadeus:Phone ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Phone/deviceType> ;
    sh:name "device type" ;
    sh:description "Device type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MOBILE" "LANDLINE" "FAX" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Phone/countryCallingCode> ;
    sh:name "country calling code" ;
    sh:description "Country calling code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Phone/number> ;
    sh:name "number" ;
    sh:description "Phone number" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Traveler Document
amadeus:TravelerDocumentShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelerDocument ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/documentType> ;
    sh:name "document type" ;
    sh:description "Document type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "PASSPORT" "IDENTITY_CARD" "VISA" "REDRESS" "KNOWN_TRAVELER" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/birthPlace> ;
    sh:name "birth place" ;
    sh:description "Birth place" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/issuanceLocation> ;
    sh:name "issuance location" ;
    sh:description "Issuance location" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/issuanceDate> ;
    sh:name "issuance date" ;
    sh:description "Issuance date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/number> ;
    sh:name "number" ;
    sh:description "Document number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/issuanceCountry> ;
    sh:name "issuance country" ;
    sh:description "Issuance country (ISO 3166-1)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/validityCountry> ;
    sh:name "validity country" ;
    sh:description "Validity country (ISO 3166-1)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/nationality> ;
    sh:name "nationality" ;
    sh:description "Nationality (ISO 3166-1)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerDocument/holder> ;
    sh:name "holder" ;
    sh:description "Holder indicator" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Loyalty Program
amadeus:LoyaltyProgramShape a sh:NodeShape ;
  sh:targetClass amadeus:LoyaltyProgram ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LoyaltyProgram/programOwner> ;
    sh:name "program owner" ;
    sh:description "Program owner (airline code)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LoyaltyProgram/id> ;
    sh:name "id" ;
    sh:description "Membership ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Remarks
amadeus:RemarksShape a sh:NodeShape ;
  sh:targetClass amadeus:Remarks ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Remarks/general> ;
    sh:name "general" ;
    sh:description "General remarks" ;
    sh:node amadeus:GeneralRemarkShape ;
    sh:class amadeus:GeneralRemark ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Remarks/airlineRemarks> ;
    sh:name "airline remarks" ;
    sh:description "Airline remarks" ;
    sh:node amadeus:AirlineRemarkShape ;
    sh:class amadeus:AirlineRemark ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for General Remark
amadeus:GeneralRemarkShape a sh:NodeShape ;
  sh:targetClass amadeus:GeneralRemark ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeneralRemark/subType> ;
    sh:name "sub type" ;
    sh:description "Remark subtype" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "GENERAL_MISCELLANEOUS" "CONFIDENTIAL" "INVOICE" "QUALITY_CONTROL" "BACKOFFICE" "FULFILLMENT" "ITINERARY" "TICKETING_MISCELLANEOUS" "TOUR_CODE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeneralRemark/category> ;
    sh:name "category" ;
    sh:description "Category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeneralRemark/text> ;
    sh:name "text" ;
    sh:description "Remark text" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeneralRemark/travelerIds> ;
    sh:name "traveler ids" ;
    sh:description "Traveler IDs this remark applies to" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GeneralRemark/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs this remark applies to" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Airline Remark
amadeus:AirlineRemarkShape a sh:NodeShape ;
  sh:targetClass amadeus:AirlineRemark ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/subType> ;
    sh:name "sub type" ;
    sh:description "Remark subtype" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "OTHER_SERVICE_INFORMATION" "KEYWORD" "OTHER" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/keyword> ;
    sh:name "keyword" ;
    sh:description "Keyword for the remark" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/airlineCode> ;
    sh:name "airline code" ;
    sh:description "Airline code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/text> ;
    sh:name "text" ;
    sh:description "Remark text" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/travelerIds> ;
    sh:name "traveler ids" ;
    sh:description "Traveler IDs this remark applies to" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirlineRemark/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs this remark applies to" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Form Of Payment
amadeus:FormOfPaymentShape a sh:NodeShape ;
  sh:targetClass amadeus:FormOfPayment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfPayment/b2bWallet> ;
    sh:name "b2b wallet" ;
    sh:description "Payment with B2B Wallet solution" ;
    sh:node amadeus:B2bWalletShape ;
    sh:class amadeus:B2bWallet ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfPayment/creditCard> ;
    sh:name "credit card" ;
    sh:description "Credit card information" ;
    sh:node amadeus:CreditCardShape ;
    sh:class amadeus:CreditCard ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfPayment/other> ;
    sh:name "other" ;
    sh:description "Other payment information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FormOfPayment/otherShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FormOfPayment/other> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for B2b Wallet
amadeus:B2bWalletShape a sh:NodeShape ;
  sh:targetClass amadeus:B2bWallet ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/cardId> ;
    sh:name "card id" ;
    sh:description "Card identifier (read-only)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/cardUsageName> ;
    sh:name "card usage name" ;
    sh:description "Card usage name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/cardFriendlyName> ;
    sh:name "card friendly name" ;
    sh:description "Card friendly name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/reportingData> ;
    sh:name "reporting data" ;
    sh:description "Reporting data for reconciliation" ;
    sh:node amadeus:ReportingDataShape ;
    sh:class amadeus:ReportingData ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/virtualCreditCardDetails> ;
    sh:name "virtual credit card details" ;
    sh:description "Virtual credit card details (read-only)" ;
    sh:node amadeus:VirtualCreditCardDetailsShape ;
    sh:class amadeus:VirtualCreditCardDetails ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.B2bWallet/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs to which this payment applies" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Reporting Data
amadeus:ReportingDataShape a sh:NodeShape ;
  sh:targetClass amadeus:ReportingData ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ReportingData/name> ;
    sh:name "name" ;
    sh:description "Data field name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ReportingData/value> ;
    sh:name "value" ;
    sh:description "Data field value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Virtual Credit Card Details
amadeus:VirtualCreditCardDetailsShape a sh:NodeShape ;
  sh:targetClass amadeus:VirtualCreditCardDetails ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/brand> ;
    sh:name "brand" ;
    sh:description "Card brand" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "VISA" "AMERICAN_EXPRESS" "MASTERCARD" "VISA_ELECTRON" "VISA_DEBIT" "MASTERCARD_DEBIT" "MAESTRO" "DINERS" "EASYPAY" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/vendorCode> ;
    sh:name "vendor code" ;
    sh:description "Card vendor code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/holder> ;
    sh:name "holder" ;
    sh:description "Cardholder name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/number> ;
    sh:name "number" ;
    sh:description "Card number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date (YYYY-MM)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/amount> ;
    sh:name "amount" ;
    sh:description "Amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VirtualCreditCardDetails/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Credit Card
amadeus:CreditCardShape a sh:NodeShape ;
  sh:targetClass amadeus:CreditCard ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/brand> ;
    sh:name "brand" ;
    sh:description "Card brand" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "VISA" "AMERICAN_EXPRESS" "MASTERCARD" "VISA_ELECTRON" "VISA_DEBIT" "MASTERCARD_DEBIT" "MAESTRO" "DINERS" "EASYPAY" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/vendorCode> ;
    sh:name "vendor code" ;
    sh:description "Card vendor code (VI=Visa, CA=MasterCard, AX=Amex, etc.)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/holder> ;
    sh:name "holder" ;
    sh:description "Cardholder name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/holderName> ;
    sh:name "holder name" ;
    sh:description "Cardholder name (alternative)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/number> ;
    sh:name "number" ;
    sh:description "Card number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date (YYYY-MM)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CreditCard/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Ticketing Agreement
amadeus:TicketingAgreementShape a sh:NodeShape ;
  sh:targetClass amadeus:TicketingAgreement ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TicketingAgreement/option> ;
    sh:name "option" ;
    sh:description "Agreement option" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CONFIRM" "DELAY_TO_QUEUE" "DELAY_TO_CANCEL" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TicketingAgreement/delay> ;
    sh:name "delay" ;
    sh:description "Delay duration before cancellation" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TicketingAgreement/dateTime> ;
    sh:name "date time" ;
    sh:description "Ticketing date and time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TicketingAgreement/segmentIds> ;
    sh:name "segment ids" ;
    sh:description "Segment IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Automated Process
amadeus:AutomatedProcessShape a sh:NodeShape ;
  sh:targetClass amadeus:AutomatedProcess ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/code> ;
    sh:name "code" ;
    sh:description "Process code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "IMMEDIATE" "DELAYED" "ERROR" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/queue> ;
    sh:name "queue" ;
    sh:description "Queue information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AutomatedProcess/queueShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AutomatedProcess/queue> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/text> ;
    sh:name "text" ;
    sh:description "Text description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/delay> ;
    sh:name "delay" ;
    sh:description "Delay duration" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/officeId> ;
    sh:name "office id" ;
    sh:description "Office ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess/dateTime> ;
    sh:name "date time" ;
    sh:description "Date and time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Contact Info
amadeus:ContactInfoShape a sh:NodeShape ;
  sh:targetClass amadeus:ContactInfo ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/addresseeName> ;
    sh:name "addressee name" ;
    sh:description "Address" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ContactInfo/addresseeNameShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ContactInfo/addresseeName> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/companyName> ;
    sh:name "company name" ;
    sh:description "Company name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/purpose> ;
    sh:name "purpose" ;
    sh:description "Contact purpose" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "STANDARD" "INVOICE" "STANDARD_AND_INVOICE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/phones> ;
    sh:name "phones" ;
    sh:description "Phone numbers" ;
    sh:node amadeus:PhoneShape ;
    sh:class amadeus:Phone ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/emailAddress> ;
    sh:name "email address" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo/address> ;
    sh:name "address" ;
    sh:description "Physical address" ;
    sh:node amadeus:AddressShape ;
    sh:class amadeus:Address ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Air Travel Document
amadeus:AirTravelDocumentShape a sh:NodeShape ;
  sh:targetClass amadeus:AirTravelDocument ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTravelDocument/documentType> ;
    sh:name "document type" ;
    sh:description "Document type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ETICKET" "PAPER_TICKET" "EMD" "MCO" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTravelDocument/documentNumber> ;
    sh:name "document number" ;
    sh:description "Document number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTravelDocument/documentStatus> ;
    sh:name "document status" ;
    sh:description "Document status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ISSUED" "REFUNDED" "VOID" "ORIGINAL" "CONJUNCTIVE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTravelDocument/travelerId> ;
    sh:name "traveler id" ;
    sh:description "Traveler ID reference" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTravelDocument/segmentIds> ;
    sh:name "segment ids" ;
    sh:description "Segment ID references" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Form Of Identification
amadeus:FormOfIdentificationShape a sh:NodeShape ;
  sh:targetClass amadeus:FormOfIdentification ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfIdentification/identificationType> ;
    sh:name "identification type" ;
    sh:description "Identification type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "DRIVERS_LICENSE" "PASSPORT" "NATIONAL_IDENTITY_CARD" "BOOKING_CONFIRMATION" "TICKET" "OTHER_ID" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfIdentification/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Carrier code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfIdentification/number> ;
    sh:name "number" ;
    sh:description "Identification number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfIdentification/travelerIds> ;
    sh:name "traveler ids" ;
    sh:description "Traveler IDs" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfIdentification/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Payment
amadeus:PaymentShape a sh:NodeShape ;
  sh:targetClass amadeus:Payment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Payment/brand> ;
    sh:name "brand" ;
    sh:description "Payment brand (e.g., VISA)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "VISA" "AMERICAN_EXPRESS" "MASTERCARD" "VISA_ELECTRON" "VISA_DEBIT" "MASTERCARD_DEBIT" "MAESTRO" "DINERS" "EASYPAY" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Payment/binNumber> ;
    sh:name "bin number" ;
    sh:description "Card BIN number" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Payment/method> ;
    sh:name "method" ;
    sh:description "Payment method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CASH" "CREDIT_CARD" "CHECK" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Payment/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Price Analysis
amadeus:PriceAnalysisShape a sh:NodeShape ;
  sh:targetClass amadeus:PriceAnalysis ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "itinerary-price-metric" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/origin> ;
    sh:name "origin" ;
    sh:description "Origin IATA code" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/originShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/origin> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/destination> ;
    sh:name "destination" ;
    sh:description "Destination IATA code" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/destinationShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/destination> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/departureDate> ;
    sh:name "departure date" ;
    sh:description "Departure date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/oneWay> ;
    sh:name "one way" ;
    sh:description "One-way indicator" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis/priceMetrics> ;
    sh:name "price metrics" ;
    sh:description "Price metrics" ;
    sh:node amadeus:PriceMetricShape ;
    sh:class amadeus:PriceMetric ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Price Metric
amadeus:PriceMetricShape a sh:NodeShape ;
  sh:targetClass amadeus:PriceMetric ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceMetric/amount> ;
    sh:name "amount" ;
    sh:description "Amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceMetric/quartileRanking> ;
    sh:name "quartile ranking" ;
    sh:description "Quartile ranking" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MINIMUM" "FIRST" "MEDIUM" "THIRD" "MAXIMUM" ) ;
  ] .

# Shape for Policies
amadeus:HotelPoliciesShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelPolicies ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/paymentType> ;
    sh:name "payment type" ;
    sh:description "Payment type required" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "GUARANTEE" "DEPOSIT" "PREPAY" "HOLDTIME" "NONE" "GUARANTEE_IMMEDIATE" "DEPOSIT_IMMEDIATE" "PREPAY_IMMEDIATE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/guarantee> ;
    sh:name "guarantee" ;
    sh:description "Guarantee policy" ;
    sh:node amadeus:GuaranteePolicyShape ;
    sh:class amadeus:GuaranteePolicy ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/deposit> ;
    sh:name "deposit" ;
    sh:description "Deposit policy" ;
    sh:node amadeus:DepositPolicyShape ;
    sh:class amadeus:DepositPolicy ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/prepay> ;
    sh:name "prepay" ;
    sh:description "Prepay policy" ;
    sh:node amadeus:PrepayPolicyShape ;
    sh:class amadeus:PrepayPolicy ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/holdTime> ;
    sh:name "hold time" ;
    sh:description "Hold time policy" ;
    sh:node amadeus:HoldTimeShape ;
    sh:class amadeus:HoldTime ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/cancellations> ;
    sh:name "cancellations" ;
    sh:description "Cancellation policies" ;
    sh:node amadeus:CancellationPolicyShape ;
    sh:class amadeus:CancellationPolicy ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Policies/checkInOut> ;
    sh:name "check in out" ;
    sh:description "Check-in/out information" ;
    sh:node amadeus:CheckInOutPolicyShape ;
    sh:class amadeus:CheckInOutPolicy ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Guarantee Policy
amadeus:GuaranteePolicyShape a sh:NodeShape ;
  sh:targetClass amadeus:GuaranteePolicy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuaranteePolicy/acceptedPayments> ;
    sh:name "accepted payments" ;
    sh:description "Accepted payment methods" ;
    sh:node amadeus:AcceptedPaymentsShape ;
    sh:class amadeus:AcceptedPayments ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuaranteePolicy/description> ;
    sh:name "description" ;
    sh:description "Guarantee description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.GuaranteePolicy/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.GuaranteePolicy/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Accepted Payments
amadeus:AcceptedPaymentsShape a sh:NodeShape ;
  sh:targetClass amadeus:AcceptedPayments ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AcceptedPayments/creditCards> ;
    sh:name "credit cards" ;
    sh:description "Credit card types accepted" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AcceptedPayments/methods> ;
    sh:name "methods" ;
    sh:description "Payment methods accepted" ;
    sh:datatype xsd:string ;
    sh:in ( "CREDIT_CARD" "AGENCY_ACCOUNT" "TRAVEL_AGENT_ID" "CORPORATE_ID" "HOTEL_GUEST_ID" "CHECK" "MISC_CHARGE_ORDER" "ADVANCE_DEPOSIT" "COMPANY_ADDRESS" "VCC" "VCC_BILLBACK" "VCC_B2B_WALLET" "TRAVEL_AGENT_IMMEDIATE" "DEFERED_PAYMENT" "CASH" ) ;
  ] .

# Shape for Deposit Policy
amadeus:DepositPolicyShape a sh:NodeShape ;
  sh:targetClass amadeus:DepositPolicy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy/amount> ;
    sh:name "amount" ;
    sh:description "Deposit amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy/deadline> ;
    sh:name "deadline" ;
    sh:description "Deadline" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy/acceptedPayments> ;
    sh:name "accepted payments" ;
    sh:description "Accepted payments" ;
    sh:node amadeus:AcceptedPaymentsShape ;
    sh:class amadeus:AcceptedPayments ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy/description> ;
    sh:name "description" ;
    sh:description "Description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.DepositPolicy/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.DepositPolicy/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Prepay Policy
amadeus:PrepayPolicyShape a sh:NodeShape ;
  sh:targetClass amadeus:PrepayPolicy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy/amount> ;
    sh:name "amount" ;
    sh:description "Prepay amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy/deadline> ;
    sh:name "deadline" ;
    sh:description "Deadline" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy/acceptedPayments> ;
    sh:name "accepted payments" ;
    sh:description "Accepted payments" ;
    sh:node amadeus:AcceptedPaymentsShape ;
    sh:class amadeus:AcceptedPayments ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy/description> ;
    sh:name "description" ;
    sh:description "Description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PrepayPolicy/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PrepayPolicy/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hold Time
amadeus:HoldTimeShape a sh:NodeShape ;
  sh:targetClass amadeus:HoldTime ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HoldTime/deadline> ;
    sh:name "deadline" ;
    sh:description "Deadline" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Cancellation Policy
amadeus:CancellationPolicyShape a sh:NodeShape ;
  sh:targetClass amadeus:CancellationPolicy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/type> ;
    sh:name "type" ;
    sh:description "Cancellation type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "FULL_STAY" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/description> ;
    sh:name "description" ;
    sh:description "Cancellation description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.CancellationPolicy/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.CancellationPolicy/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/amount> ;
    sh:name "amount" ;
    sh:description "Amount to pay if cancelled" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/numberOfNights> ;
    sh:name "number of nights" ;
    sh:description "Number of nights charged" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/percentage> ;
    sh:name "percentage" ;
    sh:description "Percentage charged" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy/deadline> ;
    sh:name "deadline" ;
    sh:description "Deadline date/time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Check In Out Policy
amadeus:CheckInOutPolicyShape a sh:NodeShape ;
  sh:targetClass amadeus:CheckInOutPolicy ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInOutPolicy/checkIn> ;
    sh:name "check in" ;
    sh:description "Check-in time in ISO-8601 format (e.g., 13:00:00)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInOutPolicy/checkInDescription> ;
    sh:name "check in description" ;
    sh:description "Check-in description" ;
    sh:node amadeus:QualifiedFreeTextShape ;
    sh:class amadeus:QualifiedFreeText ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInOutPolicy/checkOut> ;
    sh:name "check out" ;
    sh:description "Check-out time in ISO-8601 format (e.g., 11:00:00)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInOutPolicy/checkOutDescription> ;
    sh:name "check out description" ;
    sh:description "Check-out description" ;
    sh:node amadeus:QualifiedFreeTextShape ;
    sh:class amadeus:QualifiedFreeText ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Qualified Free Text
amadeus:QualifiedFreeTextShape a sh:NodeShape ;
  sh:targetClass amadeus:QualifiedFreeText ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.QualifiedFreeText/text> ;
    sh:name "text" ;
    sh:description "Text content" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.QualifiedFreeText/lang> ;
    sh:name "lang" ;
    sh:description "Language code (BCP-47)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Price
amadeus:HotelPriceShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelPrice ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/currency> ;
    sh:name "currency" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/base> ;
    sh:name "base" ;
    sh:description "Base price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/total> ;
    sh:name "total" ;
    sh:description "Total price" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/sellingTotal> ;
    sh:name "selling total" ;
    sh:description "Selling total" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/taxes> ;
    sh:name "taxes" ;
    sh:description "Tax breakdown" ;
    sh:node amadeus:HotelTaxShape ;
    sh:class amadeus:HotelTax ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/markups> ;
    sh:name "markups" ;
    sh:description "Markup information" ;
    sh:node amadeus:MarkupShape ;
    sh:class amadeus:Markup ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPrice/variations> ;
    sh:name "variations" ;
    sh:description "Price variations" ;
    sh:node amadeus:PriceVariationsShape ;
    sh:class amadeus:PriceVariations ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Tax
amadeus:HotelTaxShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelTax ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/amount> ;
    sh:name "amount" ;
    sh:description "Tax amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/currency> ;
    sh:name "currency" ;
    sh:description "Tax currency" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/code> ;
    sh:name "code" ;
    sh:description "Tax code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/percentage> ;
    sh:name "percentage" ;
    sh:description "Percentage" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/included> ;
    sh:name "included" ;
    sh:description "Whether included in base" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/description> ;
    sh:name "description" ;
    sh:description "Tax description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/pricingFrequency> ;
    sh:name "pricing frequency" ;
    sh:description "Pricing frequency" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelTax/pricingMode> ;
    sh:name "pricing mode" ;
    sh:description "Pricing mode" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Price Variations
amadeus:PriceVariationsShape a sh:NodeShape ;
  sh:targetClass amadeus:PriceVariations ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceVariations/average> ;
    sh:name "average" ;
    sh:description "Average price" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceVariations/averageShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceVariations/average> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceVariations/changes> ;
    sh:name "changes" ;
    sh:description "Daily changes" ;
    sh:node amadeus:PriceChangeShape ;
    sh:class amadeus:PriceChange ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Price Change
amadeus:PriceChangeShape a sh:NodeShape ;
  sh:targetClass amadeus:PriceChange ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceChange/startDate> ;
    sh:name "start date" ;
    sh:description "Start date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceChange/endDate> ;
    sh:name "end date" ;
    sh:description "End date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceChange/base> ;
    sh:name "base" ;
    sh:description "Base price for period" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceChange/total> ;
    sh:name "total" ;
    sh:description "Total price for period" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel
amadeus:HotelShape a sh:NodeShape ;
  sh:targetClass amadeus:Hotel ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "hotel" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/hotelId> ;
    sh:name "hotel id" ;
    sh:description "Amadeus hotel ID (8 character property code)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/chainCode> ;
    sh:name "chain code" ;
    sh:description "Chain code (2 characters)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/brandCode> ;
    sh:name "brand code" ;
    sh:description "Brand code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/dupeId> ;
    sh:name "dupe id" ;
    sh:description "Duplicate ID for physical hotel deduplication" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/name> ;
    sh:name "name" ;
    sh:description "Hotel name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/rating> ;
    sh:name "rating" ;
    sh:description "Hotel rating (1-5)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA location code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/cityCode> ;
    sh:name "city code" ;
    sh:description "City code (deprecated, use iataCode)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/address> ;
    sh:name "address" ;
    sh:description "Physical address" ;
    sh:node amadeus:HotelAddressShape ;
    sh:class amadeus:HotelAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/distance> ;
    sh:name "distance" ;
    sh:description "Distance from reference point" ;
    sh:node amadeus:DistanceShape ;
    sh:class amadeus:Distance ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/amenities> ;
    sh:name "amenities" ;
    sh:description "Hotel amenities" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/description> ;
    sh:name "description" ;
    sh:description "Hotel description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Hotel/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Hotel/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/lastUpdate> ;
    sh:name "last update" ;
    sh:description "Last content update timestamp" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Address
amadeus:HotelAddressShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelAddress ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAddress/lines> ;
    sh:name "lines" ;
    sh:description "Street address lines" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAddress/postalCode> ;
    sh:name "postal code" ;
    sh:description "Postal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAddress/cityName> ;
    sh:name "city name" ;
    sh:description "City name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAddress/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAddress/stateCode> ;
    sh:name "state code" ;
    sh:description "State code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Offers
amadeus:HotelOffersShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelOffers ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffers/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "hotel-offers" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffers/hotel> ;
    sh:name "hotel" ;
    sh:description "Hotel information" ;
    sh:node amadeus:HotelShape ;
    sh:class amadeus:Hotel ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffers/available> ;
    sh:name "available" ;
    sh:description "Available offers" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffers/offers> ;
    sh:name "offers" ;
    sh:description "Offers list" ;
    sh:node amadeus:HotelOfferShape ;
    sh:class amadeus:HotelOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffers/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Offer
amadeus:HotelOfferShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelOffer ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/id> ;
    sh:name "id" ;
    sh:description "Unique offer identifier" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/checkInDate> ;
    sh:name "check in date" ;
    sh:description "Check-in date (hotel local date)" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/checkOutDate> ;
    sh:name "check out date" ;
    sh:description "Check-out date (hotel local date)" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/roomQuantity> ;
    sh:name "room quantity" ;
    sh:description "Number of rooms (1-9)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/rateCode> ;
    sh:name "rate code" ;
    sh:description "Rate code (provider response code)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/rateFamilyEstimated> ;
    sh:name "rate family estimated" ;
    sh:description "Rate family code" ;
    sh:node amadeus:RateFamilyShape ;
    sh:class amadeus:RateFamily ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/category> ;
    sh:name "category" ;
    sh:description "Special rate category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/description> ;
    sh:name "description" ;
    sh:description "Room description" ;
    sh:node amadeus:QualifiedFreeTextShape ;
    sh:class amadeus:QualifiedFreeText ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/commission> ;
    sh:name "commission" ;
    sh:description "Commission information" ;
    sh:node amadeus:CommissionShape ;
    sh:class amadeus:Commission ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/boardType> ;
    sh:name "board type" ;
    sh:description "Boarding type (meal plan)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ROOM_ONLY" "BREAKFAST" "HALF_BOARD" "FULL_BOARD" "ALL_INCLUSIVE" "BUFFET_BREAKFAST" "CARIBBEAN_BREAKFAST" "CONTINENTAL_BREAKFAST" "ENGLISH_BREAKFAST" "FULL_BREAKFAST" "DINNER_BED_AND_BREAKFAST" "LUNCH" "DINNER" "FAMILY_PLAN" "AS_BOOKED" "BED_AND_BREAKFAST" "SELF_CATERING" "BERMUDA" "AMERICAN" "MODIFIED_AMERICAN" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/room> ;
    sh:name "room" ;
    sh:description "Room information" ;
    sh:node amadeus:RoomShape ;
    sh:class amadeus:Room ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/guests> ;
    sh:name "guests" ;
    sh:description "Guest information" ;
    sh:node amadeus:GuestConfigurationShape ;
    sh:class amadeus:GuestConfiguration ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/price> ;
    sh:name "price" ;
    sh:description "Price information" ;
    sh:node amadeus:HotelPriceShape ;
    sh:class amadeus:HotelPrice ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/policies> ;
    sh:name "policies" ;
    sh:description "Policies" ;
    sh:node amadeus:HotelPoliciesShape ;
    sh:class amadeus:HotelPolicies ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOffer/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Rate Family
amadeus:RateFamilyShape a sh:NodeShape ;
  sh:targetClass amadeus:RateFamily ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RateFamily/code> ;
    sh:name "code" ;
    sh:description "Rate family code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RateFamily/type> ;
    sh:name "type" ;
    sh:description "Rate family type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Commission
amadeus:CommissionShape a sh:NodeShape ;
  sh:targetClass amadeus:Commission ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Commission/percentage> ;
    sh:name "percentage" ;
    sh:description "Percentage commission" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Commission/amount> ;
    sh:name "amount" ;
    sh:description "Fixed commission amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Commission/description> ;
    sh:name "description" ;
    sh:description "Description" ;
    sh:node amadeus:QualifiedFreeTextShape ;
    sh:class amadeus:QualifiedFreeText ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Room
amadeus:RoomShape a sh:NodeShape ;
  sh:targetClass amadeus:Room ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Room/type> ;
    sh:name "type" ;
    sh:description "Room type code (3 character identifier)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Room/typeEstimated> ;
    sh:name "type estimated" ;
    sh:description "Estimated room category information" ;
    sh:node amadeus:RoomTypeEstimatedShape ;
    sh:class amadeus:RoomTypeEstimated ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Room/description> ;
    sh:name "description" ;
    sh:description "Room description" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Room/descriptionShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Room/description> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Room Type Estimated
amadeus:RoomTypeEstimatedShape a sh:NodeShape ;
  sh:targetClass amadeus:RoomTypeEstimated ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RoomTypeEstimated/category> ;
    sh:name "category" ;
    sh:description "Room category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RoomTypeEstimated/beds> ;
    sh:name "beds" ;
    sh:description "Number of beds" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RoomTypeEstimated/bedType> ;
    sh:name "bed type" ;
    sh:description "Bed type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "SINGLE" "DOUBLE" "QUEEN" "KING" "TWIN" "SOFA" ) ;
  ] .

# Shape for Guest Configuration
amadeus:GuestConfigurationShape a sh:NodeShape ;
  sh:targetClass amadeus:GuestConfiguration ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuestConfiguration/adults> ;
    sh:name "adults" ;
    sh:description "Number of adults" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuestConfiguration/childAges> ;
    sh:name "child ages" ;
    sh:description "Number of children" ;
    sh:datatype xsd:int ;
  ] .

# Shape for Hotel Sentiment
amadeus:HotelSentimentShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelSentiment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "hotelSentiment" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/hotelId> ;
    sh:name "hotel id" ;
    sh:description "Hotel ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/overallRating> ;
    sh:name "overall rating" ;
    sh:description "Overall rating (0-100)" ;
    sh:datatype xsd:int ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/numberOfRatings> ;
    sh:name "number of ratings" ;
    sh:description "Number of ratings" ;
    sh:datatype xsd:int ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/numberOfReviews> ;
    sh:name "number of reviews" ;
    sh:description "Number of reviews" ;
    sh:datatype xsd:int ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiment/sentiments> ;
    sh:name "sentiments" ;
    sh:description "Sentiment scores by category" ;
    sh:node amadeus:SentimentScoresShape ;
    sh:class amadeus:SentimentScores ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Sentiments
amadeus:SentimentScoresShape a sh:NodeShape ;
  sh:targetClass amadeus:SentimentScores ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/sleepQuality> ;
    sh:name "sleep quality" ;
    sh:description "Sleep quality score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/service> ;
    sh:name "service" ;
    sh:description "Service score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/facilities> ;
    sh:name "facilities" ;
    sh:description "Facilities score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/roomComforts> ;
    sh:name "room comforts" ;
    sh:description "Room comfort score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/valueForMoney> ;
    sh:name "value for money" ;
    sh:description "Value for money score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/catering> ;
    sh:name "catering" ;
    sh:description "Catering score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/swimmingPool> ;
    sh:name "swimming pool" ;
    sh:description "Swimming pool score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/location> ;
    sh:name "location" ;
    sh:description "Location score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/internet> ;
    sh:name "internet" ;
    sh:description "Internet score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/pointsOfInterest> ;
    sh:name "points of interest" ;
    sh:description "Points of interest score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelSentiments/staff> ;
    sh:name "staff" ;
    sh:description "Staff score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Autocomplete
amadeus:HotelAutocompleteShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelAutocomplete ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/id> ;
    sh:name "id" ;
    sh:description "Hotel ID" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/name> ;
    sh:name "name" ;
    sh:description "Hotel name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/relevance> ;
    sh:name "relevance" ;
    sh:description "Relevance score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/type> ;
    sh:name "type" ;
    sh:description "Location type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/hotelIds> ;
    sh:name "hotel ids" ;
    sh:description "Hotel IDs" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/address> ;
    sh:name "address" ;
    sh:description "Address" ;
    sh:node amadeus:HotelAddressShape ;
    sh:class amadeus:HotelAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAutocomplete/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Booking Request
amadeus:HotelBookingRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelBookingRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRequest/data> ;
    sh:name "data" ;
    sh:description "Booking data" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingRequest/dataShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Guest
amadeus:HotelGuestShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelGuest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/tid> ;
    sh:name "tid" ;
    sh:description "Temporary guest ID (for request)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/id> ;
    sh:name "id" ;
    sh:description "Guest ID (item identifier)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/title> ;
    sh:name "title" ;
    sh:description "Title (MR, MRS, MS)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MR" "MRS" "MS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/firstName> ;
    sh:name "first name" ;
    sh:description "First name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/lastName> ;
    sh:name "last name" ;
    sh:description "Last name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/phone> ;
    sh:name "phone" ;
    sh:description "Phone number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/email> ;
    sh:name "email" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/name> ;
    sh:name "name" ;
    sh:description "Guest name" ;
    sh:node amadeus:HotelGuestNameShape ;
    sh:class amadeus:HotelGuestName ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/contact> ;
    sh:name "contact" ;
    sh:description "Guest contact information" ;
    sh:node amadeus:HotelGuestContactShape ;
    sh:class amadeus:HotelGuestContact ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/hotelRewardsMember> ;
    sh:name "hotel rewards member" ;
    sh:description "Hotel rewards member number (1-21 characters)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/frequentTraveler> ;
    sh:name "frequent traveler" ;
    sh:description "Airline frequent flyer information" ;
    sh:node amadeus:FrequentTravelerShape ;
    sh:class amadeus:FrequentTraveler ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuest/childAge> ;
    sh:name "child age" ;
    sh:description "Child age (if guest is a child)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Guest Name
amadeus:HotelGuestNameShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelGuestName ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestName/title> ;
    sh:name "title" ;
    sh:description "Title (MR, MRS, MS)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MR" "MRS" "MS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestName/firstName> ;
    sh:name "first name" ;
    sh:description "First and middle names (1-56 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestName/lastName> ;
    sh:name "last name" ;
    sh:description "Last name (1-57 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestName/secondLastName> ;
    sh:name "second last name" ;
    sh:description "Second last name (for certain countries)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Guest Contact
amadeus:HotelGuestContactShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelGuestContact ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestContact/phone> ;
    sh:name "phone" ;
    sh:description "Phone number in E.123 format (e.g., +33679278416)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestContact/email> ;
    sh:name "email" ;
    sh:description "Email address (3-90 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelGuestContact/companyName> ;
    sh:name "company name" ;
    sh:description "Company name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Frequent Traveler
amadeus:FrequentTravelerShape a sh:NodeShape ;
  sh:targetClass amadeus:FrequentTraveler ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FrequentTraveler/airlineCode> ;
    sh:name "airline code" ;
    sh:description "Airline code (2-3 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FrequentTraveler/frequentTravelerId> ;
    sh:name "frequent traveler id" ;
    sh:description "Frequent traveler ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Payment
amadeus:HotelPaymentShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelPayment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPayment/id> ;
    sh:name "id" ;
    sh:description "Payment ID" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPayment/method> ;
    sh:name "method" ;
    sh:description "Payment method (only 'creditCard' is accepted for booking)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "creditCard" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPayment/card> ;
    sh:name "card" ;
    sh:description "Payment card details (required when method is creditCard)" ;
    sh:node amadeus:HotelPaymentCardShape ;
    sh:class amadeus:HotelPaymentCard ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Payment Card
amadeus:HotelPaymentCardShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelPaymentCard ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentCard/vendorCode> ;
    sh:name "vendor code" ;
    sh:description "Card vendor code (2 chars): VI=Visa, CA=MasterCard, AX=Amex, DC=Diners, MA=Maestro, UP=UnionPay" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentCard/cardNumber> ;
    sh:name "card number" ;
    sh:description "Card number (2-22 digits)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentCard/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date (format: YYYY-MM)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentCard/holderName> ;
    sh:name "holder name" ;
    sh:description "Cardholder name (optional)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Booking Room
amadeus:HotelBookingRoomShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelBookingRoom ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRoom/guestIds> ;
    sh:name "guest ids" ;
    sh:description "Guest IDs for room occupants" ;
    sh:datatype xsd:int ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRoom/paymentId> ;
    sh:name "payment id" ;
    sh:description "Payment ID (defaults to first payment if not specified)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRoom/specialRequest> ;
    sh:name "special request" ;
    sh:description "Special request to reception (2-120 characters)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Booking
amadeus:HotelBookingShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelBooking ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "hotel-booking" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/id> ;
    sh:name "id" ;
    sh:description "Booking ID (5-19 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/bookingStatus> ;
    sh:name "booking status" ;
    sh:description "Booking status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CONFIRMED" "PENDING" "CANCELLED" "ON_HOLD" "PAST" "UNCONFIRMED" "DENIED" "GHOST" "DELETED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/roomAssociations> ;
    sh:name "room associations" ;
    sh:description "Room associations correlating rooms to guests and payments" ;
    sh:node amadeus:RoomAssociationShape ;
    sh:class amadeus:RoomAssociation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/hotelOffer> ;
    sh:name "hotel offer" ;
    sh:description "Hotel offer details" ;
    sh:node amadeus:HotelOfferShape ;
    sh:class amadeus:HotelOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/hotel> ;
    sh:name "hotel" ;
    sh:description "Hotel information" ;
    sh:node amadeus:HotelShape ;
    sh:class amadeus:Hotel ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/hotelProviderInformation> ;
    sh:name "hotel provider information" ;
    sh:description "Hotel provider information" ;
    sh:node amadeus:HotelProviderInformationShape ;
    sh:class amadeus:HotelProviderInformation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/travelAgentId> ;
    sh:name "travel agent id" ;
    sh:description "Travel agent ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/payment> ;
    sh:name "payment" ;
    sh:description "Payment information" ;
    sh:node amadeus:HotelPaymentOutputShape ;
    sh:class amadeus:HotelPaymentOutput ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBooking/arrivalInformation> ;
    sh:name "arrival information" ;
    sh:description "Arrival information" ;
    sh:node amadeus:ArrivalInformationShape ;
    sh:class amadeus:ArrivalInformation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Room Association
amadeus:RoomAssociationShape a sh:NodeShape ;
  sh:targetClass amadeus:RoomAssociation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RoomAssociation/guestReferences> ;
    sh:name "guest references" ;
    sh:description "Guest references" ;
    sh:node amadeus:GuestReferenceShape ;
    sh:class amadeus:GuestReference ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.RoomAssociation/hotelOfferId> ;
    sh:name "hotel offer id" ;
    sh:description "Hotel offer ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Guest Reference
amadeus:GuestReferenceShape a sh:NodeShape ;
  sh:targetClass amadeus:GuestReference ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuestReference/guestReference> ;
    sh:name "guest reference" ;
    sh:description "Guest reference ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuestReference/guestId> ;
    sh:name "guest id" ;
    sh:description "Guest ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuestReference/hotelLoyaltyId> ;
    sh:name "hotel loyalty id" ;
    sh:description "Hotel loyalty program member number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Provider Information
amadeus:HotelProviderInformationShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelProviderInformation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelProviderInformation/hotelProviderCode> ;
    sh:name "hotel provider code" ;
    sh:description "Hotel provider code (2 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelProviderInformation/confirmationNumber> ;
    sh:name "confirmation number" ;
    sh:description "Provider confirmation number" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelProviderInformation/cancellationNumber> ;
    sh:name "cancellation number" ;
    sh:description "Cancellation number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelProviderInformation/onRequestNumber> ;
    sh:name "on request number" ;
    sh:description "On-request number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Payment Output
amadeus:HotelPaymentOutputShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelPaymentOutput ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput/method> ;
    sh:name "method" ;
    sh:description "Payment method" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput/paymentCard> ;
    sh:name "payment card" ;
    sh:description "Payment card information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCardShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Arrival Information
amadeus:ArrivalInformationShape a sh:NodeShape ;
  sh:targetClass amadeus:ArrivalInformation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalInformation/arrivalFlightDetails> ;
    sh:name "arrival flight details" ;
    sh:description "Arrival flight details" ;
    sh:node amadeus:ArrivalFlightDetailsShape ;
    sh:class amadeus:ArrivalFlightDetails ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Arrival Flight Details
amadeus:ArrivalFlightDetailsShape a sh:NodeShape ;
  sh:targetClass amadeus:ArrivalFlightDetails ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Carrier code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails/number> ;
    sh:name "number" ;
    sh:description "Flight number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails/departure> ;
    sh:name "departure" ;
    sh:description "Departure information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/departureShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/departure> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/arrivalShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/arrival> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Associated Record
amadeus:HotelAssociatedRecordShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelAssociatedRecord ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAssociatedRecord/reference> ;
    sh:name "reference" ;
    sh:description "Amadeus GDS record reference (6 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelAssociatedRecord/originSystemCode> ;
    sh:name "origin system code" ;
    sh:description "Origin system code (GDS = Amadeus GDS Flight Booking PNR)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Stakeholder
amadeus:HotelStakeholderShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelStakeholder ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholder/id> ;
    sh:name "id" ;
    sh:description "Item identifier" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholder/name> ;
    sh:name "name" ;
    sh:description "Guest name" ;
    sh:node amadeus:HotelStakeholderNameShape ;
    sh:class amadeus:HotelStakeholderName ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholder/contact> ;
    sh:name "contact" ;
    sh:description "Guest contact information" ;
    sh:node amadeus:HotelContactShape ;
    sh:class amadeus:HotelContact ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholder/hotelRewardsMember> ;
    sh:name "hotel rewards member" ;
    sh:description "Hotel chain rewards member number (1-21 characters)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Stakeholder Name
amadeus:HotelStakeholderNameShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelStakeholderName ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholderName/title> ;
    sh:name "title" ;
    sh:description "Title/gender of room guest" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MR" "MRS" "MS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholderName/firstName> ;
    sh:name "first name" ;
    sh:description "First and middle names (1-56 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholderName/lastName> ;
    sh:name "last name" ;
    sh:description "Last name (1-57 characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Stakeholder Contact
amadeus:HotelContactShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelContact ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholderContact/phone> ;
    sh:name "phone" ;
    sh:description "Phone number in E.123 format (e.g., +33679278416)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelStakeholderContact/email> ;
    sh:name "email" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Order
amadeus:HotelOrderShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelOrder ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "hotel-order" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/id> ;
    sh:name "id" ;
    sh:description "Order ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/hotelBookings> ;
    sh:name "hotel bookings" ;
    sh:description "Hotel bookings" ;
    sh:node amadeus:HotelBookingShape ;
    sh:class amadeus:HotelBooking ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/associatedRecords> ;
    sh:name "associated records" ;
    sh:description "Associated records" ;
    sh:node amadeus:HotelAssociatedRecordShape ;
    sh:class amadeus:HotelAssociatedRecord ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrder/guests> ;
    sh:name "guests" ;
    sh:description "Guests" ;
    sh:node amadeus:HotelGuestShape ;
    sh:class amadeus:HotelGuest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Transfer Offer
amadeus:TransferOfferShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferOffer ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "transfer-offer" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/id> ;
    sh:name "id" ;
    sh:description "Offer ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/transferType> ;
    sh:name "transfer type" ;
    sh:description "Transfer type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "PRIVATE" "SHARED" "TAXI" "HOURLY" "AIRPORT_EXPRESS" "AIRPORT_BUS" "HELICOPTER" "PRIVATE_JET" "BUS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/start> ;
    sh:name "start" ;
    sh:description "Start location" ;
    sh:node amadeus:TransferLocationShape ;
    sh:class amadeus:TransferLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/end> ;
    sh:name "end" ;
    sh:description "End location" ;
    sh:node amadeus:TransferLocationShape ;
    sh:class amadeus:TransferLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/stopOvers> ;
    sh:name "stop overs" ;
    sh:description "Stop overs" ;
    sh:node amadeus:TransferStopOverShape ;
    sh:class amadeus:TransferStopOver ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/passengerCharacteristics> ;
    sh:name "passenger characteristics" ;
    sh:description "Passenger characteristics" ;
    sh:node amadeus:PassengerCharacteristicsShape ;
    sh:class amadeus:PassengerCharacteristics ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/duration> ;
    sh:name "duration" ;
    sh:description "Duration in ISO 8601 format" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/vehicle> ;
    sh:name "vehicle" ;
    sh:description "Vehicle information" ;
    sh:node amadeus:VehicleShape ;
    sh:class amadeus:Vehicle ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/serviceProvider> ;
    sh:name "service provider" ;
    sh:description "Service provider" ;
    sh:node amadeus:ServiceProviderShape ;
    sh:class amadeus:ServiceProvider ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/partnerInfo> ;
    sh:name "partner info" ;
    sh:description "Partner info" ;
    sh:node amadeus:PartnerInfoShape ;
    sh:class amadeus:PartnerInfo ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/quotation> ;
    sh:name "quotation" ;
    sh:description "Quote information" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/converted> ;
    sh:name "converted" ;
    sh:description "Converted quotation (in requested currency)" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/extraServices> ;
    sh:name "extra services" ;
    sh:description "Extra services" ;
    sh:node amadeus:ExtraServiceShape ;
    sh:class amadeus:ExtraService ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/equipment> ;
    sh:name "equipment" ;
    sh:description "Equipment available" ;
    sh:node amadeus:EquipmentShape ;
    sh:class amadeus:Equipment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/cancellationRules> ;
    sh:name "cancellation rules" ;
    sh:description "Cancellation rules" ;
    sh:node amadeus:CancellationRuleShape ;
    sh:class amadeus:CancellationRule ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/methodsOfPaymentAccepted> ;
    sh:name "methods of payment accepted" ;
    sh:description "Methods of payment accepted" ;
    sh:datatype xsd:string ;
    sh:in ( "CREDIT_CARD" "INVOICE" "TRAVEL_ACCOUNT" "PAYMENT_SERVICE_PROVIDER" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/discountCodes> ;
    sh:name "discount codes" ;
    sh:description "Discount codes accepted" ;
    sh:node amadeus:DiscountCodeShape ;
    sh:class amadeus:DiscountCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/language> ;
    sh:name "language" ;
    sh:description "Language code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/distance> ;
    sh:name "distance" ;
    sh:description "Distance information" ;
    sh:node amadeus:TransferDistanceShape ;
    sh:class amadeus:TransferDistance ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/startConnectedSegment> ;
    sh:name "start connected segment" ;
    sh:description "Start connected segment" ;
    sh:node amadeus:ConnectedSegmentShape ;
    sh:class amadeus:ConnectedSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOffer/endConnectedSegment> ;
    sh:name "end connected segment" ;
    sh:description "End connected segment" ;
    sh:node amadeus:ConnectedSegmentShape ;
    sh:class amadeus:ConnectedSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Location
amadeus:TransferLocationShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferLocation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/dateTime> ;
    sh:name "date time" ;
    sh:description "Date and time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/locationCode> ;
    sh:name "location code" ;
    sh:description "Location code (IATA or internal)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code for airports" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/type> ;
    sh:name "type" ;
    sh:description "Location type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "ADDRESS" "POI" "GEO" "PORT" "TRAIN" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/address> ;
    sh:name "address" ;
    sh:description "Address" ;
    sh:node amadeus:TransferAddressShape ;
    sh:class amadeus:TransferAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/name> ;
    sh:name "name" ;
    sh:description "Location name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/googlePlaceId> ;
    sh:name "google place id" ;
    sh:description "Google place ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/uicCode> ;
    sh:name "uic code" ;
    sh:description "UIC code for railway stations" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferLocation/terminal> ;
    sh:name "terminal" ;
    sh:description "Terminal (for airports)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Address
amadeus:TransferAddressShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferAddress ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAddress/line> ;
    sh:name "line" ;
    sh:description "Address line" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAddress/zip> ;
    sh:name "zip" ;
    sh:description "Postal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAddress/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAddress/cityName> ;
    sh:name "city name" ;
    sh:description "City name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAddress/stateCode> ;
    sh:name "state code" ;
    sh:description "State code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Stop Over
amadeus:TransferStopOverShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferStopOver ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOver/duration> ;
    sh:name "duration" ;
    sh:description "Duration at stop" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOver/sequenceNumber> ;
    sh:name "sequence number" ;
    sh:description "Sequence number" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOver/location> ;
    sh:name "location" ;
    sh:description "Location" ;
    sh:node amadeus:TransferLocationShape ;
    sh:class amadeus:TransferLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Passenger Characteristics
amadeus:PassengerCharacteristicsShape a sh:NodeShape ;
  sh:targetClass amadeus:PassengerCharacteristics ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PassengerCharacteristics/passengerTypeCode> ;
    sh:name "passenger type code" ;
    sh:description "Passenger type code (ADT for adult, CHD for child)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PassengerCharacteristics/age> ;
    sh:name "age" ;
    sh:description "Age of passenger" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Vehicle
amadeus:VehicleShape a sh:NodeShape ;
  sh:targetClass amadeus:Vehicle ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/code> ;
    sh:name "code" ;
    sh:description "Vehicle code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "CAR" "SED" "WGN" "ELC" "VAN" "SUV" "LMS" "MBR" "TRN" "BUS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/category> ;
    sh:name "category" ;
    sh:description "Vehicle category" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "ST" "BU" "FC" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/description> ;
    sh:name "description" ;
    sh:description "Vehicle description" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/seats> ;
    sh:name "seats" ;
    sh:description "Seat information" ;
    sh:node amadeus:TransferSeatShape ;
    sh:class amadeus:TransferSeat ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/baggages> ;
    sh:name "baggages" ;
    sh:description "Baggage information" ;
    sh:node amadeus:BaggageShape ;
    sh:class amadeus:Baggage ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Vehicle/imageURL> ;
    sh:name "image url" ;
    sh:description "Vehicle image URL" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Seat
amadeus:TransferSeatShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferSeat ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSeat/count> ;
    sh:name "count" ;
    sh:description "Number of seats" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSeat/row> ;
    sh:name "row" ;
    sh:description "Seat row" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSeat/size> ;
    sh:name "size" ;
    sh:description "Seat size" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Baggage
amadeus:BaggageShape a sh:NodeShape ;
  sh:targetClass amadeus:Baggage ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Baggage/count> ;
    sh:name "count" ;
    sh:description "Number of bags" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Baggage/size> ;
    sh:name "size" ;
    sh:description "Bag size" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Service Provider
amadeus:ServiceProviderShape a sh:NodeShape ;
  sh:targetClass amadeus:ServiceProvider ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/code> ;
    sh:name "code" ;
    sh:description "Provider code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/name> ;
    sh:name "name" ;
    sh:description "Provider name" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/logoUrl> ;
    sh:name "logo url" ;
    sh:description "Logo URL" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/termsUrl> ;
    sh:name "terms url" ;
    sh:description "Terms URL" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/isPreferred> ;
    sh:name "is preferred" ;
    sh:description "Is preferred provider" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/contacts> ;
    sh:name "contacts" ;
    sh:description "Contact information" ;
    sh:node amadeus:ContactWithAddressShape ;
    sh:class amadeus:ContactWithAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/settings> ;
    sh:name "settings" ;
    sh:description "Provider settings" ;
    sh:datatype xsd:string ;
    sh:in ( "BILLING_ADDRESS_REQUIRED" "FLIGHT_NUMBER_REQUIRED" "CVV_NUMBER_REQUIRED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ServiceProvider/businessIdentification> ;
    sh:name "business identification" ;
    sh:description "Business identification" ;
    sh:node amadeus:BusinessIdentificationShape ;
    sh:class amadeus:BusinessIdentification ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Contact With Address
amadeus:ContactWithAddressShape a sh:NodeShape ;
  sh:targetClass amadeus:ContactWithAddress ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactWithAddress/email> ;
    sh:name "email" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactWithAddress/phoneNumber> ;
    sh:name "phone number" ;
    sh:description "Phone number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactWithAddress/address> ;
    sh:name "address" ;
    sh:description "Address" ;
    sh:node amadeus:TransferAddressShape ;
    sh:class amadeus:TransferAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Business Identification
amadeus:BusinessIdentificationShape a sh:NodeShape ;
  sh:targetClass amadeus:BusinessIdentification ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusinessIdentification/vatRegistration> ;
    sh:name "vat registration" ;
    sh:description "VAT registration number" ;
    sh:node amadeus:VatRegistrationShape ;
    sh:class amadeus:VatRegistration ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Vat Registration
amadeus:VatRegistrationShape a sh:NodeShape ;
  sh:targetClass amadeus:VatRegistration ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VatRegistration/number> ;
    sh:name "number" ;
    sh:description "VAT number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.VatRegistration/countryCode> ;
    sh:name "country code" ;
    sh:description "VAT country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] .

# Shape for Partner Info
amadeus:PartnerInfoShape a sh:NodeShape ;
  sh:targetClass amadeus:PartnerInfo ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PartnerInfo/serviceProvider> ;
    sh:name "service provider" ;
    sh:description "Partner service provider" ;
    sh:node amadeus:ServiceProviderShape ;
    sh:class amadeus:ServiceProvider ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Quotation
amadeus:QuotationShape a sh:NodeShape ;
  sh:targetClass amadeus:Quotation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/monetaryAmount> ;
    sh:name "monetary amount" ;
    sh:description "Monetary amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/isEstimated> ;
    sh:name "is estimated" ;
    sh:description "Is estimate flag" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/base> ;
    sh:name "base" ;
    sh:description "Base price" ;
    sh:node amadeus:PointsAndCashShape ;
    sh:class amadeus:PointsAndCash ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/discount> ;
    sh:name "discount" ;
    sh:description "Discount" ;
    sh:node amadeus:PointsAndCashShape ;
    sh:class amadeus:PointsAndCash ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/taxes> ;
    sh:name "taxes" ;
    sh:description "Taxes" ;
    sh:node amadeus:TransferTaxShape ;
    sh:class amadeus:TransferTax ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/fees> ;
    sh:name "fees" ;
    sh:description "Fees" ;
    sh:node amadeus:TransferFeeShape ;
    sh:class amadeus:TransferFee ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/totalTaxes> ;
    sh:name "total taxes" ;
    sh:description "Total taxes" ;
    sh:node amadeus:PointsAndCashShape ;
    sh:class amadeus:PointsAndCash ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Quotation/totalFees> ;
    sh:name "total fees" ;
    sh:description "Total fees" ;
    sh:node amadeus:PointsAndCashShape ;
    sh:class amadeus:PointsAndCash ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Points And Cash
amadeus:PointsAndCashShape a sh:NodeShape ;
  sh:targetClass amadeus:PointsAndCash ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointsAndCash/monetaryAmount> ;
    sh:name "monetary amount" ;
    sh:description "Monetary amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Tax
amadeus:TransferTaxShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferTax ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferTax/indicator> ;
    sh:name "indicator" ;
    sh:description "Tax indicator" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferTax/monetaryAmount> ;
    sh:name "monetary amount" ;
    sh:description "Tax amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferTax/isIncludedInBase> ;
    sh:name "is included in base" ;
    sh:description "Is included in base" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Fee
amadeus:TransferFeeShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferFee ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferFee/indicator> ;
    sh:name "indicator" ;
    sh:description "Fee indicator" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferFee/monetaryAmount> ;
    sh:name "monetary amount" ;
    sh:description "Fee amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferFee/isIncludedInBase> ;
    sh:name "is included in base" ;
    sh:description "Is included in base" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Extra Service
amadeus:ExtraServiceShape a sh:NodeShape ;
  sh:targetClass amadeus:ExtraService ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/code> ;
    sh:name "code" ;
    sh:description "Service code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "DSL" "EWT" "MAG" "FLM" "NWS" "CAI" "WNR" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/itemId> ;
    sh:name "item id" ;
    sh:description "Item ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/description> ;
    sh:name "description" ;
    sh:description "Service description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/metricType> ;
    sh:name "metric type" ;
    sh:description "Metric type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "YEARS" "DAYS" "HOURS" "MINUTES" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/metricValue> ;
    sh:name "metric value" ;
    sh:description "Metric value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/quotation> ;
    sh:name "quotation" ;
    sh:description "Service price" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/converted> ;
    sh:name "converted" ;
    sh:description "Converted price" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/isBookable> ;
    sh:name "is bookable" ;
    sh:description "Is bookable" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/taxIncluded> ;
    sh:name "tax included" ;
    sh:description "Tax included" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraService/includedInTotal> ;
    sh:name "included in total" ;
    sh:description "Included in total price" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Equipment
amadeus:EquipmentShape a sh:NodeShape ;
  sh:targetClass amadeus:Equipment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/code> ;
    sh:name "code" ;
    sh:description "Equipment code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "BBS" "BYC" "CBB" "CBF" "CBS" "CSB" "CSI" "CST" "SBR" "SKB" "SKR" "TAB" "WAR" "WHC" "WIF" "CNT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/itemId> ;
    sh:name "item id" ;
    sh:description "Item ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/description> ;
    sh:name "description" ;
    sh:description "Equipment description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/quotation> ;
    sh:name "quotation" ;
    sh:description "Equipment price" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/converted> ;
    sh:name "converted" ;
    sh:description "Converted price" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/isBookable> ;
    sh:name "is bookable" ;
    sh:description "Is bookable" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/taxIncluded> ;
    sh:name "tax included" ;
    sh:description "Tax included" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Equipment/includedInTotal> ;
    sh:name "included in total" ;
    sh:description "Included in total price" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Cancellation Rule
amadeus:CancellationRuleShape a sh:NodeShape ;
  sh:targetClass amadeus:CancellationRule ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/ruleDescription> ;
    sh:name "rule description" ;
    sh:description "Rule description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/feeType> ;
    sh:name "fee type" ;
    sh:description "Fee type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "PERCENTAGE" "VALUE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/feeValue> ;
    sh:name "fee value" ;
    sh:description "Fee value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/metricType> ;
    sh:name "metric type" ;
    sh:description "Metric type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "YEARS" "DAYS" "HOURS" "MINUTES" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/metricMin> ;
    sh:name "metric min" ;
    sh:description "Metric min value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationRule/metricMax> ;
    sh:name "metric max" ;
    sh:description "Metric max value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Discount Code
amadeus:DiscountCodeShape a sh:NodeShape ;
  sh:targetClass amadeus:DiscountCode ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DiscountCode/type> ;
    sh:name "type" ;
    sh:description "Discount type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DiscountCode/value> ;
    sh:name "value" ;
    sh:description "Discount value" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Distance
amadeus:TransferDistanceShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferDistance ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferDistance/value> ;
    sh:name "value" ;
    sh:description "Distance value" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferDistance/unit> ;
    sh:name "unit" ;
    sh:description "Distance unit" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "KM" "MI" ) ;
  ] .

# Shape for Connected Segment
amadeus:ConnectedSegmentShape a sh:NodeShape ;
  sh:targetClass amadeus:ConnectedSegment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment/transportType> ;
    sh:name "transport type" ;
    sh:description "Transport type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "FLIGHT" "TRAIN" "CRUISE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment/transportNumber> ;
    sh:name "transport number" ;
    sh:description "Transport number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment/departure> ;
    sh:name "departure" ;
    sh:description "Departure info" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/departureShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/departure> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival info" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/arrivalShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/arrival> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Order
amadeus:TransferOrderShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferOrder ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "transfer-order" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/id> ;
    sh:name "id" ;
    sh:description "Order ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/reference> ;
    sh:name "reference" ;
    sh:description "Trip reference" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/transfers> ;
    sh:name "transfers" ;
    sh:description "Transfer reservations" ;
    sh:node amadeus:TransferReservationShape ;
    sh:class amadeus:TransferReservation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/passengers> ;
    sh:name "passengers" ;
    sh:description "Passengers in order" ;
    sh:node amadeus:TransferPassengerShape ;
    sh:class amadeus:TransferPassenger ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferOrder/agency> ;
    sh:name "agency" ;
    sh:description "Agency" ;
    sh:node amadeus:TransferAgencyShape ;
    sh:class amadeus:TransferAgency ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Reservation
amadeus:TransferReservationShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferReservation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/confirmNbr> ;
    sh:name "confirm nbr" ;
    sh:description "Confirmation number from supplier" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/status> ;
    sh:name "status" ;
    sh:description "Status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CONFIRMED" "CANCELLED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/note> ;
    sh:name "note" ;
    sh:description "Note to provider" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/methodOfPayment> ;
    sh:name "method of payment" ;
    sh:description "Method of payment" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CASH" "CREDIT_CARD" "CHECK" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/paymentServiceProvider> ;
    sh:name "payment service provider" ;
    sh:description "Payment service provider" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "STRIPE_CONNECT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/offerId> ;
    sh:name "offer id" ;
    sh:description "Offer ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/transferType> ;
    sh:name "transfer type" ;
    sh:description "Transfer type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "PRIVATE" "SHARED" "TAXI" "HOURLY" "AIRPORT_EXPRESS" "AIRPORT_BUS" "HELICOPTER" "PRIVATE_JET" "BUS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/start> ;
    sh:name "start" ;
    sh:description "Start location" ;
    sh:node amadeus:TransferLocationShape ;
    sh:class amadeus:TransferLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/end> ;
    sh:name "end" ;
    sh:description "End location" ;
    sh:node amadeus:TransferLocationShape ;
    sh:class amadeus:TransferLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/stopOvers> ;
    sh:name "stop overs" ;
    sh:description "Stop overs" ;
    sh:node amadeus:TransferStopOverShape ;
    sh:class amadeus:TransferStopOver ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/vehicle> ;
    sh:name "vehicle" ;
    sh:description "Vehicle" ;
    sh:node amadeus:VehicleShape ;
    sh:class amadeus:Vehicle ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/serviceProvider> ;
    sh:name "service provider" ;
    sh:description "Service provider" ;
    sh:node amadeus:ServiceProviderShape ;
    sh:class amadeus:ServiceProvider ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/quotation> ;
    sh:name "quotation" ;
    sh:description "Quotation" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/converted> ;
    sh:name "converted" ;
    sh:description "Converted quotation" ;
    sh:node amadeus:QuotationShape ;
    sh:class amadeus:Quotation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/extraServices> ;
    sh:name "extra services" ;
    sh:description "Extra services" ;
    sh:node amadeus:ExtraServiceShape ;
    sh:class amadeus:ExtraService ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/equipment> ;
    sh:name "equipment" ;
    sh:description "Equipment" ;
    sh:node amadeus:EquipmentShape ;
    sh:class amadeus:Equipment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/cancellationRules> ;
    sh:name "cancellation rules" ;
    sh:description "Cancellation rules" ;
    sh:node amadeus:CancellationRuleShape ;
    sh:class amadeus:CancellationRule ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferReservation/distance> ;
    sh:name "distance" ;
    sh:description "Distance" ;
    sh:node amadeus:TransferDistanceShape ;
    sh:class amadeus:TransferDistance ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Passenger
amadeus:TransferPassengerShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferPassenger ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/id> ;
    sh:name "id" ;
    sh:description "Passenger ID" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/firstName> ;
    sh:name "first name" ;
    sh:description "First name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/lastName> ;
    sh:name "last name" ;
    sh:description "Last name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/title> ;
    sh:name "title" ;
    sh:description "Title" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/contacts> ;
    sh:name "contacts" ;
    sh:description "Contact information" ;
    sh:node amadeus:TransferPassengerContactShape ;
    sh:class amadeus:TransferPassengerContact ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassenger/billingAddress> ;
    sh:name "billing address" ;
    sh:description "Billing address" ;
    sh:node amadeus:TransferAddressShape ;
    sh:class amadeus:TransferAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Passenger Contact
amadeus:TransferPassengerContactShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferPassengerContact ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassengerContact/email> ;
    sh:name "email" ;
    sh:description "Email address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPassengerContact/phoneNumber> ;
    sh:name "phone number" ;
    sh:description "Phone number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Agency
amadeus:TransferAgencyShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferAgency ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferAgency/email> ;
    sh:name "email" ;
    sh:description "Agency email" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Booking Request
amadeus:TransferBookingRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferBookingRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingRequest/data> ;
    sh:name "data" ;
    sh:description "Booking data" ;
    sh:node amadeus:TransferBookingDataShape ;
    sh:class amadeus:TransferBookingData ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Booking Data
amadeus:TransferBookingDataShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferBookingData ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/note> ;
    sh:name "note" ;
    sh:description "Note to driver" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/flightNumber> ;
    sh:name "flight number" ;
    sh:description "Flight number (required by some providers)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/passengers> ;
    sh:name "passengers" ;
    sh:description "Passengers" ;
    sh:node amadeus:TransferPassengerShape ;
    sh:class amadeus:TransferPassenger ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/payment> ;
    sh:name "payment" ;
    sh:description "Payment information" ;
    sh:node amadeus:TransferPaymentShape ;
    sh:class amadeus:TransferPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/agency> ;
    sh:name "agency" ;
    sh:description "Agency information" ;
    sh:node amadeus:TransferAgencyShape ;
    sh:class amadeus:TransferAgency ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/equipment> ;
    sh:name "equipment" ;
    sh:description "Equipment to include" ;
    sh:node amadeus:EquipmentSelectionShape ;
    sh:class amadeus:EquipmentSelection ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/extraServices> ;
    sh:name "extra services" ;
    sh:description "Extra services to include" ;
    sh:node amadeus:ExtraServiceSelectionShape ;
    sh:class amadeus:ExtraServiceSelection ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/loyaltyNumber> ;
    sh:name "loyalty number" ;
    sh:description "Loyalty number" ;
    sh:node amadeus:LoyaltyNumberShape ;
    sh:class amadeus:LoyaltyNumber ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/corporation> ;
    sh:name "corporation" ;
    sh:description "Corporation info" ;
    sh:node amadeus:CorporationShape ;
    sh:class amadeus:Corporation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/startConnectedSegment> ;
    sh:name "start connected segment" ;
    sh:description "Start connected segment" ;
    sh:node amadeus:TravelSegmentShape ;
    sh:class amadeus:TravelSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferBookingData/endConnectedSegment> ;
    sh:name "end connected segment" ;
    sh:description "End connected segment" ;
    sh:node amadeus:TravelSegmentShape ;
    sh:class amadeus:TravelSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Payment
amadeus:TransferPaymentShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferPayment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPayment/methodOfPayment> ;
    sh:name "method of payment" ;
    sh:description "Method of payment" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CASH" "CREDIT_CARD" "CHECK" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPayment/paymentReference> ;
    sh:name "payment reference" ;
    sh:description "Payment reference (for travel account)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPayment/paymentServiceProvider> ;
    sh:name "payment service provider" ;
    sh:description "Payment service provider" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "STRIPE_CONNECT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferPayment/creditCard> ;
    sh:name "credit card" ;
    sh:description "Credit card (required for CREDIT_CARD method)" ;
    sh:node amadeus:TransferCreditCardShape ;
    sh:class amadeus:TransferCreditCard ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Credit Card
amadeus:TransferCreditCardShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferCreditCard ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCreditCard/number> ;
    sh:name "number" ;
    sh:description "Card number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCreditCard/holderName> ;
    sh:name "holder name" ;
    sh:description "Cardholder name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCreditCard/vendorCode> ;
    sh:name "vendor code" ;
    sh:description "Vendor code (VI, CA, etc.)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCreditCard/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date (MMYY)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCreditCard/cvv> ;
    sh:name "cvv" ;
    sh:description "CVV" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Equipment Selection
amadeus:EquipmentSelectionShape a sh:NodeShape ;
  sh:targetClass amadeus:EquipmentSelection ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.EquipmentSelection/code> ;
    sh:name "code" ;
    sh:description "Equipment code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Extra Service Selection
amadeus:ExtraServiceSelectionShape a sh:NodeShape ;
  sh:targetClass amadeus:ExtraServiceSelection ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraServiceSelection/code> ;
    sh:name "code" ;
    sh:description "Service code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtraServiceSelection/itemCount> ;
    sh:name "item count" ;
    sh:description "Quantity" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Loyalty Number
amadeus:LoyaltyNumberShape a sh:NodeShape ;
  sh:targetClass amadeus:LoyaltyNumber ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LoyaltyNumber/programId> ;
    sh:name "program id" ;
    sh:description "Program ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LoyaltyNumber/number> ;
    sh:name "number" ;
    sh:description "Membership number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Corporation
amadeus:CorporationShape a sh:NodeShape ;
  sh:targetClass amadeus:Corporation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Corporation/name> ;
    sh:name "name" ;
    sh:description "Corporation name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Corporation/address> ;
    sh:name "address" ;
    sh:description "Corporation address" ;
    sh:node amadeus:TransferAddressShape ;
    sh:class amadeus:TransferAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Travel Segment
amadeus:TravelSegmentShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelSegment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegment/transportationType> ;
    sh:name "transportation type" ;
    sh:description "Transport type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "FLIGHT" "TRAIN" "CRUISE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegment/transportationNumber> ;
    sh:name "transportation number" ;
    sh:description "Transport number (flight or train number)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegment/departure> ;
    sh:name "departure" ;
    sh:description "Departure information" ;
    sh:node amadeus:TravelSegmentLocationShape ;
    sh:class amadeus:TravelSegmentLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegment/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival information" ;
    sh:node amadeus:TravelSegmentLocationShape ;
    sh:class amadeus:TravelSegmentLocation ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Travel Segment Location
amadeus:TravelSegmentLocationShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelSegmentLocation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegmentLocation/uicCode> ;
    sh:name "uic code" ;
    sh:description "Railway UIC code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegmentLocation/iataCode> ;
    sh:name "iata code" ;
    sh:description "Airport IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelSegmentLocation/localDateTime> ;
    sh:name "local date time" ;
    sh:description "Local date and time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Point Of Interest
amadeus:PointOfInterestShape a sh:NodeShape ;
  sh:targetClass amadeus:PointOfInterest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/id> ;
    sh:name "id" ;
    sh:description "POI ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:node amadeus:LinksShape ;
    sh:class amadeus:Links ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic code" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/name> ;
    sh:name "name" ;
    sh:description "POI name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/category> ;
    sh:name "category" ;
    sh:description "POI category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "SIGHTS" "BEACH_PARK" "HISTORICAL" "NIGHTLIFE" "RESTAURANT" "SHOPPING" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/rank> ;
    sh:name "rank" ;
    sh:description "POI rank" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PointOfInterest/tags> ;
    sh:name "tags" ;
    sh:description "POI tags" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Links
amadeus:LinksShape a sh:NodeShape ;
  sh:targetClass amadeus:Links ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Links/href> ;
    sh:name "href" ;
    sh:description "Link href" ;
    sh:datatype xsd:anyURI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Links/methods> ;
    sh:name "methods" ;
    sh:description "Allowed HTTP methods" ;
    sh:datatype xsd:string ;
    sh:in ( "GET" "PUT" "DELETE" "POST" "PATCH" ) ;
  ] .

# Shape for City
amadeus:CityShape a sh:NodeShape ;
  sh:targetClass amadeus:City ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CITY" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/name> ;
    sh:name "name" ;
    sh:description "City name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/address> ;
    sh:name "address" ;
    sh:description "Address information" ;
    sh:node amadeus:CityAddressShape ;
    sh:class amadeus:CityAddress ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.City/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic coordinates" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for City Address
amadeus:CityAddressShape a sh:NodeShape ;
  sh:targetClass amadeus:CityAddress ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CityAddress/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CityAddress/stateCode> ;
    sh:name "state code" ;
    sh:description "State code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Location Score
amadeus:LocationScoreShape a sh:NodeShape ;
  sh:targetClass amadeus:LocationScore ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationScore/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "location-score" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationScore/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic code" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.LocationScore/categoryScores> ;
    sh:name "category scores" ;
    sh:description "Category scores" ;
    sh:node amadeus:CategoryScoresShape ;
    sh:class amadeus:CategoryScores ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Category Scores
amadeus:CategoryScoresShape a sh:NodeShape ;
  sh:targetClass amadeus:CategoryScores ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CategoryScores/sight> ;
    sh:name "sight" ;
    sh:description "Sight score" ;
    sh:node amadeus:ScoreValueShape ;
    sh:class amadeus:ScoreValue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CategoryScores/restaurant> ;
    sh:name "restaurant" ;
    sh:description "Restaurant score" ;
    sh:node amadeus:ScoreValueShape ;
    sh:class amadeus:ScoreValue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CategoryScores/shopping> ;
    sh:name "shopping" ;
    sh:description "Shopping score" ;
    sh:node amadeus:ScoreValueShape ;
    sh:class amadeus:ScoreValue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CategoryScores/nightLife> ;
    sh:name "night life" ;
    sh:description "Nightlife score" ;
    sh:node amadeus:ScoreValueShape ;
    sh:class amadeus:ScoreValue ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Score Value
amadeus:ScoreValueShape a sh:NodeShape ;
  sh:targetClass amadeus:ScoreValue ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ScoreValue/overall> ;
    sh:name "overall" ;
    sh:description "Overall score (0-100)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ScoreValue/historical> ;
    sh:name "historical" ;
    sh:description "Historical score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ScoreValue/beachAndPark> ;
    sh:name "beach and park" ;
    sh:description "Beach and park score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Travel Recommendation
amadeus:TravelRecommendationShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelRecommendation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "recommended-location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/name> ;
    sh:name "name" ;
    sh:description "Destination name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic code" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelRecommendation/relevance> ;
    sh:name "relevance" ;
    sh:description "Relevance score (0-100)" ;
    sh:datatype xsd:double ;
    sh:maxCount 1 ;
  ] .

# Shape for Safe Place
amadeus:SafePlaceShape a sh:NodeShape ;
  sh:targetClass amadeus:SafePlace ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "safety-rated-location" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/id> ;
    sh:name "id" ;
    sh:description "ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:node amadeus:LinksShape ;
    sh:class amadeus:Links ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AIRPORT" "CITY" "POINT_OF_INTEREST" "DISTRICT" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/name> ;
    sh:name "name" ;
    sh:description "Location name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic code" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafePlace/safetyScore> ;
    sh:name "safety score" ;
    sh:description "Safety score" ;
    sh:node amadeus:SafetyScoreShape ;
    sh:class amadeus:SafetyScore ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Safety Score
amadeus:SafetyScoreShape a sh:NodeShape ;
  sh:targetClass amadeus:SafetyScore ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/overall> ;
    sh:name "overall" ;
    sh:description "Overall safety score (1-100)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/lgbtq> ;
    sh:name "lgbtq" ;
    sh:description "LGBTQ+ safety score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/medical> ;
    sh:name "medical" ;
    sh:description "Medical safety score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/physicalHarm> ;
    sh:name "physical harm" ;
    sh:description "Physical harm score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/politicalFreedom> ;
    sh:name "political freedom" ;
    sh:description "Political freedom score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/theft> ;
    sh:name "theft" ;
    sh:description "Theft score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SafetyScore/women> ;
    sh:name "women" ;
    sh:description "Women safety score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Activity
amadeus:ActivityShape a sh:NodeShape ;
  sh:targetClass amadeus:Activity ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "activity" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/id> ;
    sh:name "id" ;
    sh:description "Activity ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/self> ;
    sh:name "self" ;
    sh:description "Self link" ;
    sh:node amadeus:LinksShape ;
    sh:class amadeus:Links ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/name> ;
    sh:name "name" ;
    sh:description "Activity name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/shortDescription> ;
    sh:name "short description" ;
    sh:description "Short description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/description> ;
    sh:name "description" ;
    sh:description "Full description" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geographic code" ;
    sh:node amadeus:GeoCodeShape ;
    sh:class amadeus:GeoCode ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/rating> ;
    sh:name "rating" ;
    sh:description "Rating" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/pictures> ;
    sh:name "pictures" ;
    sh:description "Pictures" ;
    sh:datatype xsd:anyURI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/bookingLink> ;
    sh:name "booking link" ;
    sh:description "Booking link" ;
    sh:datatype xsd:anyURI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/price> ;
    sh:name "price" ;
    sh:description "Price" ;
    sh:node amadeus:ActivityPriceShape ;
    sh:class amadeus:ActivityPrice ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Activity/minimumDuration> ;
    sh:name "minimum duration" ;
    sh:description "Minimum duration" ;
    sh:datatype xsd:duration ;
    sh:maxCount 1 ;
  ] .

# Shape for Activity Price
amadeus:ActivityPriceShape a sh:NodeShape ;
  sh:targetClass amadeus:ActivityPrice ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ActivityPrice/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ActivityPrice/amount> ;
    sh:name "amount" ;
    sh:description "Price amount" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Trip Purpose Prediction
amadeus:TripPurposePredictionShape a sh:NodeShape ;
  sh:targetClass amadeus:TripPurposePrediction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TripPurposePrediction/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "prediction" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TripPurposePrediction/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "trip-purpose" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TripPurposePrediction/id> ;
    sh:name "id" ;
    sh:description "Prediction ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TripPurposePrediction/result> ;
    sh:name "result" ;
    sh:description "Prediction result" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "LEISURE" "BUSINESS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TripPurposePrediction/probability> ;
    sh:name "probability" ;
    sh:description "Probability of the prediction" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Delay Prediction Result
amadeus:FlightDelayPredictionResultShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightDelayPredictionResult ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDelayPredictionResult/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "prediction" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDelayPredictionResult/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "flight-delay" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDelayPredictionResult/id> ;
    sh:name "id" ;
    sh:description "Prediction ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDelayPredictionResult/probability> ;
    sh:name "probability" ;
    sh:description "Delay probability" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDelayPredictionResult/result> ;
    sh:name "result" ;
    sh:description "Delay result" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "LESS_THAN_30_MINUTES" "BETWEEN_30_AND_60_MINUTES" "BETWEEN_60_AND_120_MINUTES" "OVER_120_MINUTES_OR_CANCELLED" ) ;
  ] .

# Shape for Flight Choice Prediction
amadeus:FlightChoicePredictionShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightChoicePrediction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoicePrediction/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "flight-offer" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoicePrediction/id> ;
    sh:name "id" ;
    sh:description "Offer ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoicePrediction/choiceProbability> ;
    sh:name "choice probability" ;
    sh:description "Choice probability" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Origin Destination
amadeus:OriginDestinationShape a sh:NodeShape ;
  sh:targetClass amadeus:OriginDestination ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/id> ;
    sh:name "id" ;
    sh:description "Origin destination ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/originLocationCode> ;
    sh:name "origin location code" ;
    sh:description "Origin location code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/destinationLocationCode> ;
    sh:name "destination location code" ;
    sh:description "Destination location code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/departureDateTimeRange> ;
    sh:name "departure date time range" ;
    sh:description "Departure date range" ;
    sh:node amadeus:DateTimeRangeShape ;
    sh:class amadeus:DateTimeRange ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/originRadius> ;
    sh:name "origin radius" ;
    sh:description "Origin radius for flexible search" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/destinationRadius> ;
    sh:name "destination radius" ;
    sh:description "Destination radius for flexible search" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/alternativeOriginsCodes> ;
    sh:name "alternative origins codes" ;
    sh:description "Alternative origin codes" ;
    sh:datatype xsd:string ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/alternativeDestinationsCodes> ;
    sh:name "alternative destinations codes" ;
    sh:description "Alternative destination codes" ;
    sh:datatype xsd:string ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/includedConnectionPoints> ;
    sh:name "included connection points" ;
    sh:description "Included connection points" ;
    sh:datatype xsd:string ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.OriginDestination/excludedConnectionPoints> ;
    sh:name "excluded connection points" ;
    sh:description "Excluded connection points" ;
    sh:datatype xsd:string ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Date Time Range
amadeus:DateTimeRangeShape a sh:NodeShape ;
  sh:targetClass amadeus:DateTimeRange ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DateTimeRange/date> ;
    sh:name "date" ;
    sh:description "Date (YYYY-MM-DD)" ;
    sh:datatype xsd:date ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DateTimeRange/time> ;
    sh:name "time" ;
    sh:description "Time (HH:MM:SS)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DateTimeRange/dateWindow> ;
    sh:name "date window" ;
    sh:description "Date window (I1D = +/- 1 day)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DateTimeRange/timeWindow> ;
    sh:name "time window" ;
    sh:description "Time window (1H = +/- 1 hour)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Traveler Criteria
amadeus:TravelerCriteriaShape a sh:NodeShape ;
  sh:targetClass amadeus:TravelerCriteria ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerCriteria/id> ;
    sh:name "id" ;
    sh:description "Traveler ID" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerCriteria/travelerType> ;
    sh:name "traveler type" ;
    sh:description "Traveler type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "ADULT" "CHILD" "SEATED_INFANT" "HELD_INFANT" "STUDENT" "SENIOR" "YOUNG" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TravelerCriteria/associatedAdultId> ;
    sh:name "associated adult id" ;
    sh:description "Associated adult ID (for infants)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Cabin Restriction
amadeus:CabinRestrictionShape a sh:NodeShape ;
  sh:targetClass amadeus:CabinRestriction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CabinRestriction/cabin> ;
    sh:name "cabin" ;
    sh:description "Cabin class" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ECONOMY" "PREMIUM_ECONOMY" "BUSINESS" "FIRST" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CabinRestriction/coverage> ;
    sh:name "coverage" ;
    sh:description "Coverage - most or all segments" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MOST_SEGMENTS" "AT_LEAST_ONE_SEGMENT" "ALL_SEGMENTS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CabinRestriction/originDestinationIds> ;
    sh:name "origin destination ids" ;
    sh:description "Origin destination IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Carrier Restriction
amadeus:CarrierRestrictionShape a sh:NodeShape ;
  sh:targetClass amadeus:CarrierRestriction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CarrierRestriction/blacklistedInEUAllowed> ;
    sh:name "blacklisted in euallowed" ;
    sh:description "Blacklisted in EU only" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CarrierRestriction/excludedCarrierCodes> ;
    sh:name "excluded carrier codes" ;
    sh:description "Excluded carrier codes" ;
    sh:datatype xsd:string ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CarrierRestriction/includedCarrierCodes> ;
    sh:name "included carrier codes" ;
    sh:description "Included carrier codes" ;
    sh:datatype xsd:string ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] .

# Shape for Connection Restriction
amadeus:ConnectionRestrictionShape a sh:NodeShape ;
  sh:targetClass amadeus:ConnectionRestriction ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectionRestriction/maxNumberOfConnections> ;
    sh:name "max number of connections" ;
    sh:description "Maximum number of connections" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectionRestriction/nonStopPreferred> ;
    sh:name "non stop preferred" ;
    sh:description "Prefer non-stop flights" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectionRestriction/airportChangeAllowed> ;
    sh:name "airport change allowed" ;
    sh:description "Allow airport changes during connections" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectionRestriction/technicalStopsAllowed> ;
    sh:name "technical stops allowed" ;
    sh:description "Allow technical stops" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Filters
amadeus:FlightFiltersShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightFilters ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/crossBorderAllowed> ;
    sh:name "cross border allowed" ;
    sh:description "Allow cross-border itineraries" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/moreOvernightsAllowed> ;
    sh:name "more overnights allowed" ;
    sh:description "Allow more than one overnight stay" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/returnToDepartureAirport> ;
    sh:name "return to departure airport" ;
    sh:description "Return to departure airport" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/railSegmentAllowed> ;
    sh:name "rail segment allowed" ;
    sh:description "Rail segment allowed" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/busSegmentAllowed> ;
    sh:name "bus segment allowed" ;
    sh:description "Bus segment allowed" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/maxFlightTime> ;
    sh:name "max flight time" ;
    sh:description "Maximum flight time in minutes" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/cabinRestrictions> ;
    sh:name "cabin restrictions" ;
    sh:description "Cabin restrictions" ;
    sh:node amadeus:CabinRestrictionShape ;
    sh:class amadeus:CabinRestriction ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/carrierRestrictions> ;
    sh:name "carrier restrictions" ;
    sh:description "Carrier restrictions" ;
    sh:node amadeus:CarrierRestrictionShape ;
    sh:class amadeus:CarrierRestriction ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightFilters/connectionRestriction> ;
    sh:name "connection restriction" ;
    sh:description "Connection restrictions" ;
    sh:node amadeus:ConnectionRestrictionShape ;
    sh:class amadeus:ConnectionRestriction ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Extended Pricing Options
amadeus:ExtendedPricingOptionsShape a sh:NodeShape ;
  sh:targetClass amadeus:ExtendedPricingOptions ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtendedPricingOptions/fareType> ;
    sh:name "fare type" ;
    sh:description "Fare types to include" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtendedPricingOptions/includedCheckedBagsOnly> ;
    sh:name "included checked bags only" ;
    sh:description "Include only offers with checked bags" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtendedPricingOptions/refundableFare> ;
    sh:name "refundable fare" ;
    sh:description "Include only refundable fares" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtendedPricingOptions/noRestrictionFare> ;
    sh:name "no restriction fare" ;
    sh:description "Include only no-restriction fares" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ExtendedPricingOptions/noPenaltyFare> ;
    sh:name "no penalty fare" ;
    sh:description "Include only no-penalty fares" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Search Criteria
amadeus:SearchCriteriaShape a sh:NodeShape ;
  sh:targetClass amadeus:SearchCriteria ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/excludeAllotments> ;
    sh:name "exclude allotments" ;
    sh:description "Exclude allotments from results" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/addOneWayOffers> ;
    sh:name "add one way offers" ;
    sh:description "Add one-way offers to round-trip search" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/maxFlightOffers> ;
    sh:name "max flight offers" ;
    sh:description "Maximum flight offers to return" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/maxPrice> ;
    sh:name "max price" ;
    sh:description "Maximum price filter" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/allowAlternativeFareOptions> ;
    sh:name "allow alternative fare options" ;
    sh:description "Allow alternative fare options" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/oneFlightOfferPerDay> ;
    sh:name "one flight offer per day" ;
    sh:description "Return one flight offer per day" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/additionalInformation> ;
    sh:name "additional information" ;
    sh:description "Additional information to include" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SearchCriteria/additionalInformationShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SearchCriteria/additionalInformation> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/pricingOptions> ;
    sh:name "pricing options" ;
    sh:description "Pricing options" ;
    sh:node amadeus:ExtendedPricingOptionsShape ;
    sh:class amadeus:ExtendedPricingOptions ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria/flightFilters> ;
    sh:name "flight filters" ;
    sh:description "Flight filters" ;
    sh:node amadeus:FlightFiltersShape ;
    sh:class amadeus:FlightFilters ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Offers Search Request
amadeus:FlightOffersSearchRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOffersSearchRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersSearchRequest/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code for prices" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersSearchRequest/originDestinations> ;
    sh:name "origin destinations" ;
    sh:description "Origin destinations" ;
    sh:node amadeus:OriginDestinationShape ;
    sh:class amadeus:OriginDestination ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersSearchRequest/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers" ;
    sh:node amadeus:TravelerCriteriaShape ;
    sh:class amadeus:TravelerCriteria ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersSearchRequest/sources> ;
    sh:name "sources" ;
    sh:description "Sources (GDS)" ;
    sh:datatype xsd:string ;
    sh:in ( "GDS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersSearchRequest/searchCriteria> ;
    sh:name "search criteria" ;
    sh:description "Search criteria" ;
    sh:node amadeus:SearchCriteriaShape ;
    sh:class amadeus:SearchCriteria ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Offers Price Request
amadeus:FlightOffersPriceRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOffersPriceRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersPriceRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOffersPriceRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Availabilities Request
amadeus:FlightAvailabilitiesRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightAvailabilitiesRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightAvailabilitiesRequest/originDestinations> ;
    sh:name "origin destinations" ;
    sh:description "Origin destinations" ;
    sh:node amadeus:OriginDestinationShape ;
    sh:class amadeus:OriginDestination ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightAvailabilitiesRequest/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers" ;
    sh:node amadeus:TravelerCriteriaShape ;
    sh:class amadeus:TravelerCriteria ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightAvailabilitiesRequest/sources> ;
    sh:name "sources" ;
    sh:description "Sources" ;
    sh:datatype xsd:string ;
    sh:in ( "GDS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightAvailabilitiesRequest/searchCriteria> ;
    sh:name "search criteria" ;
    sh:description "Search criteria" ;
    sh:node amadeus:SearchCriteriaShape ;
    sh:class amadeus:SearchCriteria ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Destination
amadeus:FlightDestinationShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightDestination ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "flight-destination" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/origin> ;
    sh:name "origin" ;
    sh:description "Origin IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/destination> ;
    sh:name "destination" ;
    sh:description "Destination IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/departureDate> ;
    sh:name "departure date" ;
    sh:description "Departure date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/returnDate> ;
    sh:name "return date" ;
    sh:description "Return date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/price> ;
    sh:name "price" ;
    sh:description "Price information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/priceShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/price> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination/links> ;
    sh:name "links" ;
    sh:description "Links" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/linksShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/links> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Date
amadeus:FlightDateShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightDate ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "flight-date" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/origin> ;
    sh:name "origin" ;
    sh:description "Origin IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/destination> ;
    sh:name "destination" ;
    sh:description "Destination IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/departureDate> ;
    sh:name "departure date" ;
    sh:description "Departure date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/returnDate> ;
    sh:name "return date" ;
    sh:description "Return date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/price> ;
    sh:name "price" ;
    sh:description "Price information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/priceShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/price> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate/links> ;
    sh:name "links" ;
    sh:description "Links" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/linksShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/links> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Branded Fares Upsell Request
amadeus:BrandedFaresUpsellRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:BrandedFaresUpsellRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BrandedFaresUpsellRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BrandedFaresUpsellRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Order Create Request
amadeus:FlightOrderCreateRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightOrderCreateRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOrderCreateRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Designator
amadeus:FlightDesignatorShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightDesignator ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDesignator/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Carrier code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDesignator/flightNumber> ;
    sh:name "flight number" ;
    sh:description "Flight number" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDesignator/operationalSuffix> ;
    sh:name "operational suffix" ;
    sh:description "Operational suffix" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Leg
amadeus:FlightLegShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightLeg ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightLeg/boardPointIataCode> ;
    sh:name "board point iata code" ;
    sh:description "Board point IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightLeg/offPointIataCode> ;
    sh:name "off point iata code" ;
    sh:description "Off point IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightLeg/aircraftEquipment> ;
    sh:name "aircraft equipment" ;
    sh:description "Aircraft equipment" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightLeg/aircraftEquipmentShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightLeg/aircraftEquipment> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightLeg/scheduledLegDuration> ;
    sh:name "scheduled leg duration" ;
    sh:description "Scheduled leg duration in ISO 8601 format" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Status
amadeus:FlightStatusShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightStatus ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "DatedFlight" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/scheduledDepartureDate> ;
    sh:name "scheduled departure date" ;
    sh:description "Scheduled departure date" ;
    sh:datatype xsd:date ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/flightDesignator> ;
    sh:name "flight designator" ;
    sh:description "Flight designator" ;
    sh:node amadeus:FlightDesignatorShape ;
    sh:class amadeus:FlightDesignator ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/flightPoints> ;
    sh:name "flight points" ;
    sh:description "Flight points" ;
    sh:node amadeus:FlightPointShape ;
    sh:class amadeus:FlightPoint ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/segments> ;
    sh:name "segments" ;
    sh:description "Segment information" ;
    sh:node amadeus:FlightStatusSegmentShape ;
    sh:class amadeus:FlightStatusSegment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatus/legs> ;
    sh:name "legs" ;
    sh:description "Leg information" ;
    sh:node amadeus:FlightLegShape ;
    sh:class amadeus:FlightLeg ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Flight Point
amadeus:FlightPointShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightPoint ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightPoint/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightPoint/departure> ;
    sh:name "departure" ;
    sh:description "Departure information" ;
    sh:node amadeus:FlightTimingShape ;
    sh:class amadeus:FlightTiming ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightPoint/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival information" ;
    sh:node amadeus:FlightTimingShape ;
    sh:class amadeus:FlightTiming ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Timing
amadeus:FlightTimingShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightTiming ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightTiming/terminal> ;
    sh:name "terminal" ;
    sh:description "Terminal" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/terminalShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/terminal> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightTiming/gate> ;
    sh:name "gate" ;
    sh:description "Gate" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/gateShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/gate> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightTiming/timings> ;
    sh:name "timings" ;
    sh:description "Timings" ;
    sh:node amadeus:TimingDetailShape ;
    sh:class amadeus:TimingDetail ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Timing Detail
amadeus:TimingDetailShape a sh:NodeShape ;
  sh:targetClass amadeus:TimingDetail ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TimingDetail/qualifier> ;
    sh:name "qualifier" ;
    sh:description "Qualifier (scheduled, estimated, actual)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "STD" "ETD" "ATD" "STA" "ETA" "ATA" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TimingDetail/value> ;
    sh:name "value" ;
    sh:description "Time value" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TimingDetail/delays> ;
    sh:name "delays" ;
    sh:description "Delay in ISO 8601 duration" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.TimingDetail/delaysShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.TimingDetail/delays> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Flight Status Segment
amadeus:FlightStatusSegmentShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightStatusSegment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment/boardPointIataCode> ;
    sh:name "board point iata code" ;
    sh:description "Board point IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment/offPointIataCode> ;
    sh:name "off point iata code" ;
    sh:description "Off point IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment/scheduledSegmentDuration> ;
    sh:name "scheduled segment duration" ;
    sh:description "Scheduled segment duration" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment/partnership> ;
    sh:name "partnership" ;
    sh:description "Partnership information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnershipShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Seat Map
amadeus:SeatMapShape a sh:NodeShape ;
  sh:targetClass amadeus:SeatMap ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "seatmap" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/flightOfferId> ;
    sh:name "flight offer id" ;
    sh:description "Flight offer ID this seat map is for" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/segmentId> ;
    sh:name "segment id" ;
    sh:description "Segment ID this seat map is for" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/aircraft> ;
    sh:name "aircraft" ;
    sh:description "Aircraft information" ;
    sh:node amadeus:AircraftShape ;
    sh:class amadeus:Aircraft ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/departure> ;
    sh:name "departure" ;
    sh:description "Departure information" ;
    sh:node amadeus:FlightEndpointShape ;
    sh:class amadeus:FlightEndpoint ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/arrival> ;
    sh:name "arrival" ;
    sh:description "Arrival information" ;
    sh:node amadeus:FlightEndpointShape ;
    sh:class amadeus:FlightEndpoint ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMap/decks> ;
    sh:name "decks" ;
    sh:description "Decks in the aircraft" ;
    sh:node amadeus:SeatMapDeckShape ;
    sh:class amadeus:SeatMapDeck ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Seat Map Deck
amadeus:SeatMapDeckShape a sh:NodeShape ;
  sh:targetClass amadeus:SeatMapDeck ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck/deckType> ;
    sh:name "deck type" ;
    sh:description "Deck type (MAIN, UPPER)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "MAIN" "UPPER" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck/deckConfiguration> ;
    sh:name "deck configuration" ;
    sh:description "Deck configuration" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatMapDeck/deckConfigurationShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatMapDeck/deckConfiguration> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck/seats> ;
    sh:name "seats" ;
    sh:description "Seats on this deck" ;
    sh:node amadeus:SeatShape ;
    sh:class amadeus:Seat ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck/facilities> ;
    sh:name "facilities" ;
    sh:description "Facilities on this deck" ;
    sh:node amadeus:SeatFacilityShape ;
    sh:class amadeus:SeatFacility ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Seat
amadeus:SeatShape a sh:NodeShape ;
  sh:targetClass amadeus:Seat ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat/cabin> ;
    sh:name "cabin" ;
    sh:description "Cabin class" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "ECONOMY" "PREMIUM_ECONOMY" "BUSINESS" "FIRST" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat/number> ;
    sh:name "number" ;
    sh:description "Seat number (e.g., 1A)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat/characteristicsCodes> ;
    sh:name "characteristics codes" ;
    sh:description "Seat characteristics" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat/travelerPricing> ;
    sh:name "traveler pricing" ;
    sh:description "Traveler pricing for this seat" ;
    sh:node amadeus:SeatTravelerPricingShape ;
    sh:class amadeus:SeatTravelerPricing ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat/coordinates> ;
    sh:name "coordinates" ;
    sh:description "Coordinates on deck" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Seat/coordinatesShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Seat/coordinates> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Seat Traveler Pricing
amadeus:SeatTravelerPricingShape a sh:NodeShape ;
  sh:targetClass amadeus:SeatTravelerPricing ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing/travelerId> ;
    sh:name "traveler id" ;
    sh:description "Traveler ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing/seatAvailabilityStatus> ;
    sh:name "seat availability status" ;
    sh:description "Seat availability status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "AVAILABLE" "BLOCKED" "OCCUPIED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing/price> ;
    sh:name "price" ;
    sh:description "Price for this seat" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatTravelerPricing/priceShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatTravelerPricing/price> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Seat Facility
amadeus:SeatFacilityShape a sh:NodeShape ;
  sh:targetClass amadeus:SeatFacility ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility/code> ;
    sh:name "code" ;
    sh:description "Facility type code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility/column> ;
    sh:name "column" ;
    sh:description "Column position" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility/row> ;
    sh:name "row" ;
    sh:description "Row position" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility/position> ;
    sh:name "position" ;
    sh:description "Position relative to seat" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility/coordinates> ;
    sh:name "coordinates" ;
    sh:description "Coordinates on deck" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatFacility/coordinatesShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatFacility/coordinates> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Seat Map Request
amadeus:SeatMapRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:SeatMapRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Check In Link
amadeus:CheckInLinkShape a sh:NodeShape ;
  sh:targetClass amadeus:CheckInLink ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInLink/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "checkin-link" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInLink/id> ;
    sh:name "id" ;
    sh:description "Unique ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInLink/href> ;
    sh:name "href" ;
    sh:description "Link href" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CheckInLink/channel> ;
    sh:name "channel" ;
    sh:description "Channel (Mobile, Web)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "Mobile" "Web" "All" ) ;
  ] .

# Shape for Air Traffic
amadeus:AirTrafficShape a sh:NodeShape ;
  sh:targetClass amadeus:AirTraffic ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "air-traffic" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic/subType> ;
    sh:name "sub type" ;
    sh:description "Subtype" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "BOOKED" "TRAVELED" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic/destination> ;
    sh:name "destination" ;
    sh:description "Destination (for booked/traveled)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic/period> ;
    sh:name "period" ;
    sh:description "Period (YYYY-MM for monthly)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic/analytics> ;
    sh:name "analytics" ;
    sh:description "Analytics data" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analyticsShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Busiest Period
amadeus:BusiestPeriodShape a sh:NodeShape ;
  sh:targetClass amadeus:BusiestPeriod ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusiestPeriod/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "air-traffic" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusiestPeriod/period> ;
    sh:name "period" ;
    sh:description "Period identifier (YYYY-MM)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusiestPeriod/analytics> ;
    sh:name "analytics" ;
    sh:description "Analytics" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analyticsShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flight Choice Request
amadeus:FlightChoiceRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:FlightChoiceRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoiceRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightChoiceRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Booking V1Request
amadeus:HotelBookingV1RequestShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelBookingV1Request ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingV1Request/data> ;
    sh:name "data" ;
    sh:description "Booking data wrapper" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingV1Request/dataShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingV1Request/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Order Request
amadeus:HotelOrderRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelOrderRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest/data> ;
    sh:name "data" ;
    sh:description "Data wrapper" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/dataShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Room Selection
amadeus:HotelRoomSelectionShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelRoomSelection ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelRoomSelection/guestIds> ;
    sh:name "guest ids" ;
    sh:description "Guest IDs for this room" ;
    sh:datatype xsd:int ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelRoomSelection/paymentId> ;
    sh:name "payment id" ;
    sh:description "Payment ID" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelRoomSelection/specialRequest> ;
    sh:name "special request" ;
    sh:description "Special request" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelRoomSelection/offerId> ;
    sh:name "offer id" ;
    sh:description "Offer ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Hotel Order Payment
amadeus:HotelOrderPaymentShape a sh:NodeShape ;
  sh:targetClass amadeus:HotelOrderPayment ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderPayment/id> ;
    sh:name "id" ;
    sh:description "Payment ID" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderPayment/method> ;
    sh:name "method" ;
    sh:description "Payment method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderPayment/paymentCard> ;
    sh:name "payment card" ;
    sh:description "Payment card" ;
    sh:node amadeus:HotelPaymentCardShape ;
    sh:class amadeus:HotelPaymentCard ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Search Request
amadeus:TransferSearchRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferSearchRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startLocationCode> ;
    sh:name "start location code" ;
    sh:description "Start location" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startGeoCode> ;
    sh:name "start geo code" ;
    sh:description "Start geocode" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startAddressLine> ;
    sh:name "start address line" ;
    sh:description "Start address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startCountryCode> ;
    sh:name "start country code" ;
    sh:description "Start country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startCityName> ;
    sh:name "start city name" ;
    sh:description "Start city name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startZipCode> ;
    sh:name "start zip code" ;
    sh:description "Start postal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startGooglePlaceId> ;
    sh:name "start google place id" ;
    sh:description "Start Google Place ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startName> ;
    sh:name "start name" ;
    sh:description "Start name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endLocationCode> ;
    sh:name "end location code" ;
    sh:description "End location code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endGeoCode> ;
    sh:name "end geo code" ;
    sh:description "End geocode" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endAddressLine> ;
    sh:name "end address line" ;
    sh:description "End address" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endCountryCode> ;
    sh:name "end country code" ;
    sh:description "End country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endCityName> ;
    sh:name "end city name" ;
    sh:description "End city name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endZipCode> ;
    sh:name "end zip code" ;
    sh:description "End postal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endGooglePlaceId> ;
    sh:name "end google place id" ;
    sh:description "End Google Place ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endName> ;
    sh:name "end name" ;
    sh:description "End name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/transferType> ;
    sh:name "transfer type" ;
    sh:description "Transfer type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:in ( "PRIVATE" "SHARED" "TAXI" "HOURLY" "AIRPORT_EXPRESS" "AIRPORT_BUS" "HELICOPTER" "PRIVATE_JET" "BUS" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startDateTime> ;
    sh:name "start date time" ;
    sh:description "Start date and time" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/passengers> ;
    sh:name "passengers" ;
    sh:description "Number of passengers" ;
    sh:datatype xsd:int ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/stopOvers> ;
    sh:name "stop overs" ;
    sh:description "Stop over locations" ;
    sh:node amadeus:TransferStopOverRequestShape ;
    sh:class amadeus:TransferStopOverRequest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/startConnectedSegment> ;
    sh:name "start connected segment" ;
    sh:description "Start connected segment" ;
    sh:node amadeus:ConnectedSegmentRequestShape ;
    sh:class amadeus:ConnectedSegmentRequest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/endConnectedSegment> ;
    sh:name "end connected segment" ;
    sh:description "End connected segment" ;
    sh:node amadeus:ConnectedSegmentRequestShape ;
    sh:class amadeus:ConnectedSegmentRequest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/passengerCharacteristics> ;
    sh:name "passenger characteristics" ;
    sh:description "Passenger characteristics" ;
    sh:node amadeus:PassengerCharacteristicsRequestShape ;
    sh:class amadeus:PassengerCharacteristicsRequest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/providerCodes> ;
    sh:name "provider codes" ;
    sh:description "Provider codes filter" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferSearchRequest/currencyCode> ;
    sh:name "currency code" ;
    sh:description "Currency code for pricing" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Transfer Stop Over Request
amadeus:TransferStopOverRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferStopOverRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/duration> ;
    sh:name "duration" ;
    sh:description "Duration at stop" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/sequenceNumber> ;
    sh:name "sequence number" ;
    sh:description "Sequence number" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/addressLine> ;
    sh:name "address line" ;
    sh:description "Address line" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/countryCode> ;
    sh:name "country code" ;
    sh:description "Country code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 2 ;
    sh:pattern "^[A-Z]{2}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/cityName> ;
    sh:name "city name" ;
    sh:description "City name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/zipCode> ;
    sh:name "zip code" ;
    sh:description "Postal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/googlePlaceId> ;
    sh:name "google place id" ;
    sh:description "Google Place ID" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/name> ;
    sh:name "name" ;
    sh:description "Location name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/geoCode> ;
    sh:name "geo code" ;
    sh:description "Geocode" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferStopOverRequest/stateCode> ;
    sh:name "state code" ;
    sh:description "State code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Connected Segment Request
amadeus:ConnectedSegmentRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:ConnectedSegmentRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegmentRequest/transportType> ;
    sh:name "transport type" ;
    sh:description "Transport type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "FLIGHT" "TRAIN" "CRUISE" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegmentRequest/transportNumber> ;
    sh:name "transport number" ;
    sh:description "Transport number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegmentRequest/iataCode> ;
    sh:name "iata code" ;
    sh:description "Departure IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegmentRequest/terminal> ;
    sh:name "terminal" ;
    sh:description "Terminal" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegmentRequest/dateTime> ;
    sh:name "date time" ;
    sh:description "Scheduled time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Passenger Characteristics Request
amadeus:PassengerCharacteristicsRequestShape a sh:NodeShape ;
  sh:targetClass amadeus:PassengerCharacteristicsRequest ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PassengerCharacteristicsRequest/passengerTypeCode> ;
    sh:name "passenger type code" ;
    sh:description "Passenger type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PassengerCharacteristicsRequest/age> ;
    sh:name "age" ;
    sh:description "Age" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Transfer Cancellation
amadeus:TransferCancellationShape a sh:NodeShape ;
  sh:targetClass amadeus:TransferCancellation ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCancellation/confirmNbr> ;
    sh:name "confirm nbr" ;
    sh:description "Confirmation number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TransferCancellation/reservationStatus> ;
    sh:name "reservation status" ;
    sh:description "Reservation status" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CONFIRMED" "CANCELLED" ) ;
  ] .

# Shape for Travelers
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirportAnalytics/travelersShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirportAnalytics/travelers> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirportAnalytics.travelers/score> ;
    sh:name "score" ;
    sh:description "Traveler score (0-100)" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Analytics
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analyticsShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic.analytics/flights> ;
    sh:name "flights" ;
    sh:description "Flights data" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/flightsShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/flights> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic.analytics/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers data" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/travelersShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/travelers> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Flights
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/flightsShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/flights> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic.analytics.flights/score> ;
    sh:name "score" ;
    sh:description "Flight score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Travelers
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/travelersShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AirTraffic/analytics/travelers> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AirTraffic.analytics.travelers/score> ;
    sh:name "score" ;
    sh:description "Traveler score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Amenity Provider
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Amenity/amenityProviderShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Amenity/amenityProvider> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Amenity.amenityProvider/name> ;
    sh:name "name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Arrival
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/arrivalShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/arrival> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails.arrival/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA airport code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails.arrival/terminal> ;
    sh:name "terminal" ;
    sh:description "Terminal" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails.arrival/at> ;
    sh:name "at" ;
    sh:description "Arrival time" ;
    sh:datatype xsd:dateTime ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Departure
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/departureShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ArrivalFlightDetails/departure> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ArrivalFlightDetails.departure/iataCode> ;
    sh:name "iata code" ;
    sh:description "IATA airport code" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] .

# Shape for Queue
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AutomatedProcess/queueShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.AutomatedProcess/queue> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess.queue/number> ;
    sh:name "number" ;
    sh:description "Queue number" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.AutomatedProcess.queue/category> ;
    sh:name "category" ;
    sh:description "Queue category" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BrandedFaresUpsellRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BrandedFaresUpsellRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BrandedFaresUpsellRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-offers-upselling" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BrandedFaresUpsellRequest.data/flightOffers> ;
    sh:name "flight offers" ;
    sh:description "Flight offers" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Analytics
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analyticsShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusiestPeriod.analytics/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers data" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics/travelersShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics/travelers> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Travelers
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics/travelersShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.BusiestPeriod/analytics/travelers> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.BusiestPeriod.analytics.travelers/score> ;
    sh:name "score" ;
    sh:description "Traveler score" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.CancellationPolicy/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.CancellationPolicy/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.CancellationPolicy.description/lang> ;
    sh:name "lang" ;
    sh:description "Language" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Arrival
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/arrivalShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/arrival> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.arrival/iataCode> ;
    sh:name "iata code" ;
    sh:description "Arrival IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.arrival/terminal> ;
    sh:name "terminal" ;
    sh:description "Arrival terminal" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.arrival/at> ;
    sh:name "at" ;
    sh:description "Arrival date/time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Departure
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/departureShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ConnectedSegment/departure> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.departure/iataCode> ;
    sh:name "iata code" ;
    sh:description "Departure IATA code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.departure/terminal> ;
    sh:name "terminal" ;
    sh:description "Departure terminal" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ConnectedSegment.departure/at> ;
    sh:name "at" ;
    sh:description "Departure date/time" ;
    sh:datatype xsd:dateTime ;
    sh:maxCount 1 ;
  ] .

# Shape for Addressee Name
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ContactInfo/addresseeNameShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.ContactInfo/addresseeName> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo.addresseeName/firstName> ;
    sh:name "first name" ;
    sh:description "First name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.ContactInfo.addresseeName/lastName> ;
    sh:name "last name" ;
    sh:description "Last name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.DepositPolicy/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.DepositPolicy/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.DepositPolicy.description/lang> ;
    sh:name "lang" ;
    sh:description "Language" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightChoiceRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightChoiceRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoiceRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-offers-prediction" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightChoiceRequest.data/flightOffers> ;
    sh:name "flight offers" ;
    sh:description "Flight offers to predict" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Links
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/linksShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/links> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate.links/flightDestinations> ;
    sh:name "flight destinations" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate.links/flightOffers> ;
    sh:name "flight offers" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Price
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/priceShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDate/price> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDate.price/total> ;
    sh:name "total" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Links
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/linksShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/links> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination.links/flightDates> ;
    sh:name "flight dates" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination.links/flightOffers> ;
    sh:name "flight offers" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Price
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/priceShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightDestination/price> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightDestination.price/total> ;
    sh:name "total" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Aircraft Equipment
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightLeg/aircraftEquipmentShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightLeg/aircraftEquipment> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightLeg.aircraftEquipment/aircraftType> ;
    sh:name "aircraft type" ;
    sh:description "Aircraft type code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOffersPriceRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOffersPriceRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersPriceRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-offers-pricing" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOffersPriceRequest.data/flightOffers> ;
    sh:name "flight offers" ;
    sh:description "Flight offers to price" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOrderCreateRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightOrderCreateRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "flight-order" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/flightOffers> ;
    sh:name "flight offers" ;
    sh:description "Flight offers to book" ;
    sh:node amadeus:FlightOfferShape ;
    sh:class amadeus:FlightOffer ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/travelers> ;
    sh:name "travelers" ;
    sh:description "Travelers" ;
    sh:node amadeus:TravelerShape ;
    sh:class amadeus:Traveler ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/remarks> ;
    sh:name "remarks" ;
    sh:description "Remarks" ;
    sh:node amadeus:RemarksShape ;
    sh:class amadeus:Remarks ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/ticketingAgreement> ;
    sh:name "ticketing agreement" ;
    sh:description "Ticketing agreement" ;
    sh:node amadeus:TicketingAgreementShape ;
    sh:class amadeus:TicketingAgreement ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/contacts> ;
    sh:name "contacts" ;
    sh:description "Contacts" ;
    sh:node amadeus:ContactInfoShape ;
    sh:class amadeus:ContactInfo ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightOrderCreateRequest.data/formOfPayment> ;
    sh:name "form of payment" ;
    sh:description "Form of payment" ;
    sh:node amadeus:FormOfPaymentShape ;
    sh:class amadeus:FormOfPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Partnership
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnershipShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment.partnership/operatingFlight> ;
    sh:name "operating flight" ;
    sh:description "Operating flight" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership/operatingFlightShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership/operatingFlight> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Operating Flight
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership/operatingFlightShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightStatusSegment/partnership/operatingFlight> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment.partnership.operatingFlight/carrierCode> ;
    sh:name "carrier code" ;
    sh:description "Carrier code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 2 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z0-9]{2,3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightStatusSegment.partnership.operatingFlight/flightNumber> ;
    sh:name "flight number" ;
    sh:description "Flight number" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Gate
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/gateShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/gate> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightTiming.gate/mainGate> ;
    sh:name "main gate" ;
    sh:description "Main gate" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Terminal
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/terminalShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FlightTiming/terminal> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FlightTiming.terminal/code> ;
    sh:name "code" ;
    sh:description "Terminal code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Other
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FormOfPayment/otherShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.FormOfPayment/other> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfPayment.other/method> ;
    sh:name "method" ;
    sh:description "Payment method" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "CASH" "CREDIT_CARD" "CHECK" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.FormOfPayment.other/flightOfferIds> ;
    sh:name "flight offer ids" ;
    sh:description "Flight offer IDs" ;
    sh:datatype xsd:string ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.GuaranteePolicy/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.GuaranteePolicy/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuaranteePolicy.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.GuaranteePolicy.description/lang> ;
    sh:name "lang" ;
    sh:description "Language" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Hotel/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Hotel/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel.description/lang> ;
    sh:name "lang" ;
    sh:description "Description language" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Hotel.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:in ( "hotel-order" ) ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRequest.data/guests> ;
    sh:name "guests" ;
    sh:description "Guest information" ;
    sh:node amadeus:HotelGuestShape ;
    sh:class amadeus:HotelGuest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRequest.data/payments> ;
    sh:name "payments" ;
    sh:description "Payment information" ;
    sh:node amadeus:HotelPaymentShape ;
    sh:class amadeus:HotelPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingRequest.data/rooms> ;
    sh:name "rooms" ;
    sh:description "Rooms to book" ;
    sh:node amadeus:HotelBookingRoomShape ;
    sh:class amadeus:HotelBookingRoom ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingV1Request/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelBookingV1Request/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingV1Request.data/offerId> ;
    sh:name "offer id" ;
    sh:description "Offer ID to book (2-100 alphanumeric characters)" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingV1Request.data/guests> ;
    sh:name "guests" ;
    sh:description "Guest information (1-99 guests, at least 1 required)" ;
    sh:node amadeus:HotelGuestShape ;
    sh:class amadeus:HotelGuest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingV1Request.data/payments> ;
    sh:name "payments" ;
    sh:description "Payment methods (1-9 payments, optional)" ;
    sh:node amadeus:HotelPaymentShape ;
    sh:class amadeus:HotelPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelBookingV1Request.data/rooms> ;
    sh:name "rooms" ;
    sh:description "Room distribution matching shopping offer quantity (1-9 rooms, optional)" ;
    sh:node amadeus:HotelBookingRoomShape ;
    sh:class amadeus:HotelBookingRoom ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Data
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/dataShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/type> ;
    sh:name "type" ;
    sh:description "Resource type" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
    sh:hasValue "hotel-order" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/guests> ;
    sh:name "guests" ;
    sh:description "Guest information" ;
    sh:node amadeus:HotelGuestShape ;
    sh:class amadeus:HotelGuest ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/rooms> ;
    sh:name "rooms" ;
    sh:description "Rooms" ;
    sh:node amadeus:HotelRoomSelectionShape ;
    sh:class amadeus:HotelRoomSelection ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/payment> ;
    sh:name "payment" ;
    sh:description "Payment information" ;
    sh:node amadeus:HotelOrderPaymentShape ;
    sh:class amadeus:HotelOrderPayment ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/remarks> ;
    sh:name "remarks" ;
    sh:description "Remarks" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarksShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data/travelAgent> ;
    sh:name "travel agent" ;
    sh:description "Travel agent information" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgentShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Remarks
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarksShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data.remarks/general> ;
    sh:name "general" ;
    sh:description "General remarks" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks/generalShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks/general> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for General
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks/generalShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/remarks/general> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data.remarks.general/text> ;
    sh:name "text" ;
    sh:description "Remark text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Travel Agent
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgentShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data.travelAgent/contact> ;
    sh:name "contact" ;
    sh:description "Travel agent contact" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent/contactShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent/contact> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] .

# Shape for Contact
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent/contactShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelOrderRequest/data/travelAgent/contact> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelOrderRequest.data.travelAgent.contact/email> ;
    sh:name "email" ;
    sh:description "Email" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Payment Card
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCardShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard/paymentCardInfo> ;
    sh:name "payment card info" ;
    sh:description "Payment card details" ;
    sh:node <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard/paymentCardInfoShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard/paymentCardInfo> ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard/cardOwnerType> ;
    sh:name "card owner type" ;
    sh:description "Card owner type" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard/VCC> ;
    sh:name "vcc" ;
    sh:description "Is virtual credit card" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Payment Card Info
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard/paymentCardInfoShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.HotelPaymentOutput/paymentCard/paymentCardInfo> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard.paymentCardInfo/vendorCode> ;
    sh:name "vendor code" ;
    sh:description "Card vendor code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard.paymentCardInfo/holderName> ;
    sh:name "holder name" ;
    sh:description "Cardholder name" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard.paymentCardInfo/cardNumber> ;
    sh:name "card number" ;
    sh:description "Card number (masked)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.HotelPaymentOutput.paymentCard.paymentCardInfo/expiryDate> ;
    sh:name "expiry date" ;
    sh:description "Expiry date" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Self
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Location/selfShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Location/self> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location.self/href> ;
    sh:name "href" ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location.self/methods> ;
    sh:name "methods" ;
    sh:datatype xsd:string ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Location.self/count> ;
    sh:name "count" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PrepayPolicy/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PrepayPolicy/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PrepayPolicy.description/lang> ;
    sh:name "lang" ;
    sh:description "Language" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Destination
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/destinationShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/destination> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis.destination/iataCode> ;
    sh:name "iata code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Origin
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/originShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceAnalysis/origin> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceAnalysis.origin/iataCode> ;
    sh:name "iata code" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] .

# Shape for Average
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceVariations/averageShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.PriceVariations/average> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.PriceVariations.average/base> ;
    sh:name "base" ;
    sh:description "Base average" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Description
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Room/descriptionShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Room/description> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Room.description/text> ;
    sh:name "text" ;
    sh:description "Description text" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Room.description/lang> ;
    sh:name "lang" ;
    sh:description "Language code (BCP-47)" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Shape for Additional Information
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SearchCriteria/additionalInformationShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SearchCriteria/additionalInformation> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria.additionalInformation/chargeableCheckedBags> ;
    sh:name "chargeable checked bags" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SearchCriteria.additionalInformation/brandedFares> ;
    sh:name "branded fares" ;
    sh:datatype xsd:boolean ;
    sh:maxCount 1 ;
  ] .

# Shape for Coordinates
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Seat/coordinatesShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.Seat/coordinates> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat.coordinates/x> ;
    sh:name "x" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Seat.coordinates/y> ;
    sh:name "y" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Coordinates
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatFacility/coordinatesShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatFacility/coordinates> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility.coordinates/x> ;
    sh:name "x" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatFacility.coordinates/y> ;
    sh:name "y" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] .

# Shape for Deck Configuration
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatMapDeck/deckConfigurationShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatMapDeck/deckConfiguration> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/width> ;
    sh:name "width" ;
    sh:description "Width in seats" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/length> ;
    sh:name "length" ;
    sh:description "Length in rows" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/startSeatRow> ;
    sh:name "start seat row" ;
    sh:description "Start seat row" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/endSeatRow> ;
    sh:name "end seat row" ;
    sh:description "End seat row" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/startWingSeatRow> ;
    sh:name "start wing seat row" ;
    sh:description "Start wing row" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/endWingSeatRow> ;
    sh:name "end wing seat row" ;
    sh:description "End wing row" ;
    sh:datatype xsd:int ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatMapDeck.deckConfiguration/exitRowsX> ;
    sh:name "exit rows x" ;
    sh:description "Exit rows" ;
    sh:datatype xsd:int ;
  ] .

# Shape for Price
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatTravelerPricing/priceShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.SeatTravelerPricing/price> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing.price/currency> ;
    sh:name "currency" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
    sh:minLength 3 ;
    sh:maxLength 3 ;
    sh:pattern "^[A-Z]{3}$" ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing.price/total> ;
    sh:name "total" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing.price/base> ;
    sh:name "base" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.SeatTravelerPricing.price/taxes> ;
    sh:name "taxes" ;
    sh:node amadeus:TaxShape ;
    sh:class amadeus:Tax ;
    sh:nodeKind sh:BlankNodeOrIRI ;
  ] .

# Shape for Delays
<https://relay.inferal.com/ontology/amadeus/inline/Amadeus.TimingDetail/delaysShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/inline/Amadeus.TimingDetail/delays> ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/property/Amadeus.TimingDetail.delays/duration> ;
    sh:name "duration" ;
    sh:description "Duration" ;
    sh:datatype xsd:string ;
    sh:maxCount 1 ;
  ] .

# Generated Record container shape for Amadeus.Dictionaries.aircraft
<https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/aircraft> ] ;
    sh:class amadeus:Dictionaries ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/entry> ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/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/amadeus/record/Amadeus.Dictionaries/aircraft/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/key> ?key . ?right <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/aircraft/key> ?key . }"""
  ] .

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

# Generated Record container shape for Amadeus.Dictionaries.carriers
<https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/carriers> ] ;
    sh:class amadeus:Dictionaries ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/entry> ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/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/amadeus/record/Amadeus.Dictionaries/carriers/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/key> ?key . ?right <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/carriers/key> ?key . }"""
  ] .

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

# Generated Record container shape for Amadeus.Dictionaries.currencies
<https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/currencies> ] ;
    sh:class amadeus:Dictionaries ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/entry> ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/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/amadeus/record/Amadeus.Dictionaries/currencies/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/key> ?key . ?right <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/currencies/key> ?key . }"""
  ] .

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

# Generated Record container shape for Amadeus.Dictionaries.locations
<https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/ContainerShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/Container> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/amadeus/property/Amadeus.Dictionaries/locations> ] ;
    sh:class amadeus:Dictionaries ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/entry> ;
    sh:node <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/EntryShape> ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/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/amadeus/record/Amadeus.Dictionaries/locations/entry> ?left, ?right . FILTER(?left != ?right) ?left <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/key> ?key . ?right <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/key> ?key . }"""
  ] .

# Generated Record entry shape for Amadeus.Dictionaries.locations
<https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/EntryShape> a sh:NodeShape ;
  sh:targetClass <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/Entry> ;
  sh:property [
    sh:path [ sh:inversePath <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/entry> ] ;
    sh:class <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/Container> ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/key> ;
    sh:datatype xsd:string ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] ;
  sh:property [
    sh:path <https://relay.inferal.com/ontology/amadeus/record/Amadeus.Dictionaries/locations/value> ;
    sh:node amadeus:LocationDictionaryEntryShape ;
    sh:class amadeus:LocationDictionaryEntry ;
    sh:nodeKind sh:BlankNodeOrIRI ;
    sh:minCount 1 ;
    sh:maxCount 1
  ] .
