An xsd example

Введение в XML¶

XML ( англ. eXtensible Markup Language) — расширяемый язык разметки,
предназначенный для хранения и передачи данных.

Простейший XML-документ выглядит следующим образом:

<?xml version="1.0" encoding="windows-1251"?>
<book category="WEB">
   <title lang="en">Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
   <price></price>
</book>

Первая строка — это XML декларация. Здесь определяется версия XML (1.0) и кодировка файла. На следующей строке описывается корневой элемент документа (открывающий тег). Следующие 4 строки описывают дочерние элементы корневого элемента ( , , , ). Последняя строка определяет конец корневого элемента (закрывающий тег).

Документ XML состоит из элементов (elements). Элемент начинается открывающим тегом (start-tag) в угловых скобках, затем идет содержимое (content) элемента, после него записывается закрывающий тег (end-teg) в угловых скобках.

Информация, заключенная между тегами, называется содержимым или значением элемента: . Т.е. элемент принимает значение . Элементы могут вообще не принимать значения.

Элементы могут содержать атрибуты, так, например, открывающий тег имеет атрибут , который принимает значение . Значения атрибутов заключаются в кавычки (двойные или ординарные).

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

Divide the Schema

The previous design method is very simple, but can be difficult to read and maintain when documents are complex.

The next design method is based on defining all elements and attributes first, and then referring to them using the ref attribute.

Here is the new design of the schema file («shiporder.xsd»):

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>
<!— definition of simple elements —>
<xs:element name=»orderperson» type=»xs:string»/>
<xs:element name=»name» type=»xs:string»/>
<xs:element name=»address» type=»xs:string»/>
<xs:element name=»city» type=»xs:string»/>
<xs:element name=»country» type=»xs:string»/>
<xs:element name=»title» type=»xs:string»/>
<xs:element name=»note» type=»xs:string»/>
<xs:element name=»quantity» type=»xs:positiveInteger»/>
<xs:element name=»price» type=»xs:decimal»/>
<!— definition of attributes —>
<xs:attribute name=»orderid» type=»xs:string»/>
<!— definition of complex elements —>
<xs:element name=»shipto»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element ref=»name»/>
     
<xs:element ref=»address»/>
     
<xs:element ref=»city»/>
     
<xs:element ref=»country»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>
<xs:element name=»item»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element ref=»title»/>
     
<xs:element ref=»note» minOccurs=»0″/>
     
<xs:element ref=»quantity»/>
     
<xs:element ref=»price»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>
<xs:element name=»shiporder»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element ref=»orderperson»/>
     
<xs:element ref=»shipto»/>
     
<xs:element ref=»item» maxOccurs=»unbounded»/>
   
</xs:sequence>
   
<xs:attribute ref=»orderid» use=»required»/>
 
</xs:complexType>
</xs:element>
</xs:schema>

An XML Document

Let’s have a look at this XML document called «shiporder.xml»:

<?xml version=»1.0″ encoding=»UTF-8″?>
<shiporder orderid=»889923″
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:noNamespaceSchemaLocation=»shiporder.xsd»>
 
<orderperson>John Smith</orderperson>
 
<shipto>
   
<name>Ola Nordmann</name>
   
<address>Langgt 23</address>
   
<city>4000 Stavanger</city>
   
<country>Norway</country>
 
</shipto>
 
<item>
   
<title>Empire Burlesque</title>
   
<note>Special Edition</note>
   
<quantity>1</quantity>
   
<price>10.90</price>
 
</item>
 
<item>
   
<title>Hide your heart</title>
   
<quantity>1</quantity>
   
<price>9.90</price>
 
</item>
</shiporder>

The XML document above consists of a root element, «shiporder»,
that contains a required attribute called «orderid». The «shiporder» element contains three
different child elements: «orderperson», «shipto» and «item». The «item» element
appears twice, and it contains a «title», an optional «note» element, a «quantity», and a «price»
element.

The line above: xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» tells the XML parser that this document should be validated against a schema.
The line: xsi:noNamespaceSchemaLocation=»shiporder.xsd» specifies WHERE the schema resides (here it is in the same folder as «shiporder.xml»).

Разновидности XSD-файлов

Основная принадлежность в формате XSD

.XSD

Форматирование: .xsd
Группа: XML Schema Definition

