|
Программирование >> Программирование баз данных
<xsd:complexType> <xsd:sequence> <xsd:element name= WarrantyPeriod type= xsd:string /> <xsd:element name= Description type= xsd:string /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> <xs:schema targetNamespace= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription xmlns= http: schemas.microsoft.com/sqlserver/2 0 04/0 7/adventure-works/ProductModelDescription e1ement FormDe fault = qua1i f i ed xmlns:mstns= http: tempuri.org/XMLSchema.xsd xmlns:xs= http: www.w3.org/2001/XMLSchema xmlns:wm= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain > <xs:import namespace= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain /> <xs:element name= ProductDescription type= ProductDescription /> <xs:complexType name= ProductDescription > <xs:sequence> <xs:element name= Summary type= Summary minOccurs= 1 /> </xs:sequence> <xs:attribute name= ProductModelID type= xs:string /> <xs:attribute name= ProductModelName type= xs:string /> </xs:complexType> <xs:complexType name= Summary mixed= true > <xs:sequence> <xs:any processContents= skip namespace= http: www.w3.org/1999/xhtml minOccurs= 0 maxOccurs= unbounded /> </xs:sequence> </xs:complexType> </xs:schema> Напоминаем, что все URL должны быть введены в виде одной строки. Еще раз отметим, что оператор, показанный в этом примере, полностью аналогичен оператору создания коллекции схем Production.ManuInstructionsSchemaCollection, но автор внес изменения в схему, чтобы элемент Summary стал в ней обязательным, а не применяемым по усмотрению пользователя. Однако основная структура определения является той же, поэтому используются такие же пространства имен. Оператор alter xml schema collection Оператор модификации коллекции схем ALTER XML SCHEMA COLLECTION имеет некоторые отличия от операторов ALTER модификации других объектов, заключающиеся в том, что он допускает только добавление новых составляющих к коллекции. Этот оператор имеет следующий синтаксис: ALTER XML SCHEMA COLLECTION [<SQL Server schema>.] <collection name> ADD { <schema text> <variable containing the schema text> } Безусловно, не ишлючено, что в одном из следующих служебных пакетов будет предусмотрено расширение функциональных возможностей этого оператора, но на данный момент следует еще раз подчеркнуть, чпю он предназначен исключительно для добавления структурных компонентов в коллекции схем, а не их изменения или удаления. Оператор drop xml schema collection Оператор удаления коллекций схем DROP XML SCHEMA COLLECTION полностью относится к категории операторов, выполняющих исключительно те действия, которые соответствуют их определению, и удаляет указанные в нем объекты точно так же, как и любой другой оператор DROP: DROP XML SCHEMA COLLECTION [<SQL Server schema>.] <collection name> Поэтому, чтобы уничтожить созданную ранее коллекцию схем ProductDescriptionSchemaCol lectionSummaryRequired, можно выполнить следующий оператор: DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollectionSummaryRequired После выполнения этого оператора коллекция схем становится недоступной. Методы типа данных XML с типом данных XML связано несколько встроенных методов, которые относятся исключрггельно к типу данных XML, и в настоящее время нет больше никаких других типов данных, предоставляющих аналогичные возможности. Операторы вызова каждого из этих методов имеют немного отличный от других синтаксис, поскольку сами эти методы основаны на разных, но в основном соответствующих промышленным стандартам методам доступа XML. Но базовый синтаксис вызова методов стандартизирован: <instance of xml data type>.<method> Общее количество предусмотренных методов, которые описаны ниже, равно пяти. .query. Реализация языка XQuery, определяемого промышленным стандартом. Этот метод позволяет обращаться к данным в коде XML путем выполнения запросов, представленных на языке XQuery. Язык XQuery допускает возможность получения в одном запросе нескольких фрагментов данных, а не единственного значения. .value. Этот метод позволяет обращаться к отдельному значению, находящемуся в конкретном элементе или атрибуте. .modify. Метод .modify реализует собственное расширение языка XQuery, которое определено корпорацией Microsoft. Безусловно, возможности языка XQuery ограничиваются тем, что он позволяет выполнять лишь запросы к данным (язык XQuery не является языком модификации данных), но метод . modi f у дополняет язык XQuery, обеспечивая возможность его применения для модификации данных. .nodes. Этот метод позволяет разбивать данные XML на отдельные строки, которые в большей степени соответствуют реляционному подходу. .exist. Метод .exist типа данных XML во многом напоминает по своему назначению конструкцию IF EXISTS, широко применяемую в стандартном коде SQL, поскольку позволяет определить, существуют ли какие-то конкретно указанные данные. Отличительная особенность применения метода . exist состоит в том, что осуществляемая с его помощью проверка позволяет узнать, имеется ли какой-то конкретный узел или атрибут в проверяемом экземпляре кода XML. Метод . query (реализация языка XQuery в СУБД SQL Server) Метод . query представляет собой реализацию промышленного стандарта языка XQuery. Этот метод позволяет получить результаты, в основном аналогичные результатам, полученным с помощью запросов на языке SQL, за исключением того, что эти результаты относятся к узлам данных в коде XML, согласующимся с запросом, а не к реляционным строкам и столбцам. Для метода . query требуется формальный параметр, представляющий собой допустимый код XQuery, вьшолняемый применительно к указанному экземпляру данных XML. Например, если необходимо извлечь инструкции из документации к товару с идентификатором товара ProductID, равным 66, можно выполнить следующий оператор: SELECT ProductModellD, Instructions.query{declare namespace PI= http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions ; /PI:root/PI:Location/PI:step) AS Stpcx FROM Production.ProductModel WHERE ProductModellD =66 Напоминаем, что все URL должны быть введены в виде одной строки. Полученные результаты содержат довольно значительный объем информации, поэтому правая часть в них была отброшена, но нетрудно заметить, что выполненный запрос позволил осуществить выборку данных так, что получено лишь содержимое узлов, относящихся к уровню описания шагов инструкции (step) или к более низким уровням в иерархии элементов XML. ProductModellD Stpcx 66 <PI:step xmlns:PI= http: schemas.microsoft.com/sqlser- Put the <PI:material>Seat post Lug (Product N- </PI: stepxPI: step xmlns : PI = http: schemas .micro-Insert the <PI:material>Pinch Bolt (Product N- </PI: StepxPI: step xmlns : PI = http: schemas .micro-Attach the <PI:material>LL Seat (Product Numb- </PI: StepxPI: step xmlns : PI = http: schemas .micro-Inspect per specification <PI:specs>FI-620</P- </PI:step> (1 row(s) affected) Заслуживает также внимания то, что даже обработка данных с помощью метода типа данных XML приводит к получению результатов в виде одного поля, представленного в одной строке, в расчете на каждую строку данных в базе данных. Следует еще раз отметить, что метод .query не позволяет модифицировать данные; с его помощью можно выполнять только операции чтения. Кстати, следует подчеркнуть, что в этом операторе необходимо было привести объявление пространства имен. Но объявление пространства имен входит в состав объявления коллекции схем, указанной в ссылке, поэтому после раскрытия этого объявления создается весьма сложный запрос, почти недоступный для восприятия. Этот недостаток можно исправить с помощью объявления WITH XMLNAMESPACES (): WITH XMLNAMESPACES (http: schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions AS PI)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |