Как я разбирал docx с помощью xslt

Поиск информации в 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 и
результат их работы:

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

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

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

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

Сущности¶

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

В примере ниже будет сгенерирована ошибка, так как в значении атрибута содержатся символы и .

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО<Мосавтогруз>"/>

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

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО"Мосавтогруз""/>

Чтобы ошибки не возникали, нужно заменить символ на его
сущность. В XML существует 5 предопределенных сущностей:

Таблица I.1 — Сущности

Сущность
Символ
Значение

меньше, чем

больше, чем

амперсанд

апостроф

кавычки

Примечание

Только символы и строго запрещены в XML. Символ допустим, но лучше его всегда заменять на сущность.

Таким образом, корректными будут следующие формы записей:

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО&quot;Мосавтогруз&quot;"/>

или

<НПЮЛ ИННЮЛ="7718962261" КПП="771801001" НаимОрг="ООО«Мосавтогруз»"/>

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.

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

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

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

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

Разновидности 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-файл напрямую. Вы можете открывать и редактировать их с помощью любого текстового редактора, просматривать их с помощью любого веб-браузера или использовать веб-сайт, который позволяет просматривать, редактировать и даже конвертировать их в другие форматы.

Используйте текстовый редактор при регулярной работе с XML

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

  1. Щелкните правой кнопкой мыши файл XML, который вы хотите открыть, выберите Открыть с помощью в контекстном меню, а затем выберите Блокнот.

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

  2. Файл открывается, но, как вы можете видеть, он теряет большую часть своего форматирования и записывает всё в две строки.
  3. Таким образом, блокнот может быть полезен для быстрой проверки XML-файла. Но, гораздо удобнее использовать более продвинутый инструмент, такой как Notepad++, который подсвечивает синтаксис и формат файла, как это можно ожидать.

    Вот тот же XML-файл, открытый в Notepad++

Использование веб-браузера для просмотра XML-файла

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

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

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

Использование онлайн-редактора для XML-файлов

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

Для примера используем CodeBeautify.org. Страница разделена на три раздела. Слева находится XML-файл, с которым вы работаете. В середине вы найдете несколько функций. Справа вы увидите результаты некоторых вариантов, которые вы можете выбрать.

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

Используйте кнопку Browse для загрузки XML-файла с вашего компьютера или кнопку Load URL для извлечения XML из интернет-источника

Кнопка Tree View отображает данные в хорошо отформатированной древовидной структуре на панели результатов, со всеми тегами, выделенными оранжевым цветом, и атрибутами справа от тегов.

Beatify отображает ваши данные в аккуратном, легко читаемом виде.

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

И, наконец, Вы можете использовать кнопку XML to JSON для преобразования XML в формат JSON, и кнопку Export to CSV для сохранения данных в виде файла значений, разделенных запятыми, или кнопку Download для загрузки любых изменений, которые вы сделали в новом XML-файле.

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

Частые проблемы с открытием 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-файлы. Другие причины, способствующие этому:

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>

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;
   }
}

Файл с расширением .xml Чем открыть?

Файл с расширением .xml — это текстовый файл в формате XML (от англ. eXtensible Markup Language) — расширяемый язык разметки, он описывает документ и частично описывает поведение программ, читающих XML-документы. Формат языка разрабатывался с расчетом применения широкого его в Интернете. Первоначально он планировался как замена языка разметки HTML, но в результате занял свое теперешнее место. Язык называеся расширяемым из-за возможности свободного расширения разметки, применяя ее к непосредственным задачам и потребностям использования. В настоящее время XML широко распространен в Интернете, применяется в документообороте, на его основе создано множество дополнительных форматов, например FB2, OpenXML, YML.

Открыть для просмотра или редактирования файл с расширением .xml можно с помощью обычного текстового редактора, например notepad, notepad+, AkelPad. Можно также воспользоваться интернет-браузером, например Google Chrome — интернет браузер, Mozilla Firefox — интернет браузер (особенно удобно с плагином XML Viewer) или Internet Explorer. Для открытия файла в интернет-браузере: запустите браузер, нажмите на клавиатуре Ctrl+O (латинская буква О; на компьютерах под управлением MacOS нужно нажимать Command+O), выберите необходимый вам xml-файл, нажмите ENTER.

Но более правильно открывать xml-файл в той программе или в контексте того сервиса, для которых xml-файл был создан.

Как открыть файл .xml какой программой?

Операционная система Чем прочитать Чем изменить
Windows

любой текстовый редактор

XML Notepad 2007

MS Excell

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

любой текстовый редактор

XML Notepad 2007

MS Excell

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

Linux

любой текстовый редактор

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

любой текстовый редактор

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

MacOS

любой текстовый редактор

MS Excell

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

любой текстовый редактор

MS Excell

LibreOffice — пакет офисных программ

OpenOffice — пакет офисных программ

Если вы не нашли ответ или нужную информацию, задайте вопрос через форму обратной связи. Или .

  • 1поделились
  • 0Facebook
  • 1Twitter
  • 0VKontakte
  • 0Google+
  • 0Odnoklassniki

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

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

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

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

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

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

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

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

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

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

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

Документа 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») .

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

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

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

Adblock
detector