Расширение XSD Файл формат файла, который в основном используется для файлов, которые содержат данные описания схемы XML. XML-схемы обеспечивают средства для определения структуры, содержания и семантики XML документов, а также позволяет машинам выполнять правила, сделанные людьми. В XSD файлы используются в качестве замены для Document Type Definition файлов (.dtd).

Программист: Unknown Developer
Дивизион: Файлы разработчика
Ключ реестра: HKEY_CLASSES_ROOT\.xsd

Программные обеспечения, открывающие XML Schema Definition:

Microsoft Visual Studio, разработчик — Microsoft Corporation

Windows

Oxygen XML Editor 19, разработчик — Syncro Soft

Windows
Mac
Linux

Liquid Technologies Liquid XML Studio, разработчик — Liquid Technologies

Windows

Microsoft Office Open XML File Format Converter, разработчик — Microsoft Corporation

Mac

Microsoft XML Notepad, разработчик — Microsoft Corporation

Windows

Использование именованных типов

Способ третий дизайн определяет классы или типы, что позволяет повторно использовать определения элементов. Это делается путем именования элементов simpleTypes и complexTypes, а затем указать на них через type атрибута элемента.

Вот уже третий дизайн файла схемы («shiporder.xsd») :

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>
<xs:simpleType name=»stringtype»>
 
<xs:restriction base=»xs:string»/>
</xs:simpleType>
<xs:simpleType name=»inttype»>
 
<xs:restriction base=»xs:positiveInteger»/>
</xs:simpleType>
<xs:simpleType name=»dectype»>
 
<xs:restriction base=»xs:decimal»/>
</xs:simpleType>
<xs:simpleType name=»orderidtype»>
 
<xs:restriction base=»xs:string»>
   
<xs:pattern value=»{6}»/>
 
</xs:restriction>
</xs:simpleType>
<xs:complexType name=»shiptotype»>
 
<xs:sequence>
   
<xs:element name=»name» type=»stringtype»/>
   
<xs:element name=»address» type=»stringtype»/>
   
<xs:element name=»city» type=»stringtype»/>
   
<xs:element name=»country» type=»stringtype»/>
 
</xs:sequence>
</xs:complexType>
<xs:complexType name=»itemtype»>
 
<xs:sequence>
   
<xs:element name=»title» type=»stringtype»/>
   
<xs:element name=»note» type=»stringtype» minOccurs=»0″/>
   
<xs:element name=»quantity» type=»inttype»/>
   
<xs:element name=»price» type=»dectype»/>
 
</xs:sequence>
</xs:complexType>
<xs:complexType name=»shipordertype»>
 
<xs:sequence>
   
<xs:element name=»orderperson» type=»stringtype»/>
   
<xs:element name=»shipto» type=»shiptotype»/>
   
<xs:element name=»item» maxOccurs=»unbounded» type=»itemtype»/>
 
</xs:sequence>
 
<xs:attribute name=»orderid» type=»orderidtype» use=»required»/>
</xs:complexType>
<xs:element name=»shiporder» type=»shipordertype»/>
</xs:schema>

Элемент ограничение указывает на то, что тип данных был получен из пространства имен типа данных XML-схемы W3C. Таким образом, следующий фрагмент означает, что значение элемента или атрибута должно быть значение строки:

<xs:restriction base=»xs:string»>

Элемент ограничение чаще используется, чтобы применить ограничения к элементам. Посмотрите на следующие строки из приведенной выше схеме:

<xs:simpleType name=»orderidtype»>
 
<xs:restriction base=»xs:string»>
   
<xs:pattern value=»{6}»/>
 
</xs:restriction>
</xs:simpleType>

Это указывает на то, что значение элемента или атрибута должно быть строкой, оно должно быть ровно шесть символов в строке, и эти символы должны быть числом от 0 до 9.

❮ Предыдущая Следующая Глава ❯

Создание XML-схемы

Теперь мы хотим создать схему для документа XML выше.

Мы начнем с открытия нового файла , который мы будем называть «shiporder.xsd» . Для того, чтобы создать схему мы могли бы просто следовать структуре в документе XML и определите каждый элемент, как мы находим его. Мы начнем со стандартной декларации XML с последующим хз: элемент схемы, который определяет схему:

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>…
</xs:schema>

В схеме выше мы используем стандартные пространства имен (xs) , и URI , связанный с этим пространством имен является определение языка схемы, который имеет стандартное значение http://www.w3.org/2001/XMLSchema.

