Skip to content

Instantly share code, notes, and snippets.

@Dekkonot
Last active June 3, 2024 14:11
Show Gist options
  • Save Dekkonot/690231f6974f5867c4ce0287adfb6616 to your computer and use it in GitHub Desktop.
Save Dekkonot/690231f6974f5867c4ce0287adfb6616 to your computer and use it in GitHub Desktop.
XML Schema for Roblox's XML files
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:group name="DataTypes">
<xs:choice>
<xs:element name="Axes">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Axes">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="BinaryString">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="BinaryString">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="BrickColor">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="BrickColor">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="bool">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="bool">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="ColorSequence">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ColorSequence">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Color3">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Color3">
<xs:attributeGroup ref="DataTypeAttributes"></xs:attributeGroup>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Color3uint8">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="Color3uint8">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Content">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Content">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="CoordinateFrame">
<xs:complexType>
<xs:complexContent>
<xs:extension base="CoordinateFrame">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="double">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="double">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Faces">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Faces">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="float">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="float">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Font">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Font">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="NumberRange">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="NumberRange">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="NumberSequence">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="NumberSequence">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="int">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="int">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="int64">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="int64">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Ref">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="Ref">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="PhysicalProperties">
<xs:complexType>
<xs:complexContent>
<xs:extension base="PhysicalProperties">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ProtectedString" xml:space="preserve">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="ProtectedString">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Ray">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Ray">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Rect2D">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Rect2D">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="SharedString">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="SharedString">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="string">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="string">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="token">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="token">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="UDim">
<xs:complexType>
<xs:complexContent>
<xs:extension base="UDim">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UDim2">
<xs:complexType>
<xs:complexContent>
<xs:extension base="UDim2">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UniqueId">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="UniqueId">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Vector3">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Vector3">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Vector3int16">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Vector3int16">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Vector2">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Vector2">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Vector2int16">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Vector2int16">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="OptionalCoordinateFrame">
<xs:complexType>
<xs:complexContent>
<xs:extension base="OptionalCoordinateFrame">
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:group>
<xs:complexType name="Axes">
<xs:annotation>
<xs:documentation> Represents an Axes value. </xs:documentation>
</xs:annotation>
<xs:all minOccurs="1" maxOccurs="1">
<xs:element name="axes">
<xs:simpleType>
<xs:restriction base="xs:unsignedByte">
<xs:maxInclusive value="7" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:simpleType name="BinaryString">
<xs:annotation>
<xs:documentation> Represents a property that's serialized to and from binary data.
Examples include tags and attributes. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:base64Binary" />
</xs:simpleType>
<xs:simpleType name="bool">
<xs:annotation>
<xs:documentation> Represents a `true` or `false` value. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:boolean" />
</xs:simpleType>
<xs:simpleType name="BrickColor">
<xs:annotation>
<xs:documentation>Represents a BrickColor value. The data of this tag is the
BrickColor's `Value`.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedInt" />
</xs:simpleType>
<xs:complexType name="Color3">
<xs:annotation>
<xs:documentation>Represents a Color3 value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="R" type="xs:float">
<xs:annotation>
<xs:documentation>The `R` component of the Color3 value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="G" type="xs:float">
<xs:annotation>
<xs:documentation>The `G` component of the Color3 value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="B" type="xs:float">
<xs:annotation>
<xs:documentation>The `B` component of the Color3 value.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Color3uint8">
<xs:annotation>
<xs:documentation> Represents a non-HDR Color3 value where each component is packed into
an integer. The upper 8-bits are not used, and the lower 24 are occupied by the `R`,
`G`, and `B` components of the Color3 as integers between 0 and 255.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedInt" />
</xs:simpleType>
<xs:simpleType name="ColorSequence">
<xs:annotation>
<xs:documentation> Represents a ColorSequence value. The contents of this element are
each Keypoint of the value in sequence with the attributes in the order `Time`,
`Value.R`, `Value.G`, `Value.B`, and an unused `Envelope`. </xs:documentation>
</xs:annotation>
<!-- TODO Figure out if it's viable to restrict this to be a multiple of 5 elements-->
<xs:list itemType="xs:float" />
</xs:simpleType>
<xs:complexType name="Content">
<xs:annotation>
<xs:documentation>Represents an external linked asset as a URI.</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element name="url">
<xs:annotation>
<xs:documentation>The URI of the linked asset</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:anyURI">
<xs:pattern
value="(rbxassetid|rbxasset|rbxthumb|rbxhttp|http|https)://.+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="null">
<xs:annotation>
<xs:documentation>An empty value</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="0" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:complexType name="CoordinateFrame">
<xs:annotation>
<xs:documentation> Represents a CFrame value. </xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="X" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `X` component of the CFrame value. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Y" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Y` component of the CFrame value. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Z" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Z` component of the CFrame value. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R00" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `X` component of the CFrame's RightVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R01" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `X` component of the CFrame's UpVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R02" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `X` component of the CFrame's LookVector with its sign
inverted.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R10" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Y` component of the CFrame's RightVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R11" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Y` component of the CFrame's UpVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R12" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Y` component of the CFrame's LookVector with its sign
inverted.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R20" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Z` component of the CFrame's RightVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R21" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Z` component of the CFrame's UpVector. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="R22" minOccurs="1" maxOccurs="1" type="xs:float">
<xs:annotation>
<xs:documentation> The `Z` component of the CFrame's LookVector with its sign
inverted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="double">
<xs:annotation>
<xs:documentation> Represented a 64-bit IEEE-754 floating point number. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:double" />
</xs:simpleType>
<xs:complexType name="Faces">
<xs:annotation>
<xs:documentation> Represents a Faces value. </xs:documentation>
</xs:annotation>
<xs:all minOccurs="1" maxOccurs="1">
<xs:element name="faces">
<xs:simpleType>
<xs:restriction base="xs:unsignedByte">
<xs:maxInclusive value="63" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:simpleType name="float">
<xs:annotation>
<xs:documentation> Represents a 32-bit IEEE-754 floating point number. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:float" />
</xs:simpleType>
<xs:complexType name="Font">
<xs:annotation>
<xs:documentation>Represents a Font value.</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element name="CachedFaceId" type="Content" minOccurs="0">
<xs:annotation>
<xs:documentation>The location of a locally stored cache font file</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Family" type="Content">
<xs:annotation>
<xs:documentation>The location of the Font's family information</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Style">
<xs:annotation>
<xs:documentation> The 'Style' of the Font.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Normal" />
<xs:enumeration value="Italic" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Weight">
<xs:annotation>
<xs:documentation>The weight the font has. This must correspond to a value from
the `FontWeight` enum on Roblox.</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:enumeration value="100" />
<xs:enumeration value="200" />
<xs:enumeration value="300" />
<xs:enumeration value="400" />
<xs:enumeration value="500" />
<xs:enumeration value="600" />
<xs:enumeration value="700" />
<xs:enumeration value="800" />
<xs:enumeration value="900" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
<xs:simpleType name="int">
<xs:annotation>
<xs:documentation> Represents a 32-bit signed integer. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:int" />
</xs:simpleType>
<xs:simpleType name="int64">
<xs:annotation>
<xs:documentation> Represents a 64-bit signed integer. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:long" />
</xs:simpleType>
<xs:simpleType name="NumberRange">
<xs:annotation>
<xs:documentation>Represents a NumberRange value. The value of this element is two
floats seperated by a space that represent the `Min` and `Max` of the value.</xs:documentation>
</xs:annotation>
<xs:restriction>
<xs:simpleType>
<xs:list itemType="xs:float" />
</xs:simpleType>
<xs:length value="2" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NumberSequence">
<xs:annotation>
<xs:documentation> Represents a NumberSequence value. The contents of this element are
each Keypoint of the value in sequence with the attributes in the order `Time`,
`Value`, and `Envelope. </xs:documentation>
</xs:annotation>
<xs:restriction>
<xs:simpleType>
<!-- TODO figure out if it's viable to make this the right number of elements-->
<xs:list itemType="xs:float" />
</xs:simpleType>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Ref">
<xs:annotation>
<xs:documentation> Represents a link to an Instance. This should be equivalent to the
`referent` attribute of an `Item` somewhere in the file. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:complexType name="PhysicalProperties">
<xs:annotation>
<xs:documentation>Represents a PhysicalProperties value.</xs:documentation>
</xs:annotation>
<xs:sequence maxOccurs="1" minOccurs="1">
<xs:element name="CustomPhysics" minOccurs="1" maxOccurs="1" type="xs:boolean">
<xs:annotation>
<xs:documentation>Whether or not the PhysicalProperties is custom or not.</xs:documentation>
</xs:annotation>
</xs:element>
<!-- Instance where XSD 1.1 might be useful-->
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="Density" type="xs:float" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The `Density` component of the value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Friction" type="xs:float" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The `Friction` component of the value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Elasticity" type="xs:float" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The `Elasticity` component of the value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="FrictionWeight" type="xs:float" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The `FrictionWeight` component of the value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ElasticityWeight" type="xs:float" minOccurs="1" maxOccurs="1">
<xs:annotation>
<xs:documentation>The `ElasticityWeight` component of the value.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ProtectedString">
<xs:annotation>
<xs:documentation> Represents a string value that needs additional security in-engine.
This element should only used for the `Source` property of Scripts. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:complexType name="Ray">
<xs:annotation>
<xs:documentation>Represents a Ray value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="origin" type="Vector3">
<xs:annotation>
<xs:documentation>The `origin` of the Ray value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="direction" type="Vector3">
<xs:annotation>
<xs:documentation>The `direction` of the Ray value.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Rect2D">
<xs:annotation>
<xs:documentation> Represents a Rect2D value. </xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="min" type="Vector2">
<xs:annotation>
<xs:documentation>The `min` of the Rect2D value.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="max" type="Vector2">
<xs:annotation>
<xs:documentation>The `min` of the Rect2D value.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="SharedString">
<xs:annotation>
<xs:documentation> Represents a SharedString from a repository at the end of the file.
Used to reduce the file size and offset the memory footprint for large string
properties. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="string">
<xs:annotation>
<xs:documentation>Represents a string. Strings containing binary data or characters that
are forbidden in XML should be wrapped in CDATA</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string" />
</xs:simpleType>
<xs:simpleType name="token">
<xs:annotation>
<xs:documentation> Represents a Roblox enumeration. </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:unsignedInt" />
</xs:simpleType>
<xs:complexType name="UDim">
<xs:annotation>
<xs:documentation>Represents a UDim value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="S" type="xs:float">
<xs:annotation>
<xs:documentation>The `Scale` component of the UDim.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="O" type="xs:int">
<xs:annotation>
<xs:documentation>The `Offset` component of the UDim.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UDim2">
<xs:annotation>
<xs:documentation>Represents a UDim2 value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="XS" type="xs:float">
<xs:annotation>
<xs:documentation>The `Scale` component of the UDim2's `X` component.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="XO" type="xs:int">
<xs:annotation>
<xs:documentation>The `Offset` component of the UDim2's `X` component.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="YS" type="xs:float">
<xs:annotation>
<xs:documentation>The `Scale` component of the UDim2's `Y` component.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="YO" type="xs:int">
<xs:annotation>
<xs:documentation>The `Offset` component of the UDim2's `Y` component.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="UniqueId">
<xs:annotation>
<xs:documentation>Represents a UniqueId value.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:hexBinary">
<xs:length value="16" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Vector2">
<xs:annotation>
<xs:documentation>Represents a Vector2 value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="X" type="xs:float">
<xs:annotation>
<xs:documentation>The `X` component of the Vector2.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Y" type="xs:float">
<xs:annotation>
<xs:documentation>The `Y` component of the Vector2.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Vector2int16">
<xs:annotation>
<xs:documentation>Represents a Vector2int16 value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="X" type="xs:short">
<xs:annotation>
<xs:documentation>The `X` component of the Vector2int16.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Y" type="xs:short">
<xs:annotation>
<xs:documentation>The `Y` component of the Vector2int16.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Vector3">
<xs:annotation>
<xs:documentation> Represents a Vector3 value. </xs:documentation>
</xs:annotation>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="X" type="xs:float">
<xs:annotation>
<xs:documentation>The `X` component of the Vector3.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Y" type="xs:float">
<xs:annotation>
<xs:documentation>The `Y` component of the Vector3.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Z" type="xs:float">
<xs:annotation>
<xs:documentation>The `Z` component of the Vector3.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Vector3int16">
<xs:annotation>
<xs:documentation>Represents a Vector3int16 value.</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="X" type="xs:short">
<xs:annotation>
<xs:documentation>The `X` component of the Vector3int16.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Y" type="xs:short">
<xs:annotation>
<xs:documentation>The `Y` component of the Vector3int16.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Z" type="xs:short">
<xs:annotation>
<xs:documentation>The `Z` component of the Vector3int16.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<!--
I'm unhappy with this data type but also suspicious so it goes down here for now.
-->
<xs:complexType name="OptionalCoordinateFrame">
<xs:annotation>
<xs:documentation> A CFrame value that is Optional and may or may not be present. </xs:documentation>
</xs:annotation>
<xs:sequence minOccurs="0" maxOccurs="1">
<xs:element name="CFrame" type="CoordinateFrame" />
</xs:sequence>
<xs:attributeGroup ref="DataTypeAttributes" />
</xs:complexType>
<!-- Helper group -->
<xs:attributeGroup name="DataTypeAttributes">
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>The name of the property this element represents.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:attributeGroup>
<!-- The structure of the file -->
<xs:element name="roblox">
<xs:annotation>
<xs:documentation>A Roblox place or model file</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Meta" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation> Represents a key-value pair of metadata for the file.
Currently, only `ExplicitAutoJoints` is used and it should be `true`. </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>tThe key portion of the metadata's
key-value pair.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:unique name="UniqueMetadata">
<xs:selector xpath="." />
<xs:field xpath="@name" />
</xs:unique>
</xs:element>
<xs:element name="External" minOccurs="0" maxOccurs="unbounded" type="xs:string">
<xs:annotation>
<xs:documentation> Purpose unknown. Valid values are `nil` and `null`. </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="Item" minOccurs="1" maxOccurs="unbounded" />
<xs:element ref="SharedStrings" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="version" use="required">
<xs:annotation>
<xs:documentation> The version of Roblox's format that this document is. This
should be `4`. </xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:unsignedInt">
<xs:pattern value="4"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:unique name="UniqueReferent">
<xs:selector xpath=".//Item" />
<xs:field xpath="@referent" />
</xs:unique>
<xs:key name="SharedStringDefinition">
<xs:selector xpath="./SharedStrings/SharedString" />
<xs:field xpath="@md5" />
</xs:key>
<xs:keyref name="SharedStringUse" refer="SharedStringDefinition">
<xs:selector xpath=".//Properties/SharedString" />
<xs:field xpath="." />
</xs:keyref>
</xs:element>
<xs:element name="Item">
<xs:annotation>
<xs:documentation> A single Roblox Instance, alongside all of its properties and
descendants. </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element ref="Properties" minOccurs="1" maxOccurs="1" />
<xs:element ref="Item" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="referent" type="xs:string" use="required">
<!-- We should not allow a referent to be "null" but that's not within our power at
this time unless we switch to XSD 1.1 -->
<xs:annotation>
<xs:documentation> A UID used by Roblox to represent this Instance when setting
properties with the `Instance` type. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="class" type="xs:string" use="required">
<xs:annotation>
<xs:documentation> The class of the Instance represented by this `Item`. </xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Properties">
<xs:annotation>
<xs:documentation> A list of all properties on an Instance. Any property not listed here
will be set to a default value, which varies from property to property. Also, not
every property will deserialize. </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:group ref="DataTypes" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:unique name="UniquePropertyName">
<xs:selector xpath="./*" />
<xs:field xpath="@name" />
</xs:unique>
</xs:element>
<xs:element name="SharedStrings">
<xs:annotation>
<xs:documentation> A repository for storing SharedString values as key-value pairs that
are referenced in the file above. </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SharedString" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>An individual SharedString. The contents of this element
represent the value of the SharedString and the `md5` attribute
represents the key used by properties.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:token">
<xs:attribute name="md5" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>The key that's used by SharedString
properties to refer to this SharedString. Despite the
name, this value may be anything and the hash is not
checked by Roblox.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueSharedString">
<xs:selector xpath="./SharedString" />
<xs:field xpath="@md5" />
</xs:unique>
</xs:element>
</xs:schema>
@phoriah
Copy link

phoriah commented Jun 1, 2024

@Dekkonot Hello, Can you please tell me how you extracted this file?
Sorry for bothering & Thanks in advance!

@Dekkonot
Copy link
Author

Dekkonot commented Jun 2, 2024

I wrote this file from scratch, it wasn't extracted. @phoriah

@phoriah
Copy link

phoriah commented Jun 3, 2024

I wrote this file from scratch, it wasn't extracted. @phoriah

Oh, okay. I assume http://www.roblox.com/roblox.xsd isn't possible to extract then?

@Dekkonot
Copy link
Author

Dekkonot commented Jun 3, 2024

Not that I'm aware of. As far as I know that file doesn't exist and hasn't for a very long time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment