Использование ключевого слова CONTENT при создании таблицы со столбцом XML из коллекции схем XML
При создании таблицы со столбцом типа XML я имею в виду сложную коллекцию схем XML. Когда я указываю XML-схему, у меня есть возможность упомянуть ключевое слово CONTENT или DOCUMENT. Последнее гарантирует, что данные XML хранятся в виде документа в одном столбце.
В соответствии с видеоуроком, CONTENT будет хранить данные XML в виде фрагментов.
Помимо приведенного выше утверждения, я не нахожу ссылки где-либо еще об использовании ключевого слова CONTENT и его влияния на схему и данные.
Я хотел бы знать, как фрагменты создаются и управляются и могут ли и как они могут быть запрошены индивидуально. Далее, как фрагменты соотносятся. Затем, когда я изменяю коллекцию XML-схем, как это влияет.
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.