Далее, мы должны определить «shiporder» элемент. Этот элемент имеет атрибут и содержит другие элементы, поэтому мы рассматриваем его как сложный тип. Дочерние элементы «shiporder» элемент окружен хз: элемент последовательности , которая определяет упорядоченную последовательность субэлементов:

<xs:element name=»shiporder»>
 
<xs:complexType>
   
<xs:sequence>
     

   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Затем мы должны определить «orderperson» элемент в качестве простого типа (так как она не содержит каких — либо атрибутов или других элементов). В типа (xs:string) с префиксом префикс пространства имен , связанного с XML — схемы , которая указывает заранее определенный тип данных схемы:

<xs:element name=»orderperson» type=»xs:string»/>

Далее, мы должны определить два элемента , которые имеют сложного типа: «shipto» и «item» . Мы начнем с определения «shipto» элемент:

<xs:element name=»shipto»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»name» type=»xs:string»/>
     
<xs:element name=»address» type=»xs:string»/>
     
<xs:element name=»city» type=»xs:string»/>
     
<xs:element name=»country» type=»xs:string»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

С помощью схем, которые мы можем определить количество возможных появлений для элемента с MaxOccurs и атрибутами MinOccurs. MaxOccurs определяет максимальное число вхождений для элемента и MinOccurs определяет минимальное число вхождений для элемента. Значение по умолчанию для обоих MaxOccurs и MinOccurs 1!

Теперь мы можем определить «item» элемент. Этот элемент может появляться несколько раз внутри «shiporder» элемента. Это определяется установкой maxOccurs атрибут «item» элемента «unbounded» , что означает , что там может быть много вхождений «item» элемент , как автор хочет

Обратите внимание на то, что «note» элемент не является обязательным. Мы определили это, установив minOccurs атрибут к нулю:

<xs:element name=»item» maxOccurs=»unbounded»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»title» type=»xs:string»/>
     
<xs:element name=»note» type=»xs:string» minOccurs=»0″/>
     
<xs:element name=»quantity» type=»xs:positiveInteger»/>
     
<xs:element name=»price» type=»xs:decimal»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Теперь мы можем объявить атрибут «shiporder» элемента. Поскольку это обязательный атрибут мы указываем использование = «требуется».

Note: Заявления атрибутов всегда должны прийти в последний раз :

<xs:attribute name=»orderid» type=»xs:string» use=»required»/>

Вот полный список файла схемы под названием «shiporder.xsd» :

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>
<xs:element name=»shiporder»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»orderperson» type=»xs:string»/>
     
<xs:element name=»shipto»>
       
<xs:complexType>
         
<xs:sequence>
           
<xs:element name=»name» type=»xs:string»/>
           
<xs:element name=»address» type=»xs:string»/>
           
<xs:element name=»city» type=»xs:string»/>
           
<xs:element name=»country» type=»xs:string»/>
         
</xs:sequence>
       
</xs:complexType>
     
</xs:element>
     
<xs:element name=»item» maxOccurs=»unbounded»>
       
<xs:complexType>
         
<xs:sequence>
           
<xs:element name=»title» type=»xs:string»/>
           
<xs:element name=»note» type=»xs:string» minOccurs=»0″/>
           
<xs:element name=»quantity» type=»xs:positiveInteger»/>
           
<xs:element name=»price» type=»xs:decimal»/>
         
</xs:sequence>
       
</xs:complexType>
     
</xs:element>
   
</xs:sequence>
   
<xs:attribute name=»orderid» type=»xs:string» use=»required»/>
 
</xs:complexType>
</xs:element>
</xs:schema>

Группа Показатели

Показатели группы используются для определения связанных наборов элементов.

Элемент группы

групп элементов определяются с декларацией группы, как это:

<xs:group name=»groupname»>

</xs:group>

Вы должны определить все, выбор, или последовательность элементов внутри декларации группы. Следующий пример определяет группу под названием «persongroup» , который определяет группу элементов , которые должны произойти в точной последовательности:

<xs:group name=»persongroup»>
 
<xs:sequence>
   
<xs:element name=»firstname» type=»xs:string»/>
   
<xs:element name=»lastname» type=»xs:string»/>
   
<xs:element name=»birthday» type=»xs:date»/>
 
</xs:sequence>
</xs:group>

После того, как вы определили группу, вы можете ссылаться на нее в другом определении, как это:

<xs:group name=»persongroup»>
 
<xs:sequence>
   
<xs:element name=»firstname» type=»xs:string»/>
   
