git.iko.soy/typeable/xsd-parser
on master help sign in
functionality bump
5d0f008Denis Redozubov
src/Text/XSD/Internal.hs+79−12
@@ -3,8 +3,9 @@
3-- | A subset of XSD specification.
3-- | A subset of XSD specification.
4module Text.XSD.Internal where
4module Text.XSD.Internal where
5
5
6+import Control.Exception
6import Control.Lens
7import Control.Lens
7−import Data.Text
8+import Data.Text as T
8import Data.Map as M
9import Data.Map as M
9
10
10
11
@@ -15,9 +16,25 @@ data Datatype
15 | TypeSimple SimpleType
16 | TypeSimple SimpleType
16 deriving (Show, Eq)
17 deriving (Show, Eq)
17
18
18−data ComplexType = ComplexType (Maybe Text) ModelGroupSchema [Element]
19+data ComplexType
20+ = ComplexType (Maybe Text) [Attribute] (Maybe ModelGroupSchema)
19 deriving (Show, Eq)
21 deriving (Show, Eq)
20
22
23+data Attribute = Attribute Text SimpleType UseProp
24+ deriving (Show, Eq)
25+
26+data UseProp
27+ = Optional -- this is the default if missing in xsd
28+ | Prohibited
29+ | Required
30+ deriving (Show, Eq)
31+
32+fromUsePropStr :: Text -> Maybe UseProp
33+fromUsePropStr "optional" = Just $ Optional
34+fromUsePropStr "required" = Just $ Required
35+fromUsePropStr "prohibited" = Just $ Prohibited
36+fromUsePropStr _ = Nothing
37+
21data DatatypeRef
38data DatatypeRef
22 = InlineComplex Datatype
39 = InlineComplex Datatype
23 | DatatypeRef Text
40 | DatatypeRef Text
@@ -25,16 +42,63 @@ data DatatypeRef
25
42
26-- | Based on https://www.w3.org/TR/2012/REC-xmlschema11-1-20120405/structures.html#Model_Group_details
43-- | Based on https://www.w3.org/TR/2012/REC-xmlschema11-1-20120405/structures.html#Model_Group_details
27data ModelGroupSchema
44data ModelGroupSchema
28− = CTSequence
45+ = CTSequence [Element]
29− | CTChoice
46+ | CTChoice [Element]
30− | CTAll
47+ | CTAll [Element]
31 deriving (Show, Eq)
48 deriving (Show, Eq)
32
49
50+fromSimpleTypeStr :: Text -> Either String SimpleAtomicType
51+fromSimpleTypeStr "anyURI" = Right $ STAnyURI
52+fromSimpleTypeStr "base64Binary" = Right $ STBase64Binary
53+fromSimpleTypeStr "boolean" = Right $ STBoolean
54+fromSimpleTypeStr "date" = Right $ STDate
55+fromSimpleTypeStr "datetime" = Right $ STDateTime
56+fromSimpleTypeStr "dateTimeStamp" = Right $ STDateTimeStamp
57+fromSimpleTypeStr "decimal" = Right $ STDecimal DTDecimal
58+fromSimpleTypeStr "integer" = Right $ STDecimal DTInteger
59+fromSimpleTypeStr "long" = Right $ STDecimal DTLong
60+fromSimpleTypeStr "int" = Right $ STDecimal DTInt
61+fromSimpleTypeStr "short" = Right $ STDecimal DTShort
62+fromSimpleTypeStr "byte" = Right $ STDecimal DTByte
63+fromSimpleTypeStr "nonNegativeInteger" = Right $ STDecimal DTNonNegativeInteger
64+fromSimpleTypeStr "positiveInteger" = Right $ STDecimal DTPositiveInteger
65+fromSimpleTypeStr "unsignedLong" = Right $ STDecimal DTUnsignedLong
66+fromSimpleTypeStr "unsignedInt" = Right $ STDecimal DTUnsignedInt
67+fromSimpleTypeStr "unsignedShort" = Right $ STDecimal DTUnsignedShort
68+fromSimpleTypeStr "unsignedByte" = Right $ STDecimal DTUnsignedByte
69+fromSimpleTypeStr "nonPositiveInteger" = Right $ STDecimal DTNonPositiveInteger
70+fromSimpleTypeStr "negativeInteger" = Right $ STDecimal DTNegativeInteger
71+fromSimpleTypeStr "float" = Right $ STFloat
72+fromSimpleTypeStr "gDay" = Right $ STGDay
73+fromSimpleTypeStr "gMonth" = Right $ STGMonth
74+fromSimpleTypeStr "gMonthDay" = Right $ STGMonthDay
75+fromSimpleTypeStr "gYear" = Right $ STGYear
76+fromSimpleTypeStr "gYearMonth" = Right $ STGYearMonth
77+fromSimpleTypeStr "hexBinary" = Right $ STHexBinary
78+fromSimpleTypeStr "NOTATION" = Right $ STNOTATION
79+fromSimpleTypeStr "QName" = Right $ STQName
80+fromSimpleTypeStr "string" = Right $ STString StrString
81+fromSimpleTypeStr "normalizedString" = Right $ STString StrNormalizedString
82+fromSimpleTypeStr "token" = Right $ STString StrToken
83+fromSimpleTypeStr "language" = Right $ STString StrLanguage
84+fromSimpleTypeStr "Name" = Right $ STString StrName
85+fromSimpleTypeStr "NCName" = Right $ STString StrNCName
86+fromSimpleTypeStr "ENTITY" = Right $ STString StrENTITY
87+fromSimpleTypeStr "ID" = Right $ STString StrID
88+fromSimpleTypeStr "IDREF" = Right $ STString StrIDREF
89+fromSimpleTypeStr "NMTOKEN" = Right $ STString StrNMTOKEN
90+fromSimpleTypeStr "time" = Right $ STTime
91+fromSimpleTypeStr t = Left $ "unsupported type: " <> T.unpack t
92+
33-- | ENTITIES, IDREFS and NMTOKENS are not supported right now.
93-- | ENTITIES, IDREFS and NMTOKENS are not supported right now.
34data SimpleType
94data SimpleType
35− = STAtomic SimpleAtomicType
95+ = STAtomic SimpleAtomicType [Restriction]
36− | STUnion [SimpleType] -- special - xs:union
96+ -- STUnion [SimpleType] -- special - xs:union
37− | STList [SimpleType] -- special - xs:list
97+ -- STList [SimpleType] -- special - xs:list
98+ deriving (Show, Eq)
99+
100+data Restriction
101+ = Enumeration [Text]
38 deriving (Show, Eq)
102 deriving (Show, Eq)
39
103
40data SimpleAtomicType
104data SimpleAtomicType
@@ -43,6 +107,7 @@ data SimpleAtomicType
43 | STBoolean
107 | STBoolean
44 | STDate
108 | STDate
45 | STDateTime
109 | STDateTime
110+ | STDateTimeStamp
46 | STDecimal DecimalType
111 | STDecimal DecimalType
47 | STDouble
112 | STDouble
48 | STDuration DurationType
113 | STDuration DurationType
@@ -54,17 +119,18 @@ data SimpleAtomicType
54 | STGYearMonth
119 | STGYearMonth
55 | STHexBinary
120 | STHexBinary
56 | STNOTATION
121 | STNOTATION
57− | STQName QName
122+ | STQName
58 | STString StringType
123 | STString StringType
59 | STTime
124 | STTime
60 deriving (Show, Eq)
125 deriving (Show, Eq)
61
126
62data StringType
127data StringType
128+ = StrString
63− = StrNormalizedString
129+ | StrNormalizedString
64 | StrToken
130 | StrToken
65 | StrLanguage
131 | StrLanguage
66 | StrName
132 | StrName
67− | StrNCNAME
133+ | StrNCName
68 | StrENTITY
134 | StrENTITY
69 | StrID
135 | StrID
70 | StrIDREF
136 | StrIDREF
@@ -74,7 +140,8 @@ data StringType
74data DurationType = DayTimeDuration | YearMonthDuration deriving (Show, Eq)
140data DurationType = DayTimeDuration | YearMonthDuration deriving (Show, Eq)
75
141
76data DecimalType
142data DecimalType
143+ = DTDecimal
77− = DTInteger
144+ | DTInteger
78 | DTLong
145 | DTLong
79 | DTInt
146 | DTInt
80 | DTShort
147 | DTShort
src/Text/XSD/Parser.hs+61−22
@@ -6,8 +6,10 @@ import Control.Monad.Except (throwError)
6import Control.Monad.Trans.Reader
6import Control.Monad.Trans.Reader
7import Control.Monad.Writer.CPS
7import Control.Monad.Writer.CPS
8import Data.ByteString.Lazy
8import Data.ByteString.Lazy
9−import Data.Foldable
9+import Data.Foldable as F
10+-- import Data.Generics.Uniplate.Operations
10import Data.Map as M
11import Data.Map as M
12+import Debug.Trace
11import Data.Maybe
13import Data.Maybe
12import Data.Text as T
14import Data.Text as T
13import Prelude as P
15import Prelude as P
@@ -24,7 +26,7 @@ instance Exception XSDException
24type XSDMonad a = WriterT (M.Map Text Datatype) (Either SomeException) a
26type XSDMonad a = WriterT (M.Map Text Datatype) (Either SomeException) a
25
27
26parseXSD :: ParseSettings -> ByteString -> Either SomeException XSD
28parseXSD :: ParseSettings -> ByteString -> Either SomeException XSD
27−parseXSD ps bs = parseLBS ps bs >>= toXsd
29+parseXSD ps bs = parseLBS ps bs >>= fmap fst . toXsd
28
30
29-- Show is Meh
31-- Show is Meh
30throwXsd :: Show s => s -> XSDMonad a
32throwXsd :: Show s => s -> XSDMonad a
@@ -43,8 +45,9 @@ toElemsAndDatatypes cursor = do
43 elems <- traverse toElem (cursor $/ laxElement "element")
45 elems <- traverse toElem (cursor $/ laxElement "element")
44 datatypes <- traverse toComplexType (cursor $/ laxElement "complexType")
46 datatypes <- traverse toComplexType (cursor $/ laxElement "complexType")
45 for_ datatypes $ \case
47 for_ datatypes $ \case
48+ datatype@(ComplexType (Just name) _ _) ->
46− datatype@(ComplexType (Just name) _ _) -> tell (M.singleton name (TypeComplex datatype))
49+ tell (M.singleton name (TypeComplex datatype))
47− datatype@(ComplexType Nothing _ _) ->
50+ datatype@(ComplexType Nothing _ _) ->
48 throwXsd $ "unnamed type ref for datatype: " <> show datatype
51 throwXsd $ "unnamed type ref for datatype: " <> show datatype
49 pure elems
52 pure elems
50
53
@@ -101,14 +104,33 @@ toElem cursor = do
101
104
102toSimpleType :: Cursor -> XSDMonad SimpleType
105toSimpleType :: Cursor -> XSDMonad SimpleType
103toSimpleType cursor = do
106toSimpleType cursor = do
104− error "TODO: implement toSimpleType"
107+ let restrictionAxis = laxElement "restriction"
108+ if P.null (cursor $// restrictionAxis)
109+ then throwXsd $ "unsupported simpleType element: " <> show cursor
110+ else do
111+ childCursor <- maybeThrowXsd (safeHead $ cursor $// restrictionAxis)
112+ $ "Unexpected number of <restriction> tags in: " <> show cursor
113+ baseType <- maybeThrowXsd (safeHead $ childCursor $| attribute "base")
114+ $ "No base attribute provided for restriction tag in: " <> show cursor
115+ let
116+ enumValues = childCursor $// laxElement "enumeration" &/ attribute "value"
117+ -- only enumeration is supported now
118+ case fromSimpleTypeStr baseType of
119+ Left e -> throwXsd e
120+ Right simpleAtomicType ->
121+ pure $ STAtomic simpleAtomicType
122+ $ if P.null enumValues then [] else [Enumeration enumValues]
105
123
106-- | Takes a cursor to the 'xs:complexType' element.
124-- | Takes a cursor to the 'xs:complexType' element.
107toComplexType :: Cursor -> XSDMonad ComplexType
125toComplexType :: Cursor -> XSDMonad ComplexType
108toComplexType cursor = do
126toComplexType cursor = do
127+ let attributeAxis = laxElement "attribute"
109− let sequenceAxis = laxElement "sequence"
128+ let sequenceAxis = laxElement "sequence"
110− let choiceAxis = laxElement "choice"
129+ let choiceAxis = laxElement "choice"
111− let allAxis = laxElement "all"
130+ let allAxis = laxElement "all"
131+ -- attributes
132+ attrs <- traverse toAttribute (cursor $// attributeAxis)
133+ -- group model schemas
112 if P.null (cursor $// sequenceAxis)
134 if P.null (cursor $// sequenceAxis)
113 then if P.null (cursor $// choiceAxis)
135 then if P.null (cursor $// choiceAxis)
114 then if P.null (cursor $// allAxis)
136 then if P.null (cursor $// allAxis)
@@ -116,24 +138,41 @@ toComplexType cursor = do
116 <> show (safeHead $ cursor $// laxElement "complexType")
138 <> show (safeHead $ cursor $// laxElement "complexType")
117 else do
139 else do
118 childCursor <- maybeThrowXsd (safeHead $ cursor $// allAxis)
140 childCursor <- maybeThrowXsd (safeHead $ cursor $// allAxis)
119− $ "More than one xs:all tag in: "
141+ $ "Unexpected number of xs:all tags in: " <> show cursor
120− <> show (cursor $// laxElement "complexType")
121 let name = safeHead $ cursor $| attribute "name"
142 let name = safeHead $ cursor $| attribute "name"
122− ComplexType name CTAll <$> toElemsAndDatatypes childCursor
143+ ComplexType name attrs . Just . CTAll <$> toElemsAndDatatypes childCursor
123 else do
144 else do
124 childCursor <- maybeThrowXsd (safeHead $ cursor $// choiceAxis)
145 childCursor <- maybeThrowXsd (safeHead $ cursor $// choiceAxis)
125− $ "More than one xs:choice tag in: "
146+ $ "Unexpected number of xs:choice tags in: " <> show cursor
126− <> show (cursor $// laxElement "complexType")
127 let name = safeHead $ cursor $| attribute "name"
147 let name = safeHead $ cursor $| attribute "name"
128− ComplexType name CTChoice <$> toElemsAndDatatypes childCursor
148+ ComplexType name attrs . Just . CTChoice <$> toElemsAndDatatypes childCursor
129 else do
149 else do
130 childCursor <- maybeThrowXsd (safeHead $ cursor $// sequenceAxis)
150 childCursor <- maybeThrowXsd (safeHead $ cursor $// sequenceAxis)
131− $ "More than one xs:sequence tag in: "
151+ $ "Unexpected number of xs:sequence tags in: " <> show cursor
132− <> show (cursor $// laxElement "complexType")
133 let name = safeHead $ cursor $| attribute "name"
152 let name = safeHead $ cursor $| attribute "name"
134− ComplexType name CTSequence <$> toElemsAndDatatypes childCursor
153+ ComplexType name attrs . Just . CTSequence <$> toElemsAndDatatypes childCursor
135−
154+
155+toAttribute :: XML.Cursor -> XSDMonad Attribute
156+toAttribute cursor = do
157+ name <- maybeThrowXsd (safeHead $ cursor $| attribute "name")
158+ $ "No name attribute found in child <attribute> of: "
159+ <> show (cursor $| ancestor <=< ancestor)
160+ simpleType <- case safeHead $ cursor $| attribute "type" of
161+ Just simpleAtomicType -> case fromSimpleTypeStr simpleAtomicType of
162+ Left e -> throwXsd e
163+ Right simpleAtomicType -> pure $ STAtomic simpleAtomicType []
164+ Nothing -> do
165+ let simpleTypeCursor = safeHead $ cursor $// laxElement "simpleType"
166+ case simpleTypeCursor of
167+ Just st -> toSimpleType cursor
168+ Nothing -> throwXsd
169+ $ "No type attribute found in child <attribute> of: "
170+ <> show (cursor $| ancestor <=< ancestor)
171+ let
172+ useProp = case fromUsePropStr =<< safeHead (cursor $| attribute "use") of
173+ Just up -> up
174+ Nothing -> Optional
175+ pure $ Attribute name simpleType useProp
176+
136−toXsd :: Document -> Either SomeException XSD
177+toXsd :: Document -> Either SomeException (XSD, M.Map Text Datatype)
137−toXsd doc = do
138− (el, dt) <- runWriterT $ toSchema (fromDocument doc)
178+toXsd doc = runWriterT $ toSchema (fromDocument doc)
139− pure el
test/fixtures/enhanced_air_ticket.xsdnew file+1702
@@ -0,0 +1,1702 @@
1+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:spct="http://services.sabre.com/sp/common/simple/v3" xmlns:stlp="http://services.sabre.com/STL_Payload/v02_01" xmlns:ns1="http://services.sabre.com/sp/air/ticket/v1" targetNamespace="http://services.sabre.com/sp/air/ticket/v1" elementFormDefault="qualified">
2+ <import namespace="http://services.sabre.com/STL_Payload/v02_01" schemaLocation="built-ins/STL2_Payload_v02_01.xsd"/>
3+ <import namespace="http://services.sabre.com/sp/common/simple/v3" schemaLocation="SpCommonSimpleTypes_v3.xsd"/>
4+ <element name="AirTicketRQ">
5+ <complexType>
6+ <complexContent>
7+ <extension base="stlp:STL_Request_Payload">
8+ <sequence>
9+ <element name="DesignatePrinter" minOccurs="0">
10+ <complexType>
11+ <sequence>
12+ <element name="Printers" minOccurs="0">
13+ <complexType>
14+ <sequence>
15+ <element name="BagTag" minOccurs="0">
16+ <complexType>
17+ <attribute name="LNIATA" type="string" use="optional">
18+ <annotation>
19+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
20+ </annotation>
21+ </attribute>
22+ </complexType>
23+ </element>
24+ <element name="BoardingPass" minOccurs="0">
25+ <complexType>
26+ <attribute name="HostedCarrier" type="boolean" use="optional">
27+ <annotation>
28+ <documentation>"HostedCarrier" is used by airline customers to indicate that this request is for an airline-based boarding pass printer.</documentation>
29+ </annotation>
30+ </attribute>
31+ <attribute name="LNIATA" type="string" use="optional">
32+ <annotation>
33+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
34+ </annotation>
35+ </attribute>
36+ </complexType>
37+ </element>
38+ <element name="Hardcopy" minOccurs="0">
39+ <complexType>
40+ <attribute name="Spacing" use="optional">
41+ <annotation>
42+ <documentation>"Spacing" is used to specify the spacing, either 1, or 2.</documentation>
43+ </annotation>
44+ <simpleType>
45+ <restriction base="string">
46+ <enumeration value="1"/>
47+ <enumeration value="2"/>
48+ </restriction>
49+ </simpleType>
50+ </attribute>
51+ <attribute name="LNIATA" type="string" use="optional">
52+ <annotation>
53+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
54+ </annotation>
55+ </attribute>
56+ </complexType>
57+ </element>
58+ <element name="InvoiceItinerary" minOccurs="0">
59+ <complexType>
60+ <attribute name="LNIATA" type="string" use="optional">
61+ <annotation>
62+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
63+ </annotation>
64+ </attribute>
65+ </complexType>
66+ </element>
67+ <element name="ListLabel" minOccurs="0">
68+ <complexType>
69+ <attribute name="LNIATA" type="string" use="optional">
70+ <annotation>
71+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
72+ </annotation>
73+ </attribute>
74+ </complexType>
75+ </element>
76+ <element name="MiniItinerary" minOccurs="0">
77+ <complexType>
78+ <attribute name="LNIATA" type="string" use="optional">
79+ <annotation>
80+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
81+ </annotation>
82+ </attribute>
83+ </complexType>
84+ </element>
85+ <element name="Report" minOccurs="0">
86+ <complexType>
87+ <attribute name="LNIATA" type="string" use="optional">
88+ <annotation>
89+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
90+ </annotation>
91+ </attribute>
92+ </complexType>
93+ </element>
94+ <element name="Ticket" minOccurs="0">
95+ <complexType>
96+ <sequence>
97+ <element name="MiniItinerary" minOccurs="0">
98+ <complexType>
99+ <attribute name="LNIATA" type="string" use="optional">
100+ <annotation>
101+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
102+ </annotation>
103+ </attribute>
104+ </complexType>
105+ </element>
106+ <element name="Remote" minOccurs="0">
107+ <complexType>
108+ <attribute name="LNIATA" type="string" use="optional">
109+ <annotation>
110+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
111+ </annotation>
112+ </attribute>
113+ </complexType>
114+ </element>
115+ </sequence>
116+ <attribute name="CountryCode" type="string" use="optional"/>
117+ <attribute name="LNIATA" type="string" use="optional">
118+ <annotation>
119+ <documentation>"LNIATA" is used to specify a bag tag printer address.</documentation>
120+ </annotation>
121+ </attribute>
122+ </complexType>
123+ </element>
124+ </sequence>
125+ </complexType>
126+ </element>
127+ <element name="Profile" minOccurs="0">
128+ <complexType>
129+ <attribute name="Number" type="integer" use="optional">
130+ <annotation>
131+ <documentation>"Number" is used to specify a previously established printer number.</documentation>
132+ </annotation>
133+ </attribute>
134+ </complexType>
135+ </element>
136+ </sequence>
137+ </complexType>
138+ </element>
139+ <element name="Itinerary" minOccurs="1">
140+ <complexType>
141+ <attribute name="ID" use="required">
142+ <annotation>
143+ <documentation>"ID" is used to specify a record locator.</documentation>
144+ </annotation>
145+ <simpleType>
146+ <restriction base="string"/>
147+ </simpleType>
148+ </attribute>
149+ </complexType>
150+ </element>
151+ <element name="AccountingLines" minOccurs="0">
152+ <complexType>
153+ <sequence>
154+ <element name="Delete" minOccurs="0" maxOccurs="unbounded">
155+ <complexType>
156+ <attribute name="EndNumber" type="integer" use="optional">
157+ <annotation>
158+ <documentation>"EndNumber" when used with @Number to specify a range of accounting lines to delete.</documentation>
159+ </annotation>
160+ </attribute>
161+ <attribute name="Number" type="integer" use="required">
162+ <annotation>
163+ <documentation>"Number" is used to specify particular accounting lines.</documentation>
164+ </annotation>
165+ </attribute>
166+ </complexType>
167+ </element>
168+ </sequence>
169+ <attribute name="All" type="boolean" use="optional">
170+ <annotation>
171+ <documentation>"All" is used to delete all accounting lines, cannot combine with attribute None.</documentation>
172+ </annotation>
173+ </attribute>
174+ <attribute name="None" type="boolean" use="optional">
175+ <annotation>
176+ <documentation>"None" is used to indicate not to delete any of the accounting lines, cannot combine with "All" attribute.</documentation>
177+ </annotation>
178+ </attribute>
179+ </complexType>
180+ </element>
181+ <element name="Ticketing" minOccurs="1" maxOccurs="99">
182+ <complexType>
183+ <sequence>
184+ <element name="FlightQualifiers" minOccurs="0">
185+ <complexType>
186+ <sequence>
187+ <element name="VendorPrefs" minOccurs="0">
188+ <complexType>
189+ <sequence>
190+ <element name="Airline">
191+ <complexType>
192+ <attribute name="Code" type="string" use="required">
193+ <annotation>
194+ <documentation>"Code" is used to specify a particular vendor code.</documentation>
195+ </annotation>
196+ </attribute>
197+ </complexType>
198+ </element>
199+ </sequence>
200+ </complexType>
201+ </element>
202+ </sequence>
203+ </complexType>
204+ </element>
205+ <element name="FOP_Qualifiers" minOccurs="0">
206+ <complexType>
207+ <sequence>
208+ <element name="BasicFOP" minOccurs="0">
209+ <annotation>
210+ <documentation>BasicFOP cannot combine with .../BSP_Ticketing, or .../SabreSonicTicketing, or .../Multiple CC_FOP.</documentation>
211+ </annotation>
212+ <complexType>
213+ <sequence>
214+ <element name="CC_Info" minOccurs="0">
215+ <complexType>
216+ <sequence>
217+ <element name="PaymentCard">
218+ <complexType>
219+ <attribute name="Code" type="string" use="optional">
220+ <annotation>
221+ <documentation>"Code" is used to specify a credit card vendor code.</documentation>
222+ </annotation>
223+ </attribute>
224+ <attribute name="CardSecurityCode" type="string" use="optional">
225+ <annotation>
226+ <documentation>"CardSecurityCode" is used to specify a credit card Card Security Code number.</documentation>
227+ </annotation>
228+ </attribute>
229+ <attribute name="ExpireDate" type="spct:expireDate" use="optional">
230+ <annotation>
231+ <documentation>"ExpireDate" is used to specify a credit card expiration date, follows this format: YYYY-MM.</documentation>
232+ </annotation>
233+ </attribute>
234+ <attribute name="ExtendedPayment" type="integer" use="optional">
235+ <annotation>
236+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
237+ </annotation>
238+ </attribute>
239+ <attribute name="ManualApprovalCode" type="string" use="optional">
240+ <annotation>
241+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
242+ </annotation>
243+ </attribute>
244+ <attribute name="Number" type="integer" use="optional">
245+ <annotation>
246+ <documentation>"Number" is used to specify a credit card number.</documentation>
247+ </annotation>
248+ </attribute>
249+ </complexType>
250+ </element>
251+ </sequence>
252+ <attribute name="Suppress" type="boolean" use="optional">
253+ <annotation>
254+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
255+ </annotation>
256+ </attribute>
257+ </complexType>
258+ </element>
259+ </sequence>
260+ <attribute name="Reference" type="integer" use="optional"/>
261+ <attribute name="Type" type="string" use="optional">
262+ <annotation>
263+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA," (cash) "CK," (check) "CQ," (cheque). If utilizing a credit card please omit @Type, and populate the .../CC_Info child node.</documentation>
264+ </annotation>
265+ </attribute>
266+ <attribute name="Virtual" type="string" use="optional"/>
267+ </complexType>
268+ </element>
269+ <element name="BSP_Ticketing" minOccurs="0">
270+ <complexType>
271+ <sequence>
272+ <element name="MultipleFOP" minOccurs="0">
273+ <annotation>
274+ <documentation>MultipleFOP cannot combine with .../MultipleMiscFOP, or .../PayLaterPlan</documentation>
275+ </annotation>
276+ <complexType>
277+ <sequence>
278+ <element name="Fare">
279+ <complexType>
280+ <attribute name="Amount" type="string" use="required">
281+ <annotation>
282+ <documentation>"Amount" is used to specify the amount to be applied to the second FOP.</documentation>
283+ </annotation>
284+ </attribute>
285+ </complexType>
286+ </element>
287+ <element name="FOP_One">
288+ <complexType>
289+ <sequence>
290+ <element name="CC_Info" minOccurs="0">
291+ <complexType>
292+ <sequence>
293+ <element name="PaymentCard">
294+ <complexType>
295+ <attribute name="Code" type="string" use="required">
296+ <annotation>
297+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
298+ </annotation>
299+ </attribute>
300+ <attribute name="CardSecurityCode" type="string" use="optional">
301+ <annotation>
302+ <documentation>"CardSecurityCode" is used to specify a credit card Card Security Code number.</documentation>
303+ </annotation>
304+ </attribute>
305+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
306+ <annotation>
307+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM.</documentation>
308+ </annotation>
309+ </attribute>
310+ <attribute name="ExtendedPayment" type="integer" use="optional">
311+ <annotation>
312+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
313+ </annotation>
314+ </attribute>
315+ <attribute name="ManualApprovalCode" type="string" use="optional">
316+ <annotation>
317+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
318+ </annotation>
319+ </attribute>
320+ <attribute name="ManualOBFee" type="string" use="optional">
321+ <annotation>
322+ <documentation>"ManualOBFee" is used to indicate that the manual OB fee should be associated to the card. A manual OB fee can ONLY be added to a ticketing entry that references a PQ that has the PRICE-MANUAL tag at the bottom of the *PQ</documentation>
323+ </annotation>
324+ </attribute>
325+ <attribute name="Number" type="integer" use="required">
326+ <annotation>
327+ <documentation>"Number" is used to specify the credit card number.</documentation>
328+ </annotation>
329+ </attribute>
330+ </complexType>
331+ </element>
332+ </sequence>
333+ <attribute name="Suppress" type="boolean" use="optional">
334+ <annotation>
335+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
336+ </annotation>
337+ </attribute>
338+ </complexType>
339+ </element>
340+ </sequence>
341+ <attribute name="Type" type="string" use="optional">
342+ <annotation>
343+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA,"CK," or "CQ." If utilizing a credit card please omit @Type, and populate the .../CC_Info child node.</documentation>
344+ </annotation>
345+ </attribute>
346+ </complexType>
347+ </element>
348+ <element name="FOP_Two">
349+ <complexType>
350+ <sequence>
351+ <element name="CC_Info" minOccurs="0">
352+ <complexType>
353+ <sequence>
354+ <element name="PaymentCard">
355+ <complexType>
356+ <attribute name="Code" type="string" use="required">
357+ <annotation>
358+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
359+ </annotation>
360+ </attribute>
361+ <attribute name="CardSecurityCode" type="string" use="optional">
362+ <annotation>
363+ <documentation>"CardSecurityCode" is used to specify a credit card Card Security Code number.</documentation>
364+ </annotation>
365+ </attribute>
366+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
367+ <annotation>
368+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM.</documentation>
369+ </annotation>
370+ </attribute>
371+ <attribute name="ExtendedPayment" type="integer" use="optional">
372+ <annotation>
373+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
374+ </annotation>
375+ </attribute>
376+ <attribute name="ManualApprovalCode" type="string" use="optional">
377+ <annotation>
378+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
379+ </annotation>
380+ </attribute>
381+ <attribute name="ManualOBFee" type="string" use="optional">
382+ <annotation>
383+ <documentation>b"ManualOBFee" is used to indicate that the manual OB fee should be associated to the card. A manual OB fee can ONLY be added to a ticketing entry that references a PQ that has the PRICE-MANUAL tag at the bottom of the *PQ</documentation>
384+ </annotation>
385+ </attribute>
386+ <attribute name="Number" type="integer" use="required">
387+ <annotation>
388+ <documentation>"Number" is used to specify the credit card number.</documentation>
389+ </annotation>
390+ </attribute>
391+ </complexType>
392+ </element>
393+ </sequence>
394+ <attribute name="Suppress" type="boolean" use="optional">
395+ <annotation>
396+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
397+ </annotation>
398+ </attribute>
399+ </complexType>
400+ </element>
401+ </sequence>
402+ <attribute name="Type" type="string" use="optional">
403+ <annotation>
404+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA,"CK," or "CQ." If utilizing a credit card please omit @Type, and populate the .../CC_Info child node.</documentation>
405+ </annotation>
406+ </attribute>
407+ </complexType>
408+ </element>
409+ <element name="Taxes" minOccurs="0">
410+ <complexType>
411+ <sequence>
412+ <element name="Tax" maxOccurs="3">
413+ <complexType>
414+ <attribute name="Amount" type="string" use="required">
415+ <annotation>
416+ <documentation>"Amount" is used to specify the tax amount.</documentation>
417+ </annotation>
418+ </attribute>
419+ <attribute name="TaxCode" type="string" use="required">
420+ <annotation>
421+ <documentation>"TaxCode" is used to specify the tax code.</documentation>
422+ </annotation>
423+ </attribute>
424+ </complexType>
425+ </element>
426+ </sequence>
427+ </complexType>
428+ </element>
429+ </sequence>
430+ </complexType>
431+ </element>
432+ <element name="MultipleMiscFOP" minOccurs="0">
433+ <annotation>
434+ <documentation>MultipleMiscFOP cannot combine with .../MultipleFOP, or .../PayLaterPlan.</documentation>
435+ </annotation>
436+ <complexType>
437+ <sequence>
438+ <element name="Fare">
439+ <complexType>
440+ <attribute name="Amount" type="string" use="required">
441+ <annotation>
442+ <documentation>"Amount" is used to specify the fare amount to be applied to the second FOP.</documentation>
443+ </annotation>
444+ </attribute>
445+ </complexType>
446+ </element>
447+ <element name="FOP_One">
448+ <complexType>
449+ <sequence>
450+ <element name="CC_Info" minOccurs="0">
451+ <complexType>
452+ <sequence>
453+ <element name="PaymentCard">
454+ <complexType>
455+ <attribute name="Code" type="string" use="required">
456+ <annotation>
457+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
458+ </annotation>
459+ </attribute>
460+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
461+ <annotation>
462+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM.</documentation>
463+ </annotation>
464+ </attribute>
465+ <attribute name="ExtendedPayment" type="integer" use="optional">
466+ <annotation>
467+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
468+ </annotation>
469+ </attribute>
470+ <attribute name="ManualApprovalCode" type="string" use="optional">
471+ <annotation>
472+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
473+ </annotation>
474+ </attribute>
475+ <attribute name="Number" type="integer" use="required">
476+ <annotation>
477+ <documentation>"Number" is used to specify the credit card number.</documentation>
478+ </annotation>
479+ </attribute>
480+ </complexType>
481+ </element>
482+ </sequence>
483+ <attribute name="Suppress" type="boolean" use="optional">
484+ <annotation>
485+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
486+ </annotation>
487+ </attribute>
488+ </complexType>
489+ </element>
490+ </sequence>
491+ <attribute name="Type" type="string" use="optional">
492+ <annotation>
493+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA,"CK," or "CQ." If utilizing a credit card please omit @Type, and populate the .../CC_Info child node.</documentation>
494+ </annotation>
495+ </attribute>
496+ </complexType>
497+ </element>
498+ <element name="FOP_Two">
499+ <complexType>
500+ <sequence>
501+ <element name="ExtendedPayment" minOccurs="0">
502+ <complexType>
503+ <attribute name="NumMonths" type="integer" use="required"/>
504+ </complexType>
505+ </element>
506+ </sequence>
507+ <attribute name="Type" type="string" use="required"/>
508+ </complexType>
509+ </element>
510+ <element name="Taxes" minOccurs="0">
511+ <complexType>
512+ <sequence>
513+ <element name="Tax" maxOccurs="2">
514+ <complexType>
515+ <attribute name="Amount" type="string" use="required">
516+ <annotation>
517+ <documentation>"Amount" is used to specify the tax amount.</documentation>
518+ </annotation>
519+ </attribute>
520+ <attribute name="TaxCode" type="string" use="required">
521+ <annotation>
522+ <documentation>"TaxCode" is used to specify the tax code.</documentation>
523+ </annotation>
524+ </attribute>
525+ </complexType>
526+ </element>
527+ </sequence>
528+ </complexType>
529+ </element>
530+ </sequence>
531+ </complexType>
532+ </element>
533+ <element name="PayLaterPlan" minOccurs="0">
534+ <annotation>
535+ <documentation>"PayLaterPlan" is only applicable to Brazil, cannot combine with MultipleFOP, or MultipleMiscFOP.</documentation>
536+ </annotation>
537+ <complexType>
538+ <sequence>
539+ <element name="Fare">
540+ <complexType>
541+ <attribute name="Amount" type="string" use="required">
542+ <annotation>
543+ <documentation>"Amount" is used to specify the remaining fare amount.</documentation>
544+ </annotation>
545+ </attribute>
546+ </complexType>
547+ </element>
548+ <element name="FOP">
549+ <complexType>
550+ <sequence>
551+ <element name="CC_Info" minOccurs="0">
552+ <complexType>
553+ <sequence>
554+ <element name="PaymentCard">
555+ <complexType>
556+ <attribute name="Code" type="string" use="required">
557+ <annotation>
558+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
559+ </annotation>
560+ </attribute>
561+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
562+ <annotation>
563+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM</documentation>
564+ </annotation>
565+ </attribute>
566+ <attribute name="ManualApprovalCode" type="string" use="optional">
567+ <annotation>
568+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
569+ </annotation>
570+ </attribute>
571+ <attribute name="Number" type="integer" use="required">
572+ <annotation>
573+ <documentation>"Number" is used to specify the credit card number.</documentation>
574+ </annotation>
575+ </attribute>
576+ </complexType>
577+ </element>
578+ </sequence>
579+ </complexType>
580+ </element>
581+ </sequence>
582+ <attribute name="Type" type="string" use="optional">
583+ <annotation>
584+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA,"CK," or "CQ." If utilizing a credit card please omit @Type, and populate the .../CC_Info child node.</documentation>
585+ </annotation>
586+ </attribute>
587+ </complexType>
588+ </element>
589+ <element name="Installment">
590+ <complexType>
591+ <attribute name="Count" type="string" use="required">
592+ <annotation>
593+ <documentation>"Count" is used to specify the number of installments.</documentation>
594+ </annotation>
595+ </attribute>
596+ <attribute name="PayLaterReferenceNumber" type="string" use="required">
597+ <annotation>
598+ <documentation>"PayLaterReferenceNumber" is used to specify the pay later reference number.</documentation>
599+ </annotation>
600+ </attribute>
601+ <attribute name="Value" type="string" use="required">
602+ <annotation>
603+ <documentation>"Value" is used to specify the value of the installments. Please note that decimals are not permitted.</documentation>
604+ </annotation>
605+ </attribute>
606+ </complexType>
607+ </element>
608+ </sequence>
609+ </complexType>
610+ </element>
611+ </sequence>
612+ </complexType>
613+ </element>
614+ <element name="MultipleCC_FOP" minOccurs="0">
615+ <annotation>
616+ <documentation>Multiple CC_FOP cannot combine with .../BSP_Ticketing, or .../SabreSonicTicketing</documentation>
617+ </annotation>
618+ <complexType>
619+ <sequence>
620+ <element name="Fare">
621+ <complexType>
622+ <attribute name="Amount" type="string" use="required">
623+ <annotation>
624+ <documentation>"Amount" is used to specify the amount to be applied to the second CC.</documentation>
625+ </annotation>
626+ </attribute>
627+ </complexType>
628+ </element>
629+ <element name="CC_One">
630+ <complexType>
631+ <sequence>
632+ <element name="CC_Info" minOccurs="0">
633+ <complexType>
634+ <sequence>
635+ <element name="PaymentCard">
636+ <complexType>
637+ <attribute name="Code" type="string" use="required">
638+ <annotation>
639+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
640+ </annotation>
641+ </attribute>
642+ <attribute name="CardSecurityCode" type="string" use="optional">
643+ <annotation>
644+ <documentation>"CardSecurityCode" is used to specify a credit card Card Security Code number.</documentation>
645+ </annotation>
646+ </attribute>
647+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
648+ <annotation>
649+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM</documentation>
650+ </annotation>
651+ </attribute>
652+ <attribute name="ExtendedPayment" type="integer" use="optional">
653+ <annotation>
654+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
655+ </annotation>
656+ </attribute>
657+ <attribute name="ManualApprovalCode" type="string" use="optional">
658+ <annotation>
659+ <documentation>"ManualApprovalCode" is used to specify a manual credit card if applicable.</documentation>
660+ </annotation>
661+ </attribute>
662+ <attribute name="ManualOBFee" type="string" use="optional">
663+ <annotation>
664+ <documentation>"ManualOBFee" is used to indicate that the manual OB fee should be associated to the card. A manual OB fee can ONLY be added to a ticketing entry that references a PQ that has the PRICE-MANUAL tag at the bottom of the *PQ</documentation>
665+ </annotation>
666+ </attribute>
667+ <attribute name="Number" type="integer" use="required">
668+ <annotation>
669+ <documentation>"Number" is used to specify the credit card number.</documentation>
670+ </annotation>
671+ </attribute>
672+ </complexType>
673+ </element>
674+ </sequence>
675+ <attribute name="Suppress" type="boolean" use="optional">
676+ <annotation>
677+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
678+ </annotation>
679+ </attribute>
680+ </complexType>
681+ </element>
682+ </sequence>
683+ </complexType>
684+ </element>
685+ <element name="CC_Two">
686+ <complexType>
687+ <sequence>
688+ <element name="CC_Info" minOccurs="0">
689+ <complexType>
690+ <sequence>
691+ <element name="PaymentCard">
692+ <complexType>
693+ <attribute name="Code" type="string" use="required">
694+ <annotation>
695+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
696+ </annotation>
697+ </attribute>
698+ <attribute name="CardSecurityCode" type="string" use="optional">
699+ <annotation>
700+ <documentation>"CardSecurityCode" is used to specify a credit card Card Security Code number.</documentation>
701+ </annotation>
702+ </attribute>
703+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
704+ <annotation>
705+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM</documentation>
706+ </annotation>
707+ </attribute>
708+ <attribute name="ExtendedPayment" type="integer" use="optional">
709+ <annotation>
710+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
711+ </annotation>
712+ </attribute>
713+ <attribute name="ManualApprovalCode" type="string" use="optional">
714+ <annotation>
715+ <documentation>"ManualApprovalCode" is used to specify a manual credit card if applicable.</documentation>
716+ </annotation>
717+ </attribute>
718+ <attribute name="ManualOBFee" type="string" use="optional">
719+ <annotation>
720+ <documentation>"ManualOBFee" is used to indicate that the manual OB fee should be associated to the card. A manual OB fee can ONLY be added to a ticketing entry that references a PQ that has the 'PRICE-MANUAL' tag at the bottom of the *PQ</documentation>
721+ </annotation>
722+ </attribute>
723+ <attribute name="Number" type="integer" use="required">
724+ <annotation>
725+ <documentation>"Number" is used to specify the credit card number.</documentation>
726+ </annotation>
727+ </attribute>
728+ </complexType>
729+ </element>
730+ </sequence>
731+ <attribute name="Suppress" type="boolean" use="optional">
732+ <annotation>
733+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
734+ </annotation>
735+ </attribute>
736+ </complexType>
737+ </element>
738+ </sequence>
739+ </complexType>
740+ </element>
741+ </sequence>
742+ </complexType>
743+ </element>
744+ <element name="SabreSonicTicketing" minOccurs="0">
745+ <annotation>
746+ <documentation>"SabreSonicTicketing" is only valid for SabreSonic-based airlines, cannot combine with .../BSP_Ticketing, or .../Multiple CC_FOP.</documentation>
747+ </annotation>
748+ <complexType>
749+ <sequence>
750+ <element name="BasicFOP" minOccurs="0">
751+ <complexType>
752+ <sequence>
753+ <element name="CC_Info" minOccurs="0">
754+ <complexType>
755+ <sequence>
756+ <element name="PaymentCard">
757+ <complexType>
758+ <attribute name="CardSecurityCode" type="integer" use="optional">
759+ <annotation>
760+ <documentation>"CardSecurityCode" is used to specify a credit card security code.</documentation>
761+ </annotation>
762+ </attribute>
763+ <attribute name="Code" type="string" use="required">
764+ <annotation>
765+ <documentation>"Code" is used to specify a credit card vendor code.</documentation>
766+ </annotation>
767+ </attribute>
768+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
769+ <annotation>
770+ <documentation>"ExpireDate" is used to specify a credit card expiration date, follows this format: YYYY-MM.</documentation>
771+ </annotation>
772+ </attribute>
773+ <attribute name="ExtendedPayment" type="integer" use="optional">
774+ <annotation>
775+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
776+ </annotation>
777+ </attribute>
778+ <attribute name="ManualApprovalCode" type="string" use="optional">
779+ <annotation>
780+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
781+ </annotation>
782+ </attribute>
783+ <attribute name="Number" type="integer" use="required">
784+ <annotation>
785+ <documentation>"Number" is used to specify a credit card number.</documentation>
786+ </annotation>
787+ </attribute>
788+ </complexType>
789+ </element>
790+ </sequence>
791+ <attribute name="Suppress" type="boolean" use="optional">
792+ <annotation>
793+ <documentation>"Suppress" is used to specify whether or not to suppress credit card information on an itinerary.</documentation>
794+ </annotation>
795+ </attribute>
796+ </complexType>
797+ </element>
798+ </sequence>
799+ <attribute name="ManualApprovalCode" type="string" use="optional">
800+ <annotation>
801+ <documentation>"ManualApprovalCode" is used to specify a manual approval code for non-credit card forms of payment.</documentation>
802+ </annotation>
803+ </attribute>
804+ <attribute name="Type" type="string" use="optional">
805+ <annotation>
806+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA," (cash) "CK," (check) "CQ," (cheque) "PT," "PTACA," (PTA cash) "PTAGTCK." (PTA agency check) or "PTCK" (PTA check). If utilizing a credit card please omit @Type, and populate the .../CC_Info child node, unless needing to specify a PTA credit card form of payment. For a PTA credit card form of payment the client should pass Type="PT" and populate the .../CC_Info child node with the relevant credit card information.</documentation>
807+ </annotation>
808+ </attribute>
809+ </complexType>
810+ </element>
811+ <element name="EnhancedMultipleFOP" minOccurs="0">
812+ <annotation>
813+ <documentation>EnhancedMultipleCC_FOP is only valid for SabreSonic-based airlines who have actived the enhanced multiple form of payment option, cannot combine with .../MultipleFOP.</documentation>
814+ </annotation>
815+ <complexType>
816+ <sequence>
817+ <element name="Fare">
818+ <complexType>
819+ <attribute name="Amount" type="string" use="required">
820+ <annotation>
821+ <documentation>"Amount" is used to specify the fare amount to be applied to the second FOP.</documentation>
822+ </annotation>
823+ </attribute>
824+ </complexType>
825+ </element>
826+ <element name="FOP_One">
827+ <complexType>
828+ <sequence>
829+ <element name="CC_Info" minOccurs="0">
830+ <complexType>
831+ <sequence>
832+ <element name="PaymentCard">
833+ <complexType>
834+ <attribute name="CardSecurityCode" type="string" use="optional">
835+ <annotation>
836+ <documentation>"CardSecurityCode" is used to specify a credit card security code.</documentation>
837+ </annotation>
838+ </attribute>
839+ <attribute name="Code" type="string" use="required">
840+ <annotation>
841+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
842+ </annotation>
843+ </attribute>
844+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
845+ <annotation>
846+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM.</documentation>
847+ </annotation>
848+ </attribute>
849+ <attribute name="ExtendedPayment" type="integer" use="optional">
850+ <annotation>
851+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
852+ </annotation>
853+ </attribute>
854+ <attribute name="ManualApprovalCode" type="string" use="optional">
855+ <annotation>
856+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
857+ </annotation>
858+ </attribute>
859+ <attribute name="Number" type="integer" use="required">
860+ <annotation>
861+ <documentation>"Number" is used to specify the credit card number.</documentation>
862+ </annotation>
863+ </attribute>
864+ </complexType>
865+ </element>
866+ </sequence>
867+ </complexType>
868+ </element>
869+ </sequence>
870+ <attribute name="Type" type="string" use="optional"/>
871+ </complexType>
872+ </element>
873+ <element name="FOP_Two">
874+ <complexType>
875+ <sequence>
876+ <element name="CC_Info" minOccurs="0">
877+ <complexType>
878+ <sequence>
879+ <element name="PaymentCard">
880+ <complexType>
881+ <attribute name="CardSecurityCode" type="string" use="optional">
882+ <annotation>
883+ <documentation>"CardSecurityCode" is used to specify a credit card security code.</documentation>
884+ </annotation>
885+ </attribute>
886+ <attribute name="Code" type="string" use="required">
887+ <annotation>
888+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
889+ </annotation>
890+ </attribute>
891+ <attribute name="ExpireDate" type="spct:expireDate" use="required">
892+ <annotation>
893+ <documentation>"ExpireDate" is used to specify the credit card expiration date, follows this format: YYYY-MM.</documentation>
894+ </annotation>
895+ </attribute>
896+ <attribute name="ExtendedPayment" type="integer" use="optional">
897+ <annotation>
898+ <documentation>"ExtendedPayment" is used to specify extended payment if applicable.</documentation>
899+ </annotation>
900+ </attribute>
901+ <attribute name="ManualApprovalCode" type="string" use="optional">
902+ <annotation>
903+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
904+ </annotation>
905+ </attribute>
906+ <attribute name="Number" type="integer" use="required">
907+ <annotation>
908+ <documentation>"Number" is used to specify the credit card number.</documentation>
909+ </annotation>
910+ </attribute>
911+ </complexType>
912+ </element>
913+ </sequence>
914+ </complexType>
915+ </element>
916+ </sequence>
917+ <attribute name="Type" type="string" use="optional"/>
918+ </complexType>
919+ </element>
920+ <element name="Taxes">
921+ <complexType>
922+ <sequence>
923+ <element name="Tax">
924+ <complexType>
925+ <attribute name="Amount" type="string" use="required">
926+ <annotation>
927+ <documentation>"Amount" is used to specify the tax amount.</documentation>
928+ </annotation>
929+ </attribute>
930+ <attribute name="TaxCode" type="string" use="required">
931+ <annotation>
932+ <documentation>"TaxCode" is used to specify the tax code.</documentation>
933+ </annotation>
934+ </attribute>
935+ </complexType>
936+ </element>
937+ </sequence>
938+ </complexType>
939+ </element>
940+ </sequence>
941+ </complexType>
942+ </element>
943+ <element name="MultipleFOP" minOccurs="0">
944+ <annotation>
945+ <documentation>MultipleFOP cannot combine with .../EnhancedMultipleFOP.</documentation>
946+ </annotation>
947+ <complexType>
948+ <sequence>
949+ <element name="Fare">
950+ <complexType>
951+ <attribute name="Amount" type="string" use="required">
952+ <annotation>
953+ <documentation>"Amount" is used to specify the fare amount to be applied to the second FOP.</documentation>
954+ </annotation>
955+ </attribute>
956+ </complexType>
957+ </element>
958+ <element name="FOP_One">
959+ <complexType>
960+ <sequence>
961+ <element name="CC_Info" minOccurs="0">
962+ <complexType>
963+ <sequence>
964+ <element name="PaymentCard">
965+ <complexType>
966+ <attribute name="Code" type="string" use="required">
967+ <annotation>
968+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
969+ </annotation>
970+ </attribute>
971+ <attribute name="ManualApprovalCode" type="string" use="optional">
972+ <annotation>
973+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
974+ </annotation>
975+ </attribute>
976+ <attribute name="Number" type="integer" use="required">
977+ <annotation>
978+ <documentation>"Number" is used to specify the credit card number.</documentation>
979+ </annotation>
980+ </attribute>
981+ </complexType>
982+ </element>
983+ </sequence>
984+ </complexType>
985+ </element>
986+ </sequence>
987+ <attribute name="Type" type="string" use="optional">
988+ <annotation>
989+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA," (cash) "CK," (check) "CQ," (cheque) "PT," "PTACA," (PTA cash) "PTAGTCK." (PTA agency check) or "PTCK" (PTA check). If utilizing a credit card please omit @Type, and populate the .../CC_Info child node, unless needing to specify a PTA credit card form of payment. For a PTA credit card form of payment the client should pass Type="PT" and populate the .../CC_Info child node with the relevant credit card information.</documentation>
990+ </annotation>
991+ </attribute>
992+ </complexType>
993+ </element>
994+ <element name="FOP_Two">
995+ <complexType>
996+ <sequence>
997+ <element name="CC_Info" minOccurs="0">
998+ <complexType>
999+ <sequence>
1000+ <element name="PaymentCard">
1001+ <complexType>
1002+ <attribute name="Code" type="string" use="required">
1003+ <annotation>
1004+ <documentation>"Code" is used to specify the credit card vendor code.</documentation>
1005+ </annotation>
1006+ </attribute>
1007+ <attribute name="ManualApprovalCode" type="string" use="optional">
1008+ <annotation>
1009+ <documentation>"ManualApprovalCode" is used to specify a manual credit card approval code if applicable.</documentation>
1010+ </annotation>
1011+ </attribute>
1012+ <attribute name="Number" type="integer" use="required">
1013+ <annotation>
1014+ <documentation>"Number" is used to specify the credit card number.</documentation>
1015+ </annotation>
1016+ </attribute>
1017+ </complexType>
1018+ </element>
1019+ </sequence>
1020+ </complexType>
1021+ </element>
1022+ </sequence>
1023+ <attribute name="Type" type="string" use="optional">
1024+ <annotation>
1025+ <documentation>"Type" is used to specify the payment type. Acceptable values are "CA,"CK," or "CQ." If utilizing a credit card please omit @Type, and populate the .../CCInfo child node.</documentation>
1026+ </annotation>
1027+ </attribute>
1028+ </complexType>
1029+ </element>
1030+ <element name="Taxes" minOccurs="0">
1031+ <complexType>
1032+ <sequence>
1033+ <element name="Tax">
1034+ <complexType>
1035+ <attribute name="Amount" type="string" use="required">
1036+ <annotation>
1037+ <documentation>"Amount" is used to specify the tax amount.</documentation>
1038+ </annotation>
1039+ </attribute>
1040+ <attribute name="TaxCode" type="string" use="required">
1041+ <annotation>
1042+ <documentation>"TaxCode" is used to specify the tax code.</documentation>
1043+ </annotation>
1044+ </attribute>
1045+ </complexType>
1046+ </element>
1047+ </sequence>
1048+ </complexType>
1049+ </element>
1050+ </sequence>
1051+ </complexType>
1052+ </element>
1053+ </sequence>
1054+ </complexType>
1055+ </element>
1056+ </sequence>
1057+ </complexType>
1058+ </element>
1059+ <element name="MiscQualifiers" minOccurs="0">
1060+ <complexType>
1061+ <sequence>
1062+ <element name="AirExtras" minOccurs="0" maxOccurs="unbounded">
1063+ <complexType>
1064+ <attribute name="EndNumber" type="integer" use="optional">
1065+ <annotation>
1066+ <documentation>"EndNumber" is used to specify the final EMD number when specifying a range.</documentation>
1067+ </annotation>
1068+ </attribute>
1069+ <attribute name="Number" type="integer" use="required">
1070+ <annotation>
1071+ <documentation>"Number" is used to specify and EMD number.</documentation>
1072+ </annotation>
1073+ </attribute>
1074+ </complexType>
1075+ </element>
1076+ <element name="BaggageAllowance" minOccurs="0">
1077+ <annotation>
1078+ <documentation>Cannot combine with PhaseIV.</documentation>
1079+ </annotation>
1080+ <complexType>
1081+ <attribute name="Number" type="string" use="optional">
1082+ <annotation>
1083+ <documentation>"Number" is used to specify the quantity of checked bags if applicable.</documentation>
1084+ </annotation>
1085+ </attribute>
1086+ <attribute name="Weight" type="string" use="optional">
1087+ <annotation>
1088+ <documentation>"Weight" is used to specify the weight in kilos of checked bags if applicable.</documentation>
1089+ </annotation>
1090+ </attribute>
1091+ </complexType>
1092+ </element>
1093+ <element name="Certificate" minOccurs="0" maxOccurs="2">
1094+ <complexType>
1095+ <attribute name="Number" type="string" use="required">
1096+ <annotation>
1097+ <documentation>"Number" is used to specify a ticket number. Please note that this qualifier is only applicable to Sabre Sonic-hosted carriers.</documentation>
1098+ </annotation>
1099+ </attribute>
1100+ </complexType>
1101+ </element>
1102+ <element name="Commission" minOccurs="0">
1103+ <complexType>
1104+ <attribute name="Amount" type="decimal" use="optional">
1105+ <annotation>
1106+ <documentation>"Amount" is used to specify the numeric amount of commission being claimed if applicable.</documentation>
1107+ </annotation>
1108+ </attribute>
1109+ <attribute name="Percent" type="decimal" use="optional">
1110+ <annotation>
1111+ <documentation>"Percent" is used to specify the precentage of commission being claimed if applicable.</documentation>
1112+ </annotation>
1113+ </attribute>
1114+ </complexType>
1115+ </element>
1116+ <element name="DateOfBirth" minOccurs="0">
1117+ <annotation>
1118+ <documentation>"DOB" is used to instruct the system to take the passenger's date of birth-related information from the SSR PNR field, and pass it into the host-based ticketing application. This is required for clients based in the Russian Federation.</documentation>
1119+ </annotation>
1120+ </element>
1121+ <element name="Endorsement" minOccurs="0">
1122+ <complexType>
1123+ <sequence>
1124+ <element name="Text" type="string"/>
1125+ </sequence>
1126+ <attribute name="Override" type="boolean" use="optional"/>
1127+ </complexType>
1128+ </element>
1129+ <element name="FutureTicket" minOccurs="0">
1130+ <complexType>
1131+ <sequence>
1132+ <element name="Line" maxOccurs="unbounded">
1133+ <annotation>
1134+ <documentation>"Line" and its associated attributes are used to issue tickets from specific FP lines.</documentation>
1135+ </annotation>
1136+ <complexType>
1137+ <attribute name="EndNumber" type="integer" use="optional"/>
1138+ <attribute name="NameNumber" type="string" use="optional"/>
1139+ <attribute name="Number" type="integer" use="required"/>
1140+ </complexType>
1141+ </element>
1142+ </sequence>
1143+ </complexType>
1144+ </element>
1145+ <element name="Invoice" minOccurs="0">
1146+ <annotation>
1147+ <documentation>"Invoice" is used to specify to print invoice at time of ticketing.</documentation>
1148+ </annotation>
1149+ <complexType>
1150+ <attribute name="Ind" type="boolean" use="optional"/>
1151+ <attribute name="ETReceipt" type="boolean" use="optional"/>
1152+ </complexType>
1153+ </element>
1154+ <element name="NeedPrint" minOccurs="0">
1155+ <annotation>
1156+ <documentation>Please note that only two of the three attributes can be set to true simultaneously.</documentation>
1157+ </annotation>
1158+ <complexType>
1159+ <attribute name="AuditorCoupon" type="boolean" use="required">
1160+ <annotation>
1161+ <documentation>"AuditorCoupon" is used to specify to print an auditor coupon. Please note that this qualifier is only applicable to Sabre Sonic-hosted carriers.</documentation>
1162+ </annotation>
1163+ </attribute>
1164+ <attribute name="Itinerary" type="boolean" use="required">
1165+ <annotation>
1166+ <documentation>"Itinerary" is used to specify to print an itinerary. Please note that this qualifier is only applicable to Sabre Sonic-hosted carriers.</documentation>
1167+ </annotation>
1168+ </attribute>
1169+ <attribute name="PassengerReceipt" type="boolean" use="required">
1170+ <annotation>
1171+ <documentation>"PassengerReceipt" is used to specify to print a passenger receipt. Please note that this qualifier is only applicable to Sabre Sonic-hosted carriers.</documentation>
1172+ </annotation>
1173+ </attribute>
1174+ </complexType>
1175+ </element>
1176+ <element name="NetRemit" minOccurs="0">
1177+ <complexType>
1178+ <attribute name="Amount" type="decimal" use="optional"/>
1179+ <attribute name="ContractAgreementCode" type="string" use="optional"/>
1180+ <attribute name="NetCreditAmount" type="decimal" use="optional"/>
1181+ <attribute name="ValueCode" type="string" use="optional"/>
1182+ </complexType>
1183+ </element>
1184+ <element name="Ticket" minOccurs="0">
1185+ <complexType>
1186+ <attribute name="Action" type="string" use="optional">
1187+ <annotation>
1188+ <documentation>"Action" is used to specify an action code. Please note that this qualifier is only applicable to Sabre Sonic-hosted carriers.</documentation>
1189+ </annotation>
1190+ </attribute>
1191+ <attribute name="Type" type="string" use="optional">
1192+ <annotation>
1193+ <documentation>"Type" is used to specify the type of ticket to issue. Acceptable values for Type: ETR = electronic ticket (default), EMD= Electronic Miscellaneous Document, XETR = paper ticket, VCR = paper ticket (for airline use only).</documentation>
1194+ </annotation>
1195+ </attribute>
1196+ </complexType>
1197+ </element>
1198+ <element name="TourCode" minOccurs="0">
1199+ <complexType>
1200+ <sequence>
1201+ <element name="SuppressFareReplaceWithBT" minOccurs="0">
1202+ <annotation>
1203+ <documentation>This is not applicable to ARC subscribers.</documentation>
1204+ </annotation>
1205+ <complexType>
1206+ <attribute name="Ind" type="boolean" use="required">
1207+ <annotation>
1208+ <documentation>"Ind" is used to specify to suppress the fare amount on the ticket and replace with BT.</documentation>
1209+ </annotation>
1210+ </attribute>
1211+ </complexType>
1212+ </element>
1213+ <element name="SuppressFareReplaceWithIT" minOccurs="0">
1214+ <complexType>
1215+ <attribute name="Ind" type="boolean" use="required">
1216+ <annotation>
1217+ <documentation>"Ind" is used to specify to suppress the fare amount on the ticket and replace with IT.</documentation>
1218+ </annotation>
1219+ </attribute>
1220+ </complexType>
1221+ </element>
1222+ <element name="SuppressIT" minOccurs="0">
1223+ <complexType>
1224+ <attribute name="Ind" type="boolean" use="required">
1225+ <annotation>
1226+ <documentation>"Ind" is used to specify to to suppress the IT in the tourcode box from printing.</documentation>
1227+ </annotation>
1228+ </attribute>
1229+ </complexType>
1230+ </element>
1231+ <element name="SuppressITSupressFare" minOccurs="0">
1232+ <complexType>
1233+ <attribute name="Ind" type="boolean" use="required">
1234+ <annotation>
1235+ <documentation>"Ind" is used to specify to specify to suppress IT from printing in the tour box on the ticket and to suppress fare amounts from printing on the ticket.</documentation>
1236+ </annotation>
1237+ </attribute>
1238+ </complexType>
1239+ </element>
1240+ <element name="Text" type="string" minOccurs="0"/>
1241+ </sequence>
1242+ </complexType>
1243+ </element>
1244+ </sequence>
1245+ </complexType>
1246+ </element>
1247+ <element name="PricingQualifiers" minOccurs="0">
1248+ <complexType>
1249+ <sequence>
1250+ <element name="Brand" minOccurs="0" maxOccurs="unbounded">
1251+ <annotation>
1252+ <documentation>"Brand" is used to specify a brand. Please note that it's not possible to request more than 1 brand for an entire journey, or for the same segment.</documentation>
1253+ </annotation>
1254+ <complexType>
1255+ <simpleContent>
1256+ <extension base="string">
1257+ <attribute name="RPH" type="integer" use="optional">
1258+ <annotation>
1259+ <documentation>"RPH" is used to match up with ".../ItineraryOptions/Segment".</documentation>
1260+ </annotation>
1261+ </attribute>
1262+ </extension>
1263+ </simpleContent>
1264+ </complexType>
1265+ </element>
1266+ <element name="FareFocusExclude" minOccurs="0">
1267+ <annotation>
1268+ <documentation>"FareFocusExclude" is used to exclude fare focus fares based on business rules of the agency. Please note that this qualifier cannot be combined with .../PriceQuote</documentation>
1269+ </annotation>
1270+ <complexType>
1271+ <attribute name="Ind" type="boolean" use="required"/>
1272+ </complexType>
1273+ </element>
1274+ <element name="Fare" minOccurs="0">
1275+ <complexType>
1276+ <attribute name="Type" type="string" use="required">
1277+ <annotation>
1278+ <documentation>"Type" is used to specify a fare type. Acceptable values are "NL" for normal fare, "EX" for special fare, and 'IT" for inclusive tour.</documentation>
1279+ </annotation>
1280+ </attribute>
1281+ </complexType>
1282+ </element>
1283+ <element name="ItineraryOptions" minOccurs="0">
1284+ <complexType>
1285+ <sequence>
1286+ <element name="SegmentSelect" minOccurs="0" maxOccurs="unbounded">
1287+ <complexType>
1288+ <attribute name="EndNumber" type="integer" use="optional"/>
1289+ <attribute name="Number" type="integer" use="required"/>
1290+ <attribute name="RPH" type="string" use="optional">
1291+ <annotation>
1292+ <documentation>"RPH" is used to match up with ".../SpecificFare/@RPH" or .../Brand.</documentation>
1293+ </annotation>
1294+ </attribute>
1295+ </complexType>
1296+ </element>
1297+ <element name="SideTrip" minOccurs="0">
1298+ <annotation>
1299+ <documentation>"SideTrip" is used to instruct the system to price the specified itinerary segments as a side trip.</documentation>
1300+ </annotation>
1301+ <complexType>
1302+ <attribute name="EndNumber" type="integer" use="optional"/>
1303+ <attribute name="Number" type="integer" use="required"/>
1304+ </complexType>
1305+ </element>
1306+ </sequence>
1307+ </complexType>
1308+ </element>
1309+ <element name="NameSelect" minOccurs="0" maxOccurs="unbounded">
1310+ <annotation>
1311+ <documentation>"NameSelect" is used to instruct the system to price theitinerary based upon a particular name field.</documentation>
1312+ </annotation>
1313+
1314+ <complexType>
1315+ <attribute name="EndNameNumber" type="string" use="optional"/>
1316+ <attribute name="NameNumber" type="string" use="required"/>
1317+ </complexType>
1318+ </element>
1319+ <element name="PhaseIV" minOccurs="0" maxOccurs="7">
1320+ <annotation>
1321+ <documentation>Cannot combine with .../PriceQuote.</documentation>
1322+ </annotation>
1323+ <complexType>
1324+ <sequence>
1325+ <element name="NameSelect" minOccurs="0" maxOccurs="unbounded">
1326+ <annotation>
1327+ <documentation>"NameSelect" is used to instruct the system to price theitinerary based upon a particular name field.</documentation>
1328+ </annotation>
1329+ <complexType>
1330+ <attribute name="EndNameNumber" type="string" use="optional"/>
1331+ <attribute name="NameNumber" type="string" use="required"/>
1332+ </complexType>
1333+ </element>
1334+ </sequence>
1335+ <attribute name="Number" type="integer" use="required"/>
1336+ </complexType>
1337+ </element>
1338+ <element name="PriceQuote" minOccurs="0" maxOccurs="unbounded">
1339+ <annotation>
1340+ <documentation>Cannot combine with .../NameSelect. Cannot combine with .../PhaseIV.</documentation>
1341+ </annotation>
1342+ <complexType>
1343+ <sequence>
1344+ <element name="NameSelect" minOccurs="0" maxOccurs="unbounded">
1345+ <annotation>
1346+ <documentation>"NameSelect" is used to instruct the system to price theitinerary based upon a particular name field.</documentation>
1347+ </annotation>
1348+ <complexType>
1349+ <attribute name="EndNameNumber" type="decimal" use="optional"/>
1350+ <attribute name="NameNumber" type="decimal" use="required"/>
1351+ </complexType>
1352+ </element>
1353+ <element name="Record" minOccurs="0" maxOccurs="unbounded">
1354+ <annotation>
1355+ <documentation>In order to specify multiple PQR records to be issued please specify a range or specific record numbers by means of the element repetition. .../Ticketing/PricingQualifiers/PriceQuote/Record/@Reissue cannot be combined with .../Ticketing/MiscQualifiers/Ticket</documentation>
1356+ </annotation>
1357+ <complexType>
1358+ <attribute name="EndNumber" type="integer" use="optional">
1359+ <annotation>
1360+ <documentation>"EndNumber" is used to specify the ending PQ number in a range.</documentation>
1361+ </annotation>
1362+ </attribute>
1363+ <attribute name="Number" type="integer" use="required">
1364+ <annotation>
1365+ <documentation>"Number" is used to specify a PQ number.</documentation>
1366+ </annotation>
1367+ </attribute>
1368+ <attribute name="Reissue" type="boolean" use="optional">
1369+ <annotation>
1370+ <documentation>"Reissue" is used to indicate that the particular PQ record is a PQ Reissue record.</documentation>
1371+ </annotation>
1372+ </attribute>
1373+ </complexType>
1374+ </element>
1375+ </sequence>
1376+ </complexType>
1377+ </element>
1378+ <element name="RefundableBalance" minOccurs="0">
1379+ <complexType>
1380+ <sequence>
1381+ <element name="Taxes" minOccurs="0">
1382+ <complexType>
1383+ <sequence>
1384+ <element name="Tax" maxOccurs="unbounded">
1385+ <complexType>
1386+ <attribute name="Amount" type="string" use="required"/>
1387+ <attribute name="Code" type="string" use="required"/>
1388+ </complexType>
1389+ </element>
1390+ </sequence>
1391+ </complexType>
1392+ </element>
1393+ </sequence>
1394+ <attribute name="Amount" type="string" use="required"/>
1395+ </complexType>
1396+ </element>
1397+ <element name="SpanishLargeFamilyDiscountLevel" minOccurs="0">
1398+ <annotation>
1399+ <documentation>"SpanishLargeFamilyDiscountLevel" is used to specify the Spanish large family discount level. Please note that this qualifier is only applicable to Spain-based subscribers.</documentation>
1400+ </annotation>
1401+ <simpleType>
1402+ <restriction base="string">
1403+ <enumeration value="1"/>
1404+ <enumeration value="2"/>
1405+ </restriction>
1406+ </simpleType>
1407+ </element>
1408+ <element name="SpecificFare" minOccurs="0" maxOccurs="unbounded">
1409+ <annotation>
1410+ <documentation>Please note that the element is only applicable to Abacus.</documentation>
1411+ </annotation>
1412+ <complexType>
1413+ <sequence>
1414+ <element name="FareBasis" type="string" minOccurs="0"/>
1415+ </sequence>
1416+ <attribute name="RPH" type="string" use="optional">
1417+ <annotation>
1418+ <documentation>"RPH" is used to match up with ../OptionalQualifiers/PricingQualifiers/ItineraryOptions/Segment.</documentation>
1419+ </annotation>
1420+ </attribute>
1421+ </complexType>
1422+ </element>
1423+ <element name="SpecificPenalty" minOccurs="0">
1424+ <annotation>
1425+ <documentation>"SpecificPenalty" is used to specify change or cancellation amounts for an itinerary.</documentation>
1426+ </annotation>
1427+ <complexType>
1428+ <sequence>
1429+ <element name="Changeable" minOccurs="0">
1430+ <annotation>
1431+ <documentation>It is not possible to combine "BeforeDeparture" and "AfterDeparture" within one element.</documentation>
1432+ </annotation>
1433+ <complexType>
1434+ <attribute name="Any" type="boolean" use="optional">
1435+ <annotation>
1436+ <documentation>"Any" is used to specify only changeable fare options.</documentation>
1437+ </annotation>
1438+ </attribute>
1439+ <attribute name="CurrencyCode" type="string" use="optional">
1440+ <annotation>
1441+ <documentation>"CurrencyCode" is used to specify the specific currency for maximum exchange penalty.</documentation>
1442+ </annotation>
1443+ </attribute>
1444+ <attribute name="MaxPenalty" type="string" use="optional">
1445+ <annotation>
1446+ <documentation>"MaxPenalty" is used to specify maximum change penalty. If a value of "0" is input no penalty is preferred. If a value of "N" is input only non-changeable options are requested. Please note that monetary amount that includes a decimal is not allowed</documentation>
1447+ </annotation>
1448+ </attribute>
1449+ <attribute name="BeforeDeparture" type="boolean" use="optional">
1450+ <annotation>
1451+ <documentation>"BeforeDeparture" is used to query for before depature fees.</documentation>
1452+ </annotation>
1453+ </attribute>
1454+ <attribute name="AfterDeparture" type="boolean" use="optional">
1455+ <annotation>
1456+ <documentation>"AfterDeparture" is used to query for after depature fees.</documentation>
1457+ </annotation>
1458+ </attribute>
1459+ </complexType>
1460+ </element>
1461+ <element name="EitherOr" minOccurs="0">
1462+ <annotation>
1463+ <documentation>It is not possible to combine "BeforeDeparture" and "AfterDeparture" within one element.</documentation>
1464+ </annotation>
1465+ <complexType>
1466+ <attribute name="Any" type="boolean" use="optional">
1467+ <annotation>
1468+ <documentation>"Any" is used to specify only changeable fare options.</documentation>
1469+ </annotation>
1470+ </attribute>
1471+ <attribute name="CurrencyCode" type="string" use="optional">
1472+ <annotation>
1473+ <documentation>"CurrencyCode" is used to specify the specific currency for maximum exchange penalty.</documentation>
1474+ </annotation>
1475+ </attribute>
1476+ <attribute name="MaxPenalty" type="string" use="optional">
1477+ <annotation>
1478+ <documentation>"MaxPenalty" is used to specify maximum change penalty. If a value of "0" is input no penalty is preferred. If a value of "N" is input only non-changeable options are requested. Please note that monetary amount that includes a decimal is not allowed</documentation>
1479+ </annotation>
1480+ </attribute>
1481+ <attribute name="BeforeDeparture" type="boolean" use="optional">
1482+ <annotation>
1483+ <documentation>"BeforeDeparture" is used to query for before depature fees.</documentation>
1484+ </annotation>
1485+ </attribute>
1486+ <attribute name="AfterDeparture" type="boolean" use="optional">
1487+ <annotation>
1488+ <documentation>"AfterDeparture" is used to query for after depature fees.</documentation>
1489+ </annotation>
1490+ </attribute>
1491+ </complexType>
1492+ </element>
1493+ <element name="Refundable" minOccurs="0">
1494+ <annotation>
1495+ <documentation>It is not possible to combine "BeforeDeparture" and "AfterDeparture" within one element.</documentation>
1496+ </annotation>
1497+ <complexType>
1498+ <attribute name="Any" type="boolean" use="optional">
1499+ <annotation>
1500+ <documentation>"Any" is used to specify only changeable fare options.</documentation>
1501+ </annotation>
1502+ </attribute>
1503+ <attribute name="CurrencyCode" type="string" use="optional">
1504+ <annotation>
1505+ <documentation>"CurrencyCode" is used to specify the specific currency for maximum exchange penalty.</documentation>
1506+ </annotation>
1507+ </attribute>
1508+ <attribute name="MaxPenalty" type="string" use="optional">
1509+ <annotation>
1510+ <documentation>"MaxPenalty" is used to specify maximum change penalty. If a value of "0" is input no penalty is preferred. If a value of "N" is input only non-changeable options are requested. Please note that monetary amount that includes a decimal is not allowed</documentation>
1511+ </annotation>
1512+ </attribute>
1513+ <attribute name="BeforeDeparture" type="boolean" use="optional">
1514+ <annotation>
1515+ <documentation>"BeforeDeparture" is used to query for before depature fees.</documentation>
1516+ </annotation>
1517+ </attribute>
1518+ <attribute name="AfterDeparture" type="boolean" use="optional">
1519+ <annotation>
1520+ <documentation>"AfterDeparture" is used to query for after depature fees.</documentation>
1521+ </annotation>
1522+ </attribute>
1523+ </complexType>
1524+ </element>
1525+ </sequence>
1526+ <attribute name="AdditionalInfo" type="boolean" use="optional">
1527+ <annotation>
1528+ <documentation>"AdditionalInfo" is used to receive additional tags with information on fare flexibility.</documentation>
1529+ </annotation>
1530+ </attribute>
1531+ </complexType>
1532+ </element>
1533+ <element name="Taxes" minOccurs="0">
1534+ <complexType>
1535+ <sequence>
1536+ <element name="NoTax" minOccurs="0">
1537+ <complexType>
1538+ <attribute name="Ind" type="boolean" use="optional"/>
1539+ </complexType>
1540+ </element>
1541+ <element name="TaxExempt" minOccurs="0" maxOccurs="5">
1542+ <complexType>
1543+ <attribute name="Code" type="string" use="optional"/>
1544+ </complexType>
1545+ </element>
1546+ </sequence>
1547+ </complexType>
1548+ </element>
1549+ <element name="ValidityDates" minOccurs="0" maxOccurs="unbounded">
1550+ <annotation>
1551+ <documentation>This node is used to specify ticket validity dates.Cannot combine with PhaseIV.</documentation>
1552+ </annotation>
1553+ <complexType>
1554+ <sequence>
1555+ <element name="NotValidAfter" type="spct:date" minOccurs="0"/>
1556+ <element name="NotValidBefore" type="spct:date" minOccurs="0"/>
1557+ <element name="Segment" maxOccurs="unbounded">
1558+ <complexType>
1559+ <attribute name="EndNumber" type="integer" use="optional"/>
1560+ <attribute name="Number" type="integer" use="required"/>
1561+ </complexType>
1562+ </element>
1563+ </sequence>
1564+ </complexType>
1565+ </element>
1566+ </sequence>
1567+ </complexType>
1568+ </element>
1569+ </sequence>
1570+ </complexType>
1571+ </element>
1572+ <element name="PostProcessing" minOccurs="0">
1573+ <complexType>
1574+ <sequence>
1575+ <element name="EndTransaction" minOccurs="0">
1576+ <annotation>
1577+ <documentation>"EndTransaction" is used to end the transaction and finalize the record.</documentation>
1578+ </annotation>
1579+ <complexType>
1580+ <sequence>
1581+ <element name="Source">
1582+ <complexType>
1583+ <attribute name="ReceivedFrom" type="string" use="required">
1584+ <annotation>
1585+ <documentation>"ReceivedFrom" is used to receive the record.</documentation>
1586+ </annotation>
1587+ </attribute>
1588+ </complexType>
1589+ </element>
1590+ <element name="Email" minOccurs="0">
1591+ <annotation>
1592+ <documentation>"Email" is used to send an email notification upon end transaction to any email addresses contained within the particular record.</documentation>
1593+ </annotation>
1594+ <complexType>
1595+ <sequence>
1596+ <element name="eTicket" minOccurs="0">
1597+ <annotation>
1598+ <documentation>"eTicket" is used to send an email notification containing a text-based copy of the eTicket, cannot combine with .../Invoice, or .../Itinerary..</documentation>
1599+ </annotation>
1600+ <complexType>
1601+ <sequence>
1602+ <element name="PDF" minOccurs="0">
1603+ <complexType>
1604+ <attribute name="Ind" type="boolean" use="required"/>
1605+ </complexType>
1606+ </element>
1607+ </sequence>
1608+ <attribute name="Ind" type="boolean" use="required"/>
1609+ </complexType>
1610+ </element>
1611+ <element name="Invoice" minOccurs="0">
1612+ <annotation>
1613+ <documentation>"Invoice" is used to send an email notification containing a text-based copy of the invoice. Invoice cannot combine with .../eTicket, or .../Itinerary.</documentation>
1614+ </annotation>
1615+ <complexType>
1616+ <attribute name="Ind" type="boolean" use="required"/>
1617+ </complexType>
1618+ </element>
1619+ <element name="Itinerary" minOccurs="0">
1620+ <annotation>
1621+ <documentation>"Itinerary" is used to send an email notification containing a text-based copy of the itinerary. Itinerary cannot combine with .../eTicket, or .../Invoice.</documentation>
1622+ </annotation>
1623+ <complexType>
1624+ <sequence>
1625+ <element name="PDF" minOccurs="0">
1626+ <annotation>
1627+ <documentation>"PDF" is used to send an email notification containing a PDF-based copy of the itinerary.</documentation>
1628+ </annotation>
1629+ <complexType>
1630+ <attribute name="Ind" type="boolean" use="required"/>
1631+ </complexType>
1632+ </element>
1633+ <element name="Segment" minOccurs="0" maxOccurs="unbounded">
1634+ <complexType>
1635+ <attribute name="EndNumber" type="integer" use="optional">
1636+ <annotation>
1637+ <documentation>"EndNumber" is used to specify an ending segment in the range to include in the email message.</documentation>
1638+ </annotation>
1639+ </attribute>
1640+ <attribute name="Number" type="integer" use="required">
1641+ <annotation>
1642+ <documentation>"Number" is used to specify a segment number to include in the email message.</documentation>
1643+ </annotation>
1644+ </attribute>
1645+ </complexType>
1646+ </element>
1647+ </sequence>
1648+ <attribute name="Ind" type="boolean" use="required"/>
1649+ </complexType>
1650+ </element>
1651+ <element name="PersonName" minOccurs="0">
1652+ <complexType>
1653+ <attribute name="NameNumber" type="string" use="required">
1654+ <annotation>
1655+ <documentation>"NameNumber" is used to specify a particular passenger name number to send the email notification to. Please note that the email address in the PNR's email field must be name associated to the specified name number.</documentation>
1656+ </annotation>
1657+ </attribute>
1658+ </complexType>
1659+ </element>
1660+ </sequence>
1661+ <attribute name="Ind" type="boolean" use="required"/>
1662+ </complexType>
1663+ </element>
1664+ </sequence>
1665+ </complexType>
1666+ </element>
1667+ </sequence>
1668+ <attribute name="acceptNegotiatedFare" type="boolean" use="optional">
1669+ <annotation>
1670+ <documentation>"acceptNegotiatedFare" is used to accept a negotiated fare when it is not possible to ticket the stored fare.</documentation>
1671+ </annotation>
1672+ </attribute>
1673+ <attribute name="acceptPriceChanges" type="boolean" use="optional">
1674+ <annotation>
1675+ <documentation>"acceptPriceChanges" is used to specify that system should issue a ticket even if price increases while processing.</documentation>
1676+ </annotation>
1677+ </attribute>
1678+ <attribute name="actionOnPQExpired" use="optional">
1679+ <annotation>
1680+ <documentation>"actionOnPQExpired" is used to specify appropriate action when Price Quote expires. Available options are "R" - reprice, "Q" Quit, "O" Override.</documentation>
1681+ </annotation>
1682+ <simpleType>
1683+ <restriction base="string">
1684+ <enumeration value="O"/>
1685+ <enumeration value="Q"/>
1686+ <enumeration value="R"/>
1687+ </restriction>
1688+ </simpleType>
1689+ </attribute>
1690+ </complexType>
1691+ </element>
1692+ </sequence>
1693+ <attribute name="targetCity" type="string" use="optional">
1694+ <annotation>
1695+ <documentation>"TargetCity" is used to specify to which city service should change context using ContextChange (AAA) and the rest of the service uses new security. If empty or equals current city the context doesn't change.</documentation>
1696+ </annotation>
1697+ </attribute>
1698+ </extension>
1699+ </complexContent>
1700+ </complexType>
1701+ </element>
1702+</schema>
xsd-isogen.cabal+2
@@ -18,6 +18,7 @@ extra-source-files: CHANGELOG.md
18
18
19
19
20library
20library
21+ ghc-options: -Werror
21 -- Modules exported by the library.
22 -- Modules exported by the library.
22 exposed-modules: Text.XSD
23 exposed-modules: Text.XSD
23 , Text.XSD.Parser
24 , Text.XSD.Parser
@@ -37,6 +38,7 @@ library
37 , transformers
38 , transformers
38 , xml-conduit
39 , xml-conduit
39 , writer-cps-mtl
40 , writer-cps-mtl
41+ , uniplate
40
42
41 -- Directories containing source files.
43 -- Directories containing source files.
42 hs-source-dirs: src
44 hs-source-dirs: src