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

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

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

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

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

1 Ответ

2 голосов
/ 01 апреля 2011

на самом деле я думаю 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.

...