Пример заполнения/создания файла xml из xsd схемы, используя xdto

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»).

Программы для открытия и просмотра файлов в формате XML

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

Notepad++

Если ищете, чем открыть XML, попробуйте Notepad++ – универсальный текстовый редактор, предназначенный для создания и редактирования кода. Легкий, быстрый и простой, он идеально подходит для работы со всевозможными типами конфигурационных файлов. Редактором поддерживается подсветка синтаксиса, изменение кодировки, есть мощный встроенный поиск по разным параметрам, одним словом, всё, что нужно программисту и не только ему.

XMLPad

В отличие от Notepad++, XMLPad является узкоспециализированным редактором. Как раз то, чем можно и нужно открывать формат XML, поскольку создавался он именно для работы с файлами этого типа. Помимо просмотра и редактирования документов XML редактор XMLPad поддерживает их валидацию и инспектирование, конвертирование в DTD, импортирование данных из HTML и многое другое. Как и положено, в приложении имеется поддержка синтаксиса, есть средство поиска и замены. Из особенностей программы можно выделить наличие встроенного мини-браузера для открытия URL-ссылок.

Oxygen XML Editor

Тем, кто настроен на изучение веб-языков более серьезно, можно предложить Oxygen XML Editor – продвинутый и в то же время простой и удобный редактор XML на платформе Java. Программой поддерживается создание и редактирования файлов XML, XSL, XSD и DTD, также имеются встроенный конвертер в скрипты, отладчик XSLT и XQuery, средства для работы с визуальными диаграммами XML и множество других компонентов. Недостатки – программа платная, и в ней отсутствует поддержка русского языка.

XML Marker

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

Браузеры

Есть еще один простейший способ, как прочитать файл XML, правда, речь здесь идет только о чтении. Откройте в Google Chrome или любом другом браузере новую вкладку и перетащите XML-файл на окно обозревателя. Документ будет представлен в структурированном виде, с подсветкой синтаксиса, всё, как и положено.

XML-документы

Последнее обновление: 14.10.2019

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

Прежде чем перейти непосредственно к работе с XML-файлами, сначала рассмотрим, что представляет собой xml-документ и как он может хранить объекты, используемые в программе на c#.

Например, у нас есть следующий класс:

class User
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Company { get; set; }
}

В программе на C# мы можем создать список объектов класса User:

User user1 = new User { Name = "Bill Gates", Age = 48, Company = "Microsoft" };
User user2 = new User { Name = "Larry Page", Age = 42, Company = "Google" };
List<User> users = new List<User> { user1, user2 };

Чтобы сохранить список в формате xml мы могли бы использовать следующий xml-файл:

<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user name="Bill Gates">
    <company>Microsoft</company>
    <age>48</age>
  </user>
  <user name="Larry Page">
    <company>Google</company>
    <age>48</age>
  </user>
</users>

XML-документ объявляет строка . Она задает версию (1.0) и кодировку (utf-8) xml. Далее идет
собственно содержимое документа.

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

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

Элемент может иметь вложенные элементы и атрибуты. В данном случае каждый элемент user имеет два вложенных элемента и
и атрибут .

Атрибуты определяются в теле элемента и имеют следующую форму: . Например, ,
в данном случае атрибут называется и имеет значение

Внутри простых элементов помещается их значение. Например, — элемент имеет значение
.

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

Таким образом, весь список Users из кода C# сопоставляется с корневым элементом , каждый объект User — с элементом ,
а каждое свойство объекта User — с атрибутом или вложенным элементом элемента

Что использовать для свойств — вложенные элементы или атрибуты? Это вопрос предпочтений — мы можем использовать как атрибуты, так и вложенные элементы.
Так, в предыдущем примере вполне можно использовать вместо атрибута вложенный элемент:

<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user>
	<name>Bill Gates</name>
    <company>Microsoft</company>
    <age>48</age>
  </user>
  <user>
	<name>Larry Page</name>
    <company>Google</company>
    <age>48</age>
  </user>
</users>

Теперь рассмотрим основные подходы для работы с XML, которые имеются в C#.

НазадВперед

Структура языка XML

Да, мы не ошиблись: XML – это язык, но не программирования, а разметки. Можно сказать, что это аналог баз данных, но изначально этот инструмент разрабатывался специально для использования в веб-пространстве, поэтому его структура отличается от классических БД и, скорее, напоминает язык HTML. Но сходство это внешнее, заключающееся в наличие так называемых тегов – меток, которые обозначают начало и конец определённой структуры данных.

Поскольку XML создавался как универсальный расширяемый язык разметки, который действительно стал стандартом, его понимают многие программы и приложения, причём независимо от платформы.

Более того, формат можно использовать для обмена данными между различным программным обеспечением, а также для создания других, узкоспециализированных языков разметки (для работы с математическими, бухгалтерскими, медицинскими и прочими данными).

