phoenix-firestorm/indra/newview/app_settings/llsd.xsd

132 lines
4.1 KiB
XML
Executable File

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- LLSD document has exactly one value -->
<xsd:element name="llsd">
<xsd:complexType>
<xsd:group ref="llsd-value" />
</xsd:complexType>
</xsd:element>
<!-- Value is one of undef, boolean, integer, real,
uuid, string, date, binary, array, or map -->
<xsd:group name="llsd-value">
<xsd:choice>
<xsd:element ref="undef"/>
<xsd:element ref="boolean"/>
<xsd:element ref="integer"/>
<xsd:element ref="real"/>
<xsd:element ref="uuid"/>
<xsd:element ref="string"/>
<xsd:element ref="date"/>
<xsd:element ref="uri"/>
<xsd:element ref="binary"/>
<xsd:element ref="array"/>
<xsd:element ref="map"/>
</xsd:choice>
</xsd:group>
<!-- Undefined is an empty eleemnt -->
<xsd:element name="undef">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<!-- Boolean is true or false -->
<xsd:element name="boolean">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="true" />
<xsd:enumeration value="false" />
<!-- In practice, these other serializations are seen: -->
<xsd:enumeration value="" />
<xsd:enumeration value="1" />
<xsd:enumeration value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<!-- Integer is restricted to 32-bit signed values -->
<xsd:element name="integer">
<xsd:simpleType>
<xsd:restriction base="xsd:int" />
</xsd:simpleType>
</xsd:element>
<!-- Real is an IEEE 754 "double" value, including Infinities and NaN -->
<xsd:element name="real">
<xsd:simpleType>
<!-- TODO: xsd:double uses "INF", "-INF", and "NaN",
whereas LLSD prefers "Infinity", "-Infinity" and "NaN" -->
<xsd:restriction base="xsd:double" />
</xsd:simpleType>
</xsd:element>
<!-- UUID per RFC 4122 -->
<xsd:element name="uuid">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<!-- String is any sequence of Unicode characters -->
<xsd:element name="string">
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:element>
<!-- Date is ISO 8601 in UTC -->
<xsd:element name="date">
<xsd:simpleType>
<xsd:restriction base="xsd:dateTime">
<!-- Restrict to UTC (Z) times -->
<xsd:pattern value="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?Z" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<!-- URI per RFC 3986 -->
<xsd:element name="uri">
<xsd:simpleType>
<xsd:restriction base="xsd:anyURI" />
</xsd:simpleType>
</xsd:element>
<!-- Binary data is base64 encoded -->
<xsd:element name="binary">
<xsd:simpleType>
<!-- TODO: Require encoding attribute? -->
<xsd:restriction base="xsd:base64Binary" />
</xsd:simpleType>
</xsd:element>
<!-- Array is a sequence of zero or more values -->
<xsd:element name="array">
<xsd:complexType>
<xsd:group minOccurs="0" maxOccurs="unbounded" ref="llsd-value" />
</xsd:complexType>
</xsd:element>
<!-- Map is a sequence of zero or more key/value pairs -->
<xsd:element name="map">
<xsd:complexType>
<xsd:sequence minOccurs="0" maxOccurs="unbounded">
<xsd:element name="key">
<xsd:simpleType>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
</xsd:element>
<xsd:group ref="llsd-value" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>