<xs:element name=»lastname» type=»xs:string»/>
   
<xs:element name=»birthday» type=»xs:date»/>
 
</xs:sequence>
</xs:group>
<xs:element name=»person» type=»personinfo»/>
<xs:complexType name=»personinfo»>
 
<xs:sequence>
   
<xs:group ref=»persongroup»/>
   
<xs:element name=»country» type=»xs:string»/>
 
</xs:sequence>
</xs:complexType>

Группы атрибутов

Атрибут группы определяются с декларацией attributeGroup, как это:

<xs:attributeGroup name=»groupname»>

</xs:attributeGroup>

Следующий пример определяет атрибут группу под названием «personattrgroup» :

<xs:attributeGroup name=»personattrgroup»>
 
<xs:attribute name=»firstname» type=»xs:string»/>
 
<xs:attribute name=»lastname» type=»xs:string»/>
 
<xs:attribute name=»birthday» type=»xs:date»/>
</xs:attributeGroup>

После того как вы определили группы атрибутов, вы можете ссылаться на нее в другом определении, как это:

<xs:attributeGroup name=»personattrgroup»>
 
<xs:attribute name=»firstname» type=»xs:string»/>
 
<xs:attribute name=»lastname» type=»xs:string»/>
 
<xs:attribute name=»birthday» type=»xs:date»/>
</xs:attributeGroup>
<xs:element name=»person»>
 
<xs:complexType>
   
<xs:attributeGroup ref=»personattrgroup»/>
 
</xs:complexType>
</xs:element>

❮ Предыдущая Следующая Глава ❯

Verify the output

You’ll see the following result −

students.xml is valid against students.xsd

XSD — Simple Types

In this chapter, we’ll see Simple Types that XSD defines.

S.No. Simple Type & Description
1

Simple Element can contain only text. It can not contain any other element.

2

Attribute is itself a type and is used in Complex Element.

3

Restriction defines the acceptable values of an XML element.

XSD — Complex Types

Complex Element is an XML element which can contain other elements and/or attributes. We can create a complex element in two ways −

  • Define a complex type and then create an element using the type attribute

  • Define a complex type directly by naming

Define a Complex Type and then create an element using type attribute.

<xs:complexType name = "StudentType">
   <xs:sequence>
      <xs:element name = "firstname" type = "xs:string"/>
      <xs:element name = "lastname" type = "xs:string"/>
      <xs:element name = "nickname" type = "xs:string"/>
      <xs:element name = "marks" type = "xs:positiveInteger"/>
   </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
</xs:complexType>

<xs:element name = 'student' type = 'StudentType' />			 

Define a Complex Type directly by naming.

<xs:element name = "student">
   <xs:complexType>   
      <xs:sequence>
         <xs:element name = "firstname" type = "xs:string"/>
         <xs:element name = "lastname" type = "xs:string"/>
         <xs:element name = "nickname" type = "xs:string"/>
         <xs:element name = "marks" type = "xs:positiveInteger"/>
      </xs:sequence>
   <xs:attribute name = 'rollno' type = 'xs:positiveInteger'/>
   </xs:complexType>
<xs:element>

Following is the list of Complex Types that XSD supports.

S.No. Simple Type & Description
1

Complex Empty complex type element can only have attributes but no contents.

2

Elements-Only complex type element can only contain elements

3

Text-Only complex type element can only contain attribute and text.

4

Mixed complex type element can contain element, attribute and text.

5

Indicators controls the ways how elements are to be organized in an XML document.

6

The <any> element is used for elements which are not defined by schema

7

The <anyAttribute> attribute is used for attribute which are not defined by schema.

String data types are used to represent characters in the XML documents.

Устранение неполадок

Частые проблемы с открытием XSD

Отсутствует Microsoft Visual Studio

При двойном щелчке XSD-файла может появиться диалоговое окно операционной системы с сообщением о том, что он «Не удается открыть этот тип файла». Обычно это означает, что Microsoft Visual Studio не установлен в %%os%%. Это не позволит вам дважды щелкнуть, чтобы открыть XSD-файл, потому что ОС не знает, как его обрабатывать.

Совет: Если вам извстна другая программа, которая может открыть файл XSD, вы можете попробовать открыть данный файл, выбрав это приложение из списка возможных программ.

Устаревший Microsoft Visual Studio

