Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мультимедиа.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
233.67 Кб
Скачать

16.Стандартные пространства имен. Использование элементов xhtml в xml-документах как пространство имен.

Есть еще один тип описания пространства имен, который может использоваться для ассоциирования идентификаторов пространств имен с именами элементов. Они известен как описание стандартного пространства имен, которое использует следующий синтаксис:

xmlns="<namespace identifier>"

Обратите внимание, что здесь нет префикса. Когда используется описание стандартного пространства имен, все неопределенные имена элементов автоматически ассоциируются с установленным идентификатором пространства имен. Однако описания стандартных пространств имен абсолютно никак не влияют на атрибуты. Единственный способ ассоциировать атрибут с идентификатором пространства имен — через префикс.

Рассмотрим следующий пример:

<d:student xmlns:d="http://www.develop.com/student"

xmlns="urn:foo" id="3235329"

>

<name>Jeff Smith</name>

<language xmlns="">C#</language>

<rating>35</rating>

</d:student>

Здесь "student" из пространства имен http://www.develop.com/student, а "name" и "rating" из стандартного пространства имен urn:foo. Атрибут id не принадлежит пространству имен, поскольку атрибуты автоматически не ассоциируются с идентификатором стандартного пространства имен.

Этот пример также иллюстрирует, что вы можете отменить объявление стандартного пространства имен, просто установив его идентификатор опять в пустую строку, как показано в элементе language (помните, что вы не можете делать этого с описаниями префиксов). В результате элемент language также не принадлежит пространству имен.

Синтаксис стандартных пространств имен был разработан для удобства, но принес больше вреда, чем пользы. Обычно трудности вызывает тот факт, что элементы и атрибуты по-разному интерпретируются и не сразу видно, что вложенным элементам присвоен идентификатор стандартного пространства имен. Тем не менее, в конце концов, выбор между префиксами и стандартными пространствами имен — это, преимущественно, вопрос стиля, за исключением случаев, когда начинают действовать атрибуты.

Использование элементов XHTML в XML-документах как пространство имен.

Корневой элемент документа обязан обозначить пространство имён XHTML путём использования атрибута xmlns[XMLNAMES]. Пространство имён XHTML определено в http://www.w3.org/1999/xhtml.

17. Описание структуры xml-документа при помощи xml Schema. Описание элементов, атрибутов, вложенных элементов и символьных данных. Число вхождений элементов.

XML Schema – язык описания структуры XML-документа.

Как большинство языков описания XML, XML Schema была задумана для определения правил, которым должен подчиняться документ. Но, в отличие от других языков, XML Schema была разработана так, чтобы её можно было использовать в создании программного обеспечения для обработки документов XML.

Недостатки XML DTD перед XML Schema

Отличный от XML синтаксис языка. То есть, DTD не является XML. В связи с этим могут возникать разнообразные проблемы с кодировкой и верификацией XML-документов.

Нет проверки типов данных. В XML DTD существует лишь один тип данных – строка. В связи с этим, например, если в числовом поле будет текст, документ все равно пройдет верификацию, так как XML DTD не может проверить тип данных.

Нельзя поставить в соответствие одному XML-документу больше одного DTD описания. То есть, верифицировать документ можно лишь одним DTD описанием. Если их несколько, то придется переделывать описания и совмещать все в одном файле, что очень неудобно.

Если быть кратким, то XML Schema делает следующее:

Описывает названия элементов и атрибутов (словарь).

Описывает взаимосвязь между элементами и атрибутами, а также их структуру (модель содержания).

Описывает типы данных.

Особенностью XML Schema является то, что она описывает не сам документ, а пространство имен. В связи с этим чаще всего никаких упоминаний о ней в документе нет. Обработчик сам ставит в соответствие нужную вам схему без использования каких-либо инструкций в XML-документе.

На случай, если обработчик не знает где лежит схема, мы можем указать, где ее искать. Делается это при помощи специального атрибута «schemaLocation»: xsi:schemaLocation="http://www.site.com/product.xsd"

