SQL:2003 и XML
Теперь воспользуемся следующей XML-схемой для преобразования этого типа:
<xsd:complexType Name='ARRAY_4.CHAR_13'> <xsd:annotation> <xsd:appinfo> <sqlxml:sqltype kind='ARRAY1 maxElements='4' mappedElementType='CHAR_13'/> </xsd:appinfo> </xsd:annotation> <xsd:sequence> <xsd:element Name='element' minOccurs='0' maxOccurs='4' nillable='true' type='CHAR_13'/> </xsd:sequence > </xsd:complexType>
Результат будет примерно следующим:
<Phone> <element>(888)555-llll</element> <element>xsi:nil='true'/> <element>(888)555-3434</element> </Phone>
Элемент в массиве, содержащий xsi:nil='true', говорит о том, что второй телефонный номер в исходной таблице содержит неопределенное значение.
Мультимножества
Номера телефонов из предыдущего примера могут также хорошо храниться и в мультимножествах. Для преобразования мультимножества воспользуемся следующим программным кодом:
CREATE TABLE CONTACTINFO ( | |
Name | CHARACTER (30) |
Phone | CHARACTER (13) MULTISET |
); |
Преобразуем этот тип в XML с помощью такой схемы:
<xsd:complexType Name='MULTISET.CHAR_13'> <xsd:annotation> <xsd:appinfo> <sqlxml:sqltype kind='MULTISET' mappedElementType='CHAR_13'/> </xsd: appinfo> </xsd:annotation> <xsd:sequence> <xsd:element Name='element' minOccurs='0' maxOccurs='unbounded' nillable='true' type='CHAR_13'/> </xsd:sequence > </xsd:complexType>
Результат будет примерно следующим:
<Phone> <element>(888)555-llll</element> <element>xsi:nils' true'I> <element>(888)555-3434</element> </Phone>