|
Программирование >> Программирование баз данных
целостности значение NOT NULL. Безусловно, такая возможность не исключена, но необходимо учрпывать, что применение ограничения целостности NOT NULL в данном случае равносильно требованию осуществлять контроль над тем, имеются ли во вводимой или обновляемой строке какие-либо данные, относящиеся к этому столбцу, а не требованию вьшолнять проверку допустимости этих данных. 2. В этих объявлени51х столбцов с данными типа XML приведено только ключевое слово xml, но не даны какие-либо указания об использовании по отношению к ним схемы XML, поэтому сами столбцы рассматриваются как не связанные со схемой XML. Из того, что столбец не связан со схемой, следует, что СУБД SQL Server действительно не имеет информации о том, каким требованиям должны удовлетворять хранимые в столбце данные типа XML, чтобы их можно было считать допустимыми. Первая из указанных особенностей объявленных столбцов присуща любому столбцу, который определен как столбец с данных типа XML, а не с данными, представленными в виде обычного текста. Более подробные сведения приведены в следующем разделе с описанием данных типа XML. Вторая особенность может относиться к любому типу данных, применяемому в SQL Server; она показывает, что в объявлении можно привести информацию о том, допускается ли использование NULL-значений в соответствующем столбце или нет. Поэтому необходимо отметить, что фактически в приведенном выше объявлении осталась неиспользуемой возможность указать, что со столбцом с типом данньгх XML связана схема, обеспечивающая проверку допустимости хранящихся в нем данных XML. Из того, что в предьщущем примере используется объявление, не связанное со схемой, следует, что в СУБД SQL Sender отсутствует информация о структуре кода XML, хранящегося в столбце с типом данных XML, поэтому не может проводиться проверка допустимости значений данньгх в столбце. С другой стороны, если в объявлении столбца будет указана схема XML, с которой он связан, то появится возможность обеспечить проверку допустимости данных XML, представленных в столбце. Предположим, что в базе данных AdventureWorks уже имеются коллекции схем, применимые для проверки допустимости данных, которые должны быть помещены в два объявляемых столбца с типом данных XML, поэтому достаточно откорректировать приведенный выше оператор CREATE и ввести в него определения схем XML: CREATE TABLE Production.ProductModel { ProductModellD int IDENTITY(1,1) PRIMARY KEY NOT NULL, Name dbo.Name NOT NULL, CatalogDescription xml (CONTENT [Production].[ProductDescriptionSchemaCollection]) NULL, Instructions xml (CONTENT [Production] . [ManuInstructionsScliemaCollection] ) NULL, ModifiedDate datetime NOT NULL CONSTRAINT DF ProductModel ModifiedDate DEFAULT (GETDATE()) В рассматриваемом примере применяется такой же формат объявления, который использовался в примерах, относящихся к базе данных AdventureWorks. Для вставки строки в таблицу Production. ProductModel необходимо либо оставить поля CatalogDescription и Instructions незаполненными, либо задать код XML, который рассматривается как допустимый при его проверке по соответствующей схеме. Коллекции схем XML Коллекция схем XML- это не что иное, как совокупность документов схемы, состоящая из одного или нескольких документов и хранящаяся в базе данных под одним именем. Имя коллекции схем используется в качестве дескриптора для данного конкретного множества схем. Указание в объявлении столбца (или переменной) с типом данных XML имени коллекции схем равносильно указанию на то, что столбец (или переменная), успешно прошедший проверку по всем схемам этой коллекции, должен рассматриваться как допустимый. Предусмотрена возможность просматривать существующие коллекции схем. Для этого используется встроенная функция XML SCHEMA NAMESPACE (). Вызов этой функции имеет следующий синтаксис: XML SCHEMA. NAiyiESPACE ( <SQL Server schema> , <xml schema collection> , [<namespace>] ) Приведенный выше оператор является довольно сложным, поэтому рассмотрим определения параметров функции XML SCHEMA NAMESPACE (), приведенные в табл. 16.1. Таблица 16.1. Определения параметров функции xmlschemanamespace О Параметр Описание SQL Server Определяет схему реляционной базы данных (которую не следует путать schema со схемой XML). Например, реляционной схемой, относящейся к таблице Production. ProductModel, является Production. А для таблицы Sales . SalesOrderHeader реляционной схемой служит Sales xml schema Имя, которое было указано при создании применяемой коллекции схем XML. collection в приведенном выше примере создания таблиц были указаны коллекции схем XML, обозначенные как ProductDescriptionScemaCollection и ManuInstructionSSchemaCollection namespace Необязательный параметр namespace применяется для обозначения конкретного пространства имен, относящегося к коллекции схем XML. Напомним, что коллекции схем XML могут содержать несколько документов схемы, а этот параметр позволяет выбирать те документы схемы, которые относятся к указанному пространству имен Итак, воспользовавшись этим синтаксическим определением применительно к коллекции схем Production.ManuInstructionsScheraaCollection, можно выполнить следующий запрос: SELECT XML SCHEMA NAMESPACE(Production, ManuInstructionsSchemaCollection) Данный запрос приводит к получению большого объема неотформатированного кода XML: <xsd:schema xmlns:xsd= http: www.w3.org/2001/XMLSchema xmlns:t= http: schemas .microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions targetNamespace= http: schemas.microsoft.com/sqlserver/2 0 04/0 7/adventure-works/ ProductModelManuInstructions elementFormDefault= qualified xxsd:element name= root xxsd:complexType mixed= true xxsd:complexContent mixed= true > <xsd:restriction base= xsd:anyType xxsd:sequencexxsd:element name= Location maxOccurs= unbounded xxsd:complexType mixed= true xxsd:complexContent mixed= true xxsd: restriction base= xsd: anyType xxsd; sequencexxsd: element name= step type= trStepType maxOccurs= unbounded /></xsd:sequencexxsd:attribute name= LocationID type= xsd:integer use= required /xxsd:attribute name= SetupHours type= xsd:decimal /xxsd:attribute name= MachineHours type= xsd:decimal /xxsd:attribute name= LaborHours type= xsd:decimal /xxsd:attribute name= LotSize type= xsd:decimal /></xsd:restriction> </xsd: coraplexContent ></xsd: coraplexTypex/xsd: element ></xsd: sequence ></xsd: restrict ion> < /xsd: complexContent >< /xsd: complexType >< /xsd: element xxsd: coraplexType name= StepType mixed= true xxsd:complexContent mixed= true xxsd:restriction base= xsd:anyType > <xsd:choice minOccurs= 0 maxOccurs= unbounded xxsd:element name= tool type= xsd: string /xxsd: element name= material type= xsd: string /xxsd:element name= blueprint type= xsd:string /xxsd:element name= specs type= xsd:string /xxsd:element name= diag type= xsd: string /x/xsd: choicex/xsd: restriction> </xsd:complexContentX/xsd:complexTypeX/xsd:schema> СУБД SQL Server удаляет все пробельные символы, находящиеся между дескрипторами XML, поэтому следует учитывать, что после создания коллекций схем из совокупности документов схем XML, содержащих всевозможные символы форматирования, предназначенные для повышения удобства чтения, все эти символы в СУБД SQL Server будут уничтожены для повышения эффективности хранения. Следует отметить, что по умолчанию в программе Management Studio количество возвращаемых символов в текстовых результатах не может превышать 256 символов. Поэтому при использовании этой программы для просмотра текстовых результатов следует перейти к элементу ToolsOptionsQuery Resu!ts=>SQL Server=Results to Text и задать другое значение максимального количества отображаемых символов. Создание, изменение и удаление коллекций схем XML Операторы CREATE, ALTER и DROP применительно к коллекциям схем XML действуют по такому принципу, который в основном является совместимым со способом выполнения аналогичных операторов, предусмотренным в настоящее время в СУБД SQL Server. Ниже приведено краткое описание этих операторов, но особое внимание уделено оператору ALTER, поскольку он имеет несколько важных отличительных особенностей по сравнению с другими операторами ALTER, с которыми мы сталкивались до сих пор. Оператор create xml schema collection И в этом случае оператор CREATE имеет тот же типичный синтаксис CREATE <ob j act type> <object name>, рассматриваемый во всей этой книге, но в нем предусмотрено также ключевое слово AS, которое применяется в операторах создания хранимых процедур, представлений и других менее структурированных объектов: CREATE XML SCHEMA COLLECTION [<SQL Server schema>.] <collection name> AS { <schema text> <variable containing the schema text> } Поэтому в случае необходимости создать, например, коллекцию схем XML, аналогичную коллекции схем Product ion. ManuInstructionsSchemaCollect ion в базе данных AdventureWorks, можно выполнить такой оператор: CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollectionSummaryRequired AS <xsd:schema targetNamespace= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModeiWarrAndMain xmlns= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductMode1WarrAndMain elementFormDefault= qualified xmlns:xsd= http* www.w3.org/2001/XMLSchema > <xsd:element name= Warranty >
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |