blob: 9d6f351e31398d4a9dd23a29fa158f14828e3eb3 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<xsd:schema targetNamespace="http://www.ogf.org/dfdl/dfdl-1.0/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/"
attributeFormDefault="unqualified" elementFormDefault="qualified">
<!-- ============================================================= -->
<!-- Base DFDL Data types -->
<!-- ============================================================= -->
<xsd:simpleType name="DFDLExpression">
<xsd:annotation>
<xsd:documentation>A subset of XPath 2.0 expressions for use in
properties</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:token">
<xsd:pattern value="(\{[^\{].*\})|(\{\})" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="EmptyString">
<xsd:annotation>
<xsd:documentation>Matches the empty string only. No toleration of
whitespace.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:whiteSpace value="preserve" />
<xsd:length value="0" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="DFDLExpressionOrNothing">
<xsd:annotation>
<xsd:documentation>An expression, or nothing at all.</xsd:documentation>
</xsd:annotation>
<xsd:union memberTypes="dfdl:EmptyString dfdl:DFDLExpression" />
<!--
2012-01-04 mbeckerle - If you change the order of this union,
it stops enforcing the empty string aspect.
Reverse the order and then just empty whitespace will validate.
-->
</xsd:simpleType>
<xsd:simpleType name="DFDLExpressionOrPatternOrNothing">
<xsd:annotation>
<xsd:documentation>An expression, a regex, or nothing at all.
</xsd:documentation>
</xsd:annotation>
<xsd:union
memberTypes="dfdl:EmptyString dfdl:DFDLExpression dfdl:DFDLRegularExpression" />
<!--
2012-01-04 mbeckerle - If you change the order of this union,
it stops enforcing the empty string aspect.
Reverse the order and then just empty whitespace will validate.
-->
</xsd:simpleType>
<xsd:simpleType name="DFDLStringLiteral">
<xsd:restriction base="xsd:string">
</xsd:restriction>
</xsd:simpleType>
<!-- used alone, this type will allow empty string -->
<xsd:simpleType name="ListOfDFDLStringLiteral">
<xsd:list itemType="xsd:token"/>
</xsd:simpleType>
<xsd:simpleType name="NonEmptyStringLiteral">
<xsd:annotation>
<xsd:documentation>Matches a non-empty string only. No toleration of
whitespace in the string.</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\S+"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="NonEmptyListOfDFDLStringLiteral">
<xsd:restriction base="dfdl:ListOfDFDLStringLiteral">
<!-- used for dfdl:nilValue. We can give a much clearer diagnostic with a suggestion
on what the user should do instead. So we don't check this here. -->
<!-- <xsd:minLength value="1"/> -->
</xsd:restriction>
</xsd:simpleType>
<!-- used alone, this type will allow empty string -->
<xsd:simpleType name="ListOfInteger">
<xsd:list itemType="xsd:integer"/>
</xsd:simpleType>
<xsd:simpleType name="NonEmptyListOfInteger">
<xsd:restriction base="dfdl:ListOfInteger">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="NonEmptyListofDFDLStringLiteralOrNonEmptyListOfInteger">
<xsd:union memberTypes="dfdl:NonEmptyListOfDFDLStringLiteral dfdl:NonEmptyListOfInteger" />
</xsd:simpleType>
<xsd:simpleType name="DFDLNonNegativeInteger">
<xsd:restriction base="xsd:int">
<xsd:minInclusive value="0" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="DFDLRegularExpression">
<xsd:restriction base="xsd:string">
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="DFDLQName">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:QName" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<!-- ============================================================= -->
<!-- Restrictions of base DFDL Data types -->
<!-- ============================================================= -->
<!-- A positive integer or 'implicit' for schema specification -->
<xsd:simpleType name="AlignmentType">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="implicit" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLNonNegativeInteger">
<xsd:minInclusive value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<!-- A positive integer or empty string -->
<xsd:simpleType name="BinaryBooleanTrueRepType">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="0"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLNonNegativeInteger">
<xsd:minInclusive value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="BinaryBooleanFalseRepType">
<xsd:restriction base="dfdl:DFDLNonNegativeInteger">
<xsd:minInclusive value="0" />
</xsd:restriction>
</xsd:simpleType>
<!-- ========================================================== -->
<!-- DFDL Enumerations -->
<!-- ========================================================= -->
<xsd:simpleType name="EncodingEnum">
<xsd:restriction base="xsd:token">
<!-- IANA charsets or CCIDSs -->
<xsd:pattern value=".{1,60}" /> <!-- at least one character -->
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextStringJustificationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="left" />
<xsd:enumeration value="right" />
<xsd:enumeration value="center" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberJustificationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="left" />
<xsd:enumeration value="right" />
<xsd:enumeration value="center" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberRoundingEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="pattern" />
<xsd:enumeration value="explicit" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SignCodingValue">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="twosComplement" />
<xsd:enumeration value="onesComplement" />
<xsd:enumeration value="signMagnitude" />
<xsd:enumeration value="unsignedBinary" />
<xsd:enumeration value="unsignedDecimal" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="RepresentationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="binary" />
<xsd:enumeration value="text" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextPadKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="padChar" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextTrimKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="padChar" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="EscapeKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="escapeCharacter" />
<xsd:enumeration value="escapeBlock" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="GenerateEscapeEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="always" />
<xsd:enumeration value="whenNeeded" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextBidiTextOrderingEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="implicit" />
<xsd:enumeration value="visual" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextBidiOrientationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="LTR" />
<xsd:enumeration value="RTL" />
<xsd:enumeration value="contextual_LTR" />
<xsd:enumeration value="contextual_RTL" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextBidiNumeralShapesEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="nominal" />
<xsd:enumeration value="national" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberRepEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="standard" />
<xsd:enumeration value="zoned" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberCheckPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="strict" />
<xsd:enumeration value="lax" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CalendarCheckPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="strict" />
<xsd:enumeration value="lax" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberBaseEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="2" />
<xsd:enumeration value="8" />
<xsd:enumeration value="10" />
<xsd:enumeration value="16" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextNumberRoundingModeEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="roundCeiling" />
<xsd:enumeration value="roundFloor" />
<xsd:enumeration value="roundDown" />
<xsd:enumeration value="roundUp" />
<xsd:enumeration value="roundHalfEven" />
<xsd:enumeration value="roundHalfDown" />
<xsd:enumeration value="roundHalfUp" />
<xsd:enumeration value="roundUnnecessary" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextZonedSignStyleEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="asciiStandard" />
<xsd:enumeration value="asciiTranslatedEBCDIC" />
<xsd:enumeration value="asciiCARealiaModified" />
<xsd:enumeration value="asciiTandemModified" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="BinaryNumberRepEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="packed" />
<xsd:enumeration value="bcd" />
<xsd:enumeration value="binary" />
<xsd:enumeration value="ibm4690Packed"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="BinaryNumberCheckPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="strict" />
<xsd:enumeration value="lax" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="BinaryFloatRepEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ieee" />
<xsd:enumeration value="ibm390Hex" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextBooleanJustificationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="left" />
<xsd:enumeration value="right" />
<xsd:enumeration value="center" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TextCalendarJustificationEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="left" />
<xsd:enumeration value="right" />
<xsd:enumeration value="center" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CalendarPatternKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="explicit" />
<xsd:enumeration value="implicit" />
</xsd:restriction>
</xsd:simpleType>
<!-- A pattern is used instead of an enumeration for compactness -->
<xsd:simpleType name="CalendarTimeZoneType">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="(UTC)([+\-]([01]\d|\d)((([:][0-5]\d){1,2})?))?" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="CalendarLanguageType">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLStringLiteral">
<!-- A pattern is used instead of an enumeration for compactness -->
<xsd:pattern value="([A-Za-z]{1,8}([-_][A-Za-z0-9]{1,8})*)"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression"/>
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="CalendarFirstDayOfWeekEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Monday" />
<xsd:enumeration value="Tuesday" />
<xsd:enumeration value="Wednesday" />
<xsd:enumeration value="Thursday" />
<xsd:enumeration value="Friday" />
<xsd:enumeration value="Saturday" />
<xsd:enumeration value="Sunday" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="BinaryCalendarRepEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="packed" />
<xsd:enumeration value="bcd" />
<xsd:enumeration value="binarySeconds" />
<xsd:enumeration value="binaryMilliseconds" />
<xsd:enumeration value="ibm4690Packed"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="LengthKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="explicit" />
<xsd:enumeration value="delimited" />
<xsd:enumeration value="implicit" />
<xsd:enumeration value="prefixed" />
<xsd:enumeration value="endOfParent" />
<xsd:enumeration value="pattern" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="NilKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="literalValue" />
<xsd:enumeration value="logicalValue" />
<xsd:enumeration value="literalCharacter" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="NilValueDelimiterPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="initiator" />
<xsd:enumeration value="terminator" />
<xsd:enumeration value="both" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="EmptyValueDelimiterPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="none" />
<xsd:enumeration value="initiator" />
<xsd:enumeration value="terminator" />
<xsd:enumeration value="both" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SequenceKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="ordered" />
<xsd:enumeration value="unordered" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="LengthUnitsEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bits" />
<xsd:enumeration value="bytes" />
<xsd:enumeration value="characters" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="AlignmentUnitsEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bits" />
<xsd:enumeration value="bytes" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="GenerateQuotesEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="always" />
<xsd:enumeration value="whenNeeded" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SeparatorPositionEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="infix" />
<xsd:enumeration value="prefix" />
<xsd:enumeration value="postfix" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SeparatorPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="required" />
<xsd:enumeration value="suppressed" />
<xsd:enumeration value="suppressedAtEndStrict" />
<xsd:enumeration value="suppressedAtEndLax" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SeparatorSuppressionPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="never" />
<xsd:enumeration value="trailingEmpty" />
<xsd:enumeration value="trailingEmptyStrict" />
<xsd:enumeration value="anyEmpty" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ChoiceLengthKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="implicit" />
<xsd:enumeration value="explicit" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="OccursCountKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="fixed" />
<xsd:enumeration value="expression" />
<xsd:enumeration value="parsed" />
<xsd:enumeration value="stopValue" />
<xsd:enumeration value="implicit" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ByteOrderEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="littleEndian" />
<xsd:enumeration value="bigEndian" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="BitOrderEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="mostSignificantBitFirst" />
<xsd:enumeration value="leastSignificantBitFirst" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="YesNoEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="yes" />
<xsd:enumeration value="no" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="UTF16WidthEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="fixed" />
<xsd:enumeration value="variable" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="EncodingErrorPolicyEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="error" />
<xsd:enumeration value="replace" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TestKindEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="expression" />
<xsd:enumeration value="pattern" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="FailureTypeEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="processingError" />
<xsd:enumeration value="recoverableError" />
</xsd:restriction>
</xsd:simpleType>
<!-- A pattern is used instead of an enumeration for compactness -->
<xsd:simpleType name="BinaryPackedSignCodes">
<xsd:restriction base="dfdl:DFDLStringLiteral">
<!--
A space separated string giving the hex sign nibbles to use for a
positive
value, a negative value, an unsigned value, and zero.
Valid values for positive nibble: A, C, E, F
Valid values for negative nibble: B, D
Valid values for unsigned nibble: F
Valid values for zero sign: A C E F 0
Example: C D F C (typical S/390 usage)
Example: C D F 0 (handle special case for zero)
-->
<xsd:pattern value="(A|C|E|F) (B|D) (F) (A|C|E|F|0)" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CalendarDaysInFirstWeek">
<xsd:restriction base="dfdl:DFDLNonNegativeInteger">
<xsd:minInclusive value="1" />
<xsd:maxInclusive value="7" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="CalendarCenturyStart">
<xsd:restriction base="dfdl:DFDLNonNegativeInteger">
<xsd:minInclusive value="0" />
<xsd:maxInclusive value="99" />
</xsd:restriction>
</xsd:simpleType>
<!-- ============================================================= -->
<!-- Simple types with DFDL Expression -->
<!-- ============================================================= -->
<xsd:simpleType name="ByteOrderEnum_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:ByteOrderEnum" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="EncodingEnum_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:EncodingEnum" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="BinaryFloatRepEnum_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:BinaryFloatRepEnum" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="DFDLStringLiteral_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLStringLiteral" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="ListOfDFDLStringLiteral_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:ListOfDFDLStringLiteral" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
<xsd:simpleType name="DFDLNonNegativeInteger_Or_DFDLExpression">
<xsd:union>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLExpression" />
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="dfdl:DFDLNonNegativeInteger" />
</xsd:simpleType>
</xsd:union>
</xsd:simpleType>
</xsd:schema>