В качестве примера рассмотрим конкретные разработки, основанные на XML:

  • XHTML – язык разметки, используемый для создания веб-страниц и являющийся альтернативой HTML. В настоящее время развитие языка заморожено, новые версии больше не выпускаются, но практически все современные браузеры умеют интерпретировать файлы с таким расширением;
  • WSDL – язык, ориентированный на описание веб-сервисов, представляет собой протокол, описывающий, каким образом получить доступ к определённому веб-сервису и какие операции при этом нужно выполнять;
  • SVG – ещё один специфический язык, созданный на базе XML , специализирующийся на описании структуры векторной графики, позволяя легко масштабировать и обрабатывать такие элементы;
  • OWL – язык описания структуры знаний. Используется как элемент ООП для организации взаимодействия между классами объектов.

Как видим, язык XML является универсальным инструментом, используемым в самых разных сферах веб-разработки. Рассмотрим, чем можно открыть файлы с расширением XML стандартными средствами операционной системы.

Syntax

The basic syntax of a XSD is as follows −

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   targetNamespace = "http://www.tutorialspoint.com"
   xmlns = "http://www.tutorialspoint.com" elementFormDefault = "qualified">
   
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
            <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
               maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <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:schema>

Разновидности 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

Создание 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>

Разделите схемы

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

Следующий метод дизайн основан на определении всех элементов и атрибутов, а затем ссылаясь на них , используя ref атрибут.

Вот новый дизайн файла схемы («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>

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>

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

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

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

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

Документа XML

Давайте посмотрим на этот XML — документ под названием «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>

Документ XML выше состоит из корневого элемента, «shiporder» , который содержит обязательный атрибут под названием «orderid» . «shiporder» элемент содержит три различных дочерних элемента: «orderperson» , «shipto» и «item» . «item» элемент появляется дважды, и он содержит «title» , необязательный «note» элемент, «quantity» , и «price» элемент.

Линия выше: Xmlns: XSI = «http://www.w3.org/2001/XMLSchema-instance» говорит XML-анализатору, что этот документ должен быть проверен на схеме. Линия: XSI: noNamespaceSchemaLocation = «shiporder.xsd» указывает , где находится схемы (here it is in the same folder as «shiporder.xml») что и (here it is in the same folder as «shiporder.xml») .

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

Способ третий дизайн определяет классы или типы, что позволяет повторно использовать определения элементов. Это делается путем именования элементов 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.

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

Referencing Schema

Take a look at the following Referencing Schema −

<?xml version = "1.0"?>

<class xmlns = "http://www.tutorialspoint.com"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">  
   
   <student rollno = "393">    
      <firstname>Dinkar</firstname>
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>
xmlns = "http://www.tutorialspoint.com"

The above fragment specifies default namespace declaration. This namespace is used by the schema validator check that all the elements are part of this namespace. It is optional.

xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.tutorialspoint.com student.xsd">  

After defining the XMLSchema-instance xsi, use schemaLocation attribute. This attribute has two values, namespace and location of XML Schema, to be used separated by a space. It is optional.

students.xml

<?xml version = "1.0"?>

<class>  
   <student rollno = "393">
      <firstname>Dinkar</firstname>    
      <lastname>Kad</lastname>
      <nickname>Dinkar</nickname>
      <marks>85</marks>	 
   </student>
   
   <student rollno = "493">	 
      <firstname>Vaneet</firstname>
      <lastname>Gupta</lastname>
      <nickname>Vinni</nickname>
      <marks>95</marks>
   </student>
   
   <student rollno = "593">    
      <firstname>Jasvir</firstname>
      <lastname>Singh</lastname>
      <nickname>Jazz</nickname>
      <marks>90</marks>
   </student>
</class>

students.xsd

<?xml version = "1.0"?>

<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = 'class'>
      <xs:complexType>
         <xs:sequence>
             <xs:element name = 'student' type = 'StudentType' minOccurs = '0' 
                maxOccurs = 'unbounded' />
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <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:schema>

XSDValidator.java

import java.io.File;
import java.io.IOException;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;

import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.xml.sax.SAXException;

public class XSDValidator {
   public static void main(String[] args) {
      if(args.length !=2){
         System.out.println("Usage : XSDValidator <file-name.xsd> <file-name.xml>" );
      } else {
         boolean isValid = validateXMLSchema(args,args);
         
         if(isValid){
            System.out.println(args + " is valid against " + args);
         } else {
            System.out.println(args + " is not valid against " + args);
         }
      }
   }
   
   public static boolean validateXMLSchema(String xsdPath, String xmlPath){
      try {
         SchemaFactory factory =
            SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
            Schema schema = factory.newSchema(new File(xsdPath));
            Validator validator = schema.newValidator();
            validator.validate(new StreamSource(new File(xmlPath)));
      } catch (IOException e){
         System.out.println("Exception: "+e.getMessage());
         return false;
      } catch(SAXException e1){
         System.out.println("SAX Exception: "+e1.getMessage());
         return false;
      }
		
      return true;
   }
}

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.

Кодировки¶

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

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

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

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

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

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

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

Adblock
detector