Файл XML Schema Definition несовместим с Microsoft Visual Studio, поскольку возможно, установлена неправильная версия. Вам нужно будет загрузить более новую версию Microsoft Visual Studio, если у вас нет правильной версии. Основной причиной этой проблемы является то, что файл XML Schema Definition был создан другой (более новой) версией Microsoft Visual Studio, чем установленная.

Совет . Иногда вы можете получить подсказки о правильной версии программы, щелкнув правой кнопкой мыши XSD-файл, выбрав «Свойства» и посмотрев информацию о версии.

В первую очередь проблемы, возникающие при открытии XSD-файлов, связаны с тем, что на вашем компьютере установлена неправильная версия Microsoft Visual Studio.

Предполагая, что у вас установлена правильная версия Microsoft Visual Studio, другие проблемы могут помешать вам открывать XSD-файлы. Могут возникнуть и другие проблемы — не связанные с программным обеспечением — мешающие вам открывать XSD-файлы. Другие причины, способствующие этому:

Create an XML Schema

Now we want to create a schema for the XML document above.

We start by opening a new file that we will call «shiporder.xsd». To create the schema we could simply follow
the structure in the XML document and define each element as we find it. We will start with the standard XML declaration followed by the xs:schema element that defines a schema:

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>…
</xs:schema>

In the schema above we use the standard namespace (xs), and the URI
associated with this namespace is the Schema language definition, which has the
standard value of http://www.w3.org/2001/XMLSchema.

Next, we have to define the «shiporder» element. This element has an
attribute and it contains other elements, therefore we consider it as a complex
type. The child elements of the «shiporder» element is surrounded by a
xs:sequence element that defines an ordered sequence of sub elements:

<xs:element name=»shiporder»>
 
<xs:complexType>
   
<xs:sequence>
     

   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Then we have to define the «orderperson» element as a simple type (because it does
not contain any attributes or other elements). The type (xs:string) is prefixed
with the namespace prefix associated with XML Schema that indicates a predefined
schema data type:

<xs:element name=»orderperson» type=»xs:string»/>

Next, we have to define two elements that are of the complex type: «shipto» and
«item». We start by defining the «shipto» element:

<xs:element name=»shipto»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»name» type=»xs:string»/>
     
<xs:element name=»address» type=»xs:string»/>
     
<xs:element name=»city» type=»xs:string»/>
     
<xs:element name=»country» type=»xs:string»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

With schemas we can define the number of possible occurrences for an element
with the maxOccurs and minOccurs attributes. maxOccurs specifies the maximum
number of occurrences for an element and minOccurs specifies the minimum number
of occurrences for an element. The default value for both maxOccurs and
minOccurs is 1!

Now we can define the «item» element. This element can appear multiple times
inside a «shiporder» element. This is specified by setting the maxOccurs
attribute of the «item» element to «unbounded» which means that there can be as
many occurrences of the «item» element as the author wishes. Notice that the
«note» element is optional. We have specified this by setting the minOccurs
attribute to zero:

<xs:element name=»item» maxOccurs=»unbounded»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»title» type=»xs:string»/>
     
<xs:element name=»note» type=»xs:string» minOccurs=»0″/>
     
<xs:element name=»quantity» type=»xs:positiveInteger»/>
     
<xs:element name=»price» type=»xs:decimal»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

We can now declare the attribute of the «shiporder» element. Since
this is a required attribute we specify use=»required».

Note: The attribute declarations must always come last:

<xs:attribute name=»orderid» type=»xs:string» use=»required»/>

Here is the complete listing of the schema file called «shiporder.xsd»:

<?xml version=»1.0″ encoding=»UTF-8″ ?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»>
<xs:element name=»shiporder»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»orderperson» type=»xs:string»/>
     
<xs:element name=»shipto»>
       
<xs:complexType>
         
<xs:sequence>
           
<xs:element name=»name» type=»xs:string»/>
           
<xs:element name=»address» type=»xs:string»/>
           
<xs:element name=»city» type=»xs:string»/>
           
<xs:element name=»country» type=»xs:string»/>
         
</xs:sequence>
       
</xs:complexType>
     
</xs:element>
     
<xs:element name=»item» maxOccurs=»unbounded»>
       
<xs:complexType>
         
<xs:sequence>
           
<xs:element name=»title» type=»xs:string»/>
           
<xs:element name=»note» type=»xs:string» minOccurs=»0″/>
           
<xs:element name=»quantity» type=»xs:positiveInteger»/>
           
