Использование ключевого слова CONTENT при создании таблицы со столбцом XML из коллекции схем XML

При создании таблицы со столбцом типа XML я имею в виду сложную коллекцию схем XML. Когда я указываю схему XML, у меня есть возможность указать ключевое слово CONTENT или DOCUMENT. Последнее гарантирует, что данные XML будут храниться как документ в одном столбце.

Согласно видеоруководству, CONTENT будет хранить XML-данные в виде фрагментов.

Помимо приведенного выше утверждения, я больше нигде не нашел ссылок на использование ключевого слова CONTENT и его влияние на схему и данные.

Я хотел бы знать, как создаются и управляются фрагменты, и можно ли и как их запрашивать по отдельности. Далее, как соотносятся фрагменты. Далее, когда я внесу изменения в коллекцию схем XML, каковы будут последствия.


person Kabeer    schedule 24.03.2011    source источник


Ответы (1)


на самом деле я думаю, что SQLServer 2005 XML достаточно хорошо задокументирован.
CONTENT используется по умолчанию и допускает любой действительный XML. DOCUMENT является более конкретным и означает, что XML-данные, которые вы можете хранить, могут иметь только один узел верхнего уровня.

Создавать:

CREATE TABLE XmlCatalog ( 
   ID INT PRIMARY KEY, 
   Document XML(CONTENT myCollection))

Вставлять:

INSERT INTO XmlCatalog VALUES (2, 
'<doc id="123">
    <sections>
   <section num="1"><title>XML Schema</title></section>
   <section num="3"><title>Benefits</title></section>
   <section num="4"><title>Features</title></section>
    </sections>
</doc>')

Выбирать:

SELECT xCol.query('/doc[@id = 123]//section')   
FROM XmlCatalog   
WHERE  xCol.exist ('/doc[@id = 123]') = 1

...и так далее. Язык запросов более или менее превосходит подмножество xpath 1.0.

Если вы изменяете XSD, он проверяется на вставках и обновлениях и сохраняется в xml каждого элемента. Насколько я понимаю, в документе также разрешено добавлять несколько схем для одного столбца, чтобы записи могли ссылаться на разные схемы.

РЕДАКТИРОВАТЬ:
Хорошо, после прочтения конкретных частей документации я думаю, что понял, в чем ваша проблема. Ссылка не очень ясна в этом вопросе, но, насколько я понимаю, только записи с одним узлом верхнего уровня могут быть привязаны к схемам XSD.
Из-за того, что XSD-схемы требуют определения одного узла верхнего уровня. используемого XSD-файла невозможно будет проверить фрагменты, содержащие более одного элемента верхнего уровня. Я не пробовал, но думаю, что это невозможно.
Однако представляется допустимым определить столбец CONTENT, изменить XSD и сохранить как XML с одним узлом верхнего уровня, ссылающимся на XSD, так и на XML. -фрагменты, которые будут проверяться только на корректность. Доступ к фрагментам можно получить с помощью языка запросов XPath, показанного в операторе select выше.
Я не могу рассказать вам много о влиянии на производительность. В ссылке упоминается, что XSD хранятся в строке, поэтому для этого потребуется дополнительное пространство в базе данных. Запросы XPath также должны выполняться. Несмотря на то, что xpath обычно довольно быстр, я думаю, это может снизить производительность, потому что его нужно выполнять для каждой строки, чтобы получить результат. Чтобы быть уверенным, я думаю, вам нужно проверить план выполнения для вашего конкретного запроса в зависимости от размера и сложности сохраненного xml, а также выражения xpath.

person zoidbeck    schedule 31.03.2011
comment
Спасибо... наконец-то кто-то ответил :)... Мой вопрос, однако, очень специфичен для XML-данных, хранящихся во фрагментах. Я хочу знать, как SQL Server разбивает эти фрагменты и доступны ли эти фрагменты независимо? Кроме того, каково влияние такой фрагментации XML-данных на производительность. Хотя за ссылку спасибо... раньше не видел. - person Kabeer; 01.04.2011