На данный момент при помощи схем можно описывать практически все. То есть, схема – это универсальный способ описания грамматики данных, который может применяться не только для верификации XML-документов, но и описания баз данных и т.д. Таким образом, область применения схем на данный момент очень широкая.

Пример XML Schema для валидации XML-документа.

1

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

2

<xs:element name="книга" type="Книга" />

3

<xs:complexType name="Книга">

4

<xs:sequence>

5

<xs:element name="название" type="xs:string" />

6

<xs:element name="цена" type="xs:decimal" />

7

</xs:sequence>

8

</xs:complexType>

9

</xs:schema>

При помощи данной схемы можно проверить XML-документ следующего содержания.

1

<книга xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "book.xsd">

2

<название>Основы XML</название>

3

<цена>300</цена>

4

</книга>

Для создания XML схем используется уже известный нам XML. Единственное отличие здесь в том, что в XML Schema уже определены элементы, в отличие от обычного XML. В связи с этим используются пространства имен. В данном случае обязательным пространством имен будет «http://www.w3.org/2001/XMLSchema», которое будет задаваться при помощи префиксов «xs».

Можно использовать как префиксы пространств имен, так и задавать пространство имен для корневого элемента. Как таковой разницы здесь нет. Каждый сам решает, как ему поступать в данной ситуации. Обычно используются префиксы «xs» или «xsd».

Расшифровка элементов в примере:

<xs:element name="книга" type="Книга" /> — объявляем элемент «книга» с типом «Книга».

<xs:complexType name="Книга"> — объявляем комплексный тип с именем «Книга» (xs:complexType – может содержать в себе вложенные элементы).

<xs:sequence> — объявление вложенности. То есть, тип будет содержать вложенные элементы.

<xs:element name="название" type="xs:string" /> — объявляем элемент с именем «название» (стандартного типа «строка» — xs:string).

<xs:element name="цена" type="xs:decimal" /> — объявляем элемент с именем «цена» (стандартного типа «число» — xs:decimal).

Описание элементов в XML Schema

Элементы бывают простыми и сложными.

Простые элементы не могут иметь атрибуты и содержимое смешанного типа, а сложные – могут. Содержимое смешанного типа – это возможность использовать внутри элемента дочерние элементы и текст (смешанное содержимое) .Простые определяются с помощью вложенного элемента <xs:simpleType>, сложные - <xs:complexType>.

Последовательность элементов и типов не играет роли. Схема будет работать в любом случае.

Элементы обладают обязательными атрибутами name и type, определяющими имя элемента и его тип. Например: <xs:element name="computer" type="xs:string">

В схемах XML поддерживаются все наиболее распространенные в языках программирования типы данных, а именно:

xs:string – строковый (символьный) тип

xs:decimal - десятичное число

xs:boolean – true/false

xs:float – число с плавающей точки

xs:date (1950-03-26) - дата

xs:time (15:30:01) - время

и др.

Второй способ написания XML Schema (первый в примере выше), который основывается на том, чтобы описывать тип сразу внутри элемента. Данный способ подойдет в том случае, если вы не планируете использовать одно и то же описание для разных элементов.

01

<?xml version="1.0" encoding="utf-8" ?>

02

<xs:schema

03

xmlns:xs="http://www.w3.org/2001/XMLSchema">

04

<xs:element name="root">

05

<xs:complexType>

06

<xs:sequance>

07

<xs:element name="name" type="xs:string" />

08

<xs:element name="age" type="xs:integer" />

09

</xs:sequance>

10

</xs:complexType>

11

</xs:element>

12

</xs:schema>

Элемент объявляется при помощи специальной конструкции «element» с использованием соответствующего префикса. В данном случае мы определяем элемент с названием «root» без указания типа (type), так как он будет описан внутри элемента. То есть, есть два способа описания элементов.