<xs:element name=»price» type=»xs:decimal»/>
         
</xs:sequence>
       
</xs:complexType>
     
</xs:element>
   
</xs:sequence>
   
<xs:attribute name=»orderid» type=»xs:string» use=»required»/>
 
</xs:complexType>
</xs:element>
</xs:schema>

Показатели Встречаемость

Показатели Встречаемость используются для определения, как часто может произойти элемент.

Note: Для всех «Order» и «Group» показателей (любой, все, выбор, последовательность, название группы, и группа справки) значение по умолчанию для MaxOccurs и MinOccurs 1.

MaxOccurs Индикатор

<maxOccurs> индикатор определяет максимальное количество раз может возникнуть элемент:

<xs:element name=»person»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»full_name» type=»xs:string»/>
     
<xs:element name=»child_name» type=»xs:string» maxOccurs=»10″/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Приведенный выше пример показывает , что «child_name» элемент может происходить как минимум один раз (значение по умолчанию для MinOccurs 1) и не более десяти раз в «person» элемента.

MinOccurs Индикатор

<minOccurs> индикатор определяет минимальное число раз может произойти элемент:

<xs:element name=»person»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»full_name» type=»xs:string»/>
     
<xs:element name=»child_name» type=»xs:string»
     
maxOccurs=»10″ minOccurs=»0″/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Приведенный выше пример показывает , что «child_name» элемент может происходить как минимум ноль раз и не более десяти раз в «person» элемента.

Tip: Чтобы разрешить элемент появляться неограниченное число раз, используйте MaxOccurs = «неограниченную» заявление:

A working example:

XML файл , который называется «Myfamily.xml» :

<?xml version=»1.0″ encoding=»UTF-8″?>
<persons xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:noNamespaceSchemaLocation=»family.xsd»>
<person>
 
<full_name>Hege Refsnes</full_name>
 
<child_name>Cecilie</child_name>
</person>
<person>
 
<full_name>Tove Refsnes</full_name>
 
<child_name>Hege</child_name>
 
<child_name>Stale</child_name>
 
<child_name>Jim</child_name>
 
<child_name>Borge</child_name>
</person>
<person>
 
<full_name>Stale Refsnes</full_name>
</person>
</persons>

Файл XML выше содержит корневой элемент с именем «persons» . Внутри этого корневого элемента мы определили три «person» элементы. Каждый «person» элемент должен содержать «full_name» элемент и может содержать до пяти «child_name» элементов.

Вот файл схемы «family.xsd» :

<?xml version=»1.0″ encoding=»UTF-8″?>
<xs:schema xmlns:xs=»http://www.w3.org/2001/XMLSchema»
elementFormDefault=»qualified»>
<xs:element name=»persons»>
 
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»person» maxOccurs=»unbounded»>
       
<xs:complexType>
         
<xs:sequence>
           
<xs:element name=»full_name» type=»xs:string»/>
           
<xs:element name=»child_name» type=»xs:string»
           
minOccurs=»0″ maxOccurs=»5″/>
         
</xs:sequence>
       
</xs:complexType>
     
</xs:element>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>
</xs:schema>

Element

Schema is the root element of XSD and it is always required.

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

The above fragment specifies that elements used in this schema are defined in http://www.tutorialspoint.com namespace. It is optional.

xmlns = "http://www.tutorialspoint.com"

The above fragment specifies that default namespace is http://www.tutorialspoint.com.

elementFormDefault = "qualified"

The above fragment indicates that any elements declared in this schema must be namespace qualified before using them in any XML Document.It is optional.

Индикаторы Заказать

Индикаторы заказа используются для определения порядка элементов.

Все Индикатор

<all> индикатор указывает , что дочерние элементы могут появляться в любом порядке, и что каждый дочерний элемент должен иметь место только один раз:

<xs:element name=»person»>
 
<xs:complexType>
   
<xs:all>
     
<xs:element name=»firstname» type=»xs:string»/>
     
<xs:element name=»lastname» type=»xs:string»/>
   
</xs:all>
 
</xs:complexType>
</xs:element>

Note: При использовании <all> индикатор вы можете установить <minOccurs> индикатор 0 или 1 , а <maxOccurs> индикатор может быть установлен только в 1 ( <minOccurs> и <maxOccurs> описаны ниже).

Выбор индикатора

<choice> индикатор указывает , что может происходить либо один дочерний элемент или другой:

<xs:element name=»person»>
 
<xs:complexType>
   
<xs:choice>
     
<xs:element name=»employee» type=»employee»/>
     
<xs:element name=»member» type=»member»/>
   
</xs:choice>
 
</xs:complexType>
</xs:element>

Индикатор чередования фаз

<sequence> индикатор указывает , что дочерние элементы должны появляться в определенном порядке:

<xs:element name=»person»>
  
<xs:complexType>
   
<xs:sequence>
     
<xs:element name=»firstname» type=»xs:string»/>
     
<xs:element name=»lastname» type=»xs:string»/>
   
</xs:sequence>
 
</xs:complexType>
</xs:element>

Резюме файла XSD

Эти файлы XSD можно просматривать с помощью пять существующего (-их) прикладных (-ого) программных (-ого) средств (-а), как правило, Microsoft Visual Studio, разработанного Microsoft Corporation. Оно связано с один основным (-и) типом (-ами) файла (-ов), но часто встречается в формате XML Schema Definition.
Большинство файлов XSD относится к Developer Files.

Просматривать файлы XSD можно с помощью операционных систем Windows, Mac и Linux. Они обычно находятся на настольных компьютерах (и ряде мобильных устройств) и позволяют просматривать и иногда редактировать эти файлы.

Рейтинг популярности данных файлов составляет «Низкий» и они обычно не используются.

Кодировки¶

И еще один важный момент, который стоит рассмотреть — кодировки. Существует множество кодировок, о них подробнее можно прочитать в статье Набор
символов.

Самыми распространенными кириллическими кодировками являются и . Последняя является одним из стандартов, но большая часть ФНС отчетности имеет кодировку .

В XML файле кодировка объявляется в декларации:

<?xml version="1.0" encoding="windows-1251"?>

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

Таблица I.3 — Смена кодировки в разных программах
Программа Кодировка
Notepad++ «Документ → Кодировка»
Geany «Документ → Установить кодировку»
Firefox «Вид → Кодировка»
Chrome «Настройка → Дополнительные инструменты → Кодировка»

XSD схема¶

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

После проверки документа на соответствие XML Schema читающая программа может создать модель данных документа, которая включает:

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

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

Подробнее об XSD смотрите:

  • XML Schema
  • XSD — умный XML

Примечание

Примером использования XSD cхем может служить электронная отчетность:

ФНС: Справочник налоговой и бухгалтерской отчетности

Поиск информации в XML файлах (XPath)¶

XPath ( англ. XML Path Language) — язык запросов к элементам
XML-документа. XPath расширяет возможности работы с XML.

XML имеет древовидную структуру. В документе всегда имеется корневой
элемент (инструкция к дереву отношения не имеет).
У элемента дерева всегда существуют потомки и предки, кроме корневого
элемента, у которого предков нет, а также тупиковых элементов (листьев
дерева), у которых нет потомков. Каждый элемент дерева находится на
определенном уровне вложенности (далее — «уровень»). У элементов на
одном уровне бывают предыдущие и следующие элементы.

Это очень похоже на организацию каталогов в файловой системе, и строки
XPath, фактически, — пути к «файлам» — элементам. Рассмотрим пример
списка книг:

<?xml version="1.0" encoding="windows-1251"?>
<bookstore>
   <book category="COOKING">
     <title lang="it">Everyday Italian</title>
     <author>Giada De Laurentiis</author>
     <year>2005</year>
     <price>30.00</price>
   </book>
   <book category="CHILDREN">
     <title lang="en">Harry Potter</title>
     <author>J K. Rowling</author>
     <year>2005</year>
     <price>29.99</price>
   </book>
   <book category="WEB">
     <title lang="en">Learning XML</title>
     <author>Erik T. Ray</author>
     <year>2003</year>
     <price>39.95</price>
   </book>
</bookstore>

XPath запрос вернет следующий результат:

<price>30.00</price>
<price>29.99</price>
<price>39.95</price>

Сокращенная форма этого запроса выглядит так: .

С помощью XPath запросов можно искать информацию по атрибутам. Например,
можно найти информацию о книге на итальянском языке: вернет .

Чтобы получить больше информации, необходимо модифицировать запрос вернет:

<book category="COOKING">
     <title lang="it">Everyday Italian</title>
     <author>Giada De Laurentiis</author>
     <year>2005</year>
     <price>30.00</price>
   </book>

В приведенной ниже таблице представлены некоторые выражения XPath и
результат их работы:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector