SQL:2003 и XML
Преобразование типов данных
В SQL:2003 определено, что данные типа SQL преобразуются в наиболее близкую схему XML-данных. Формулировка "наиболее близкая" означает, что все значения, допустимые для SQL-типа, будут допустимы и для типа XML-схемы, а наименее возможные значения, не допустимые для SQL-типа, будут допустимы для типа XML-схемы. Элементы XML, такие как maxlnclusive и minlnclusive, могут ограничивать значения, допускаемые типом XML-схемы, до значений, допускаемых соответствующим SQL-типом. Например, если тип SQL-данных Ограничивает значения типа INTEGER в диапазоне значений от -2157483648 до 2157483647, в XML значение minlnclusive может быть задано числом – 2157483648.
Ниже приведен пример такого преобразования.
<xsd:simpleType> <xsd:restriction base="xsd:integer"> <xsd:maxlnclusive value="2157483647"/> <xsd:minlnclusive value="-21574 83648"/> <xsd:annotation> <sqlxml:sqltype name="INTEGER"/> </xsd:annotation> </xsd:restriction> </xsd:simpleType>
Раздел примечаний содержит информацию из описания SQL-типа, который в настоящий момент не используется XML, но позднее, при преобразовании этого документа в SQL-формат, может быть очень кстати.
Преобразование таблиц
Вы можете преобразовать таблицу в XML-документ, а также все таблицы в схему или все таблицы в каталог. Преобразование также определяет привилегии. Пользователь, имеющий привилегию SELECT только для нескольких столбцов таблицы, может преобразовать в XML-документ только эти столбцы. В действительности преобразование порождает два документа: один, который содержит данные в таблице, а другой – XML-схему, описывающую первый документ. Ниже приведен пример преобразования SQL-таблицы в документ, содержащий XML-данные.
<CUSTOMER> <row> <FirstName>Abe</FirstName> <LastName>Abelson</LastName> <City>Springfield</City> <AreaCode>714</AreaCode> <Telephone>555-llll</Telephone> </row> <row> <FirstName>Bill</FirstName> <LastName>Bailey</LastName> <City>Decatur</City> <AreaCode>714</AreaCode> <Telephone>555-2222</Telephone> </row> . . . </CUSTOMER>
Основной элемент документа дал имя таблице (CUSTOMER). Каждая строка таблицы содержится в пределах элемента <row> (в данном примере таких строк две). Кроме того, каждая строка таблицы содержит последовательность элементов столбца (атрибутов), каждый из которых получает имя после связывания со столбцом в исходной таблице (столбцы FirstName, LastName, City, AreaCode, Telephone). Каждый элемент столбца содержит значение данных.