SlideShare a Scribd company logo
XML  схема  (XML Schema) [email_address] Фёдор Малышкин
Фазы использования Конфигурация (всё пока нормально) малое использование код писался одним человеком большой вопрос по необходимости, вообще Веб-сервисы (мелкие странности) скрытие деталей библиотеками  JAXB   & JAX-WS Клерки (начинаются проблемы) ОЧЕНЬ много  XML  данных Отсутствие общей договорённости о форматах  XML Регрессионные ошибки при изменении форматов Сложность поддержания модульных тестов в актуальном состоянии (проекты  “eks-scripts” & “docFlow-engine” )
ОЧЕНЬ много  XML  данных <inbox action=&quot;new-inbox-item&quot; format=&quot;standart&quot;>  <from>fromId</from> <to>toId</to>  <route>REVIEW</route>  <item>docId-123</item> <cause>TO_REVIEW</cause>  <to-date>2008-05-15T15:46:49.081+04:00</to-date>  <tag>route-id:route-id</tag> <tag>action:review</tag>  <tag>reviewer:reviewerId</tag>  <tag>parent-route-id:incomingRouteId</tag> <tag>parent-klerk:INCOMING</tag>  <extended> <comment>comment</comment>  <file-attachment>file-id-01</file-attachment> </extended>  <operation type=&quot;reply&quot; id=&quot;reply-yes-no&quot; behaviour=&quot;close-on-reply&quot;> <yes-no>  <data-validator klerk=&quot;REVIEW&quot; question=&quot;ValidateData_review&quot;/> </yes-no>  </operation>  <operation type=&quot;action&quot; id=&quot;action-start-instruction&quot;> <start-workflow workflow='INSTRUCTION'> <parent-route-id>new assigned to review id</parent-route-id> <parent-klerk>REVIEW</parent-klerk> <parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user> </start-workflow>  </operation> </inbox>
Отсутствие общей договорённости о форматах  XML <parent-route-id>parent_route_id</parent-route-id> <parent-klerk>ORDER</parent-klerk> <parent-user>parent_user_id</parent-user> и <tag>route-stage:ASSIGNMENT</tag> <tag>parent-route-id:parentRouteId</tag> <tag>parent-klerk:CONTRACT</tag>
Регрессионные ошибки при изменении форматов XML
Сложность поддержания модульных тестов в актуальном состоянии
XML Schema (XML  схема ) XML Schema –  название стандарта, формат и синтаксис  XML  документа, описывающий  XML  структуры. Можно сказать, что это правила (типа регулярных выражений). Потом по этим правилам проверяется – соответствует ли  XML  документ этим правилам? XML  документ может сам заявлять, что он соответствует определённой схеме.
Какие проблемы решит Моментальная проверка существующих  XML  на соответствие новым правилам (быстрая корректировка кодов по провалившимся тестам) Единообразие  XML  данных – уменьшение  количества и упрощение кода по работе с  XML Создание общего словаря с аналитиками, которые всё же хотят знать какие данные передаются между клерками.
XML  документ со схемой <rootElement   xmlns=&quot;http://ru.sefer/schema/1&quot;   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;   xsi:schemaLocation=&quot;http://ru.sefer/schema/1 http://ru.sefer/schema/1.xsd&quot; > xmlns  – пространство имён по-умолчанию schemaLocation  – местоположение схемы
Введение Схема определяет список элементов и атрибутов, которые могут быть использованы в документе. Она также определяет порядок, в котором они появляются в  XML  и их типы. Язык описания  XML Schema – XML Schema Definition (XSD)
Преимущества XSD обеспечивает больше контроля   над структурой и типами, чем DTD . XSD позволяет создавать собственные типы данных. XSD позволяет накладывать ограничения на данные.  Синтаксис схемы такой же как у самого документа -  XML .  XML схема расширяема.
XML Spy
Oxygen
Типы данных Тип данных определяет, что может храниться внутри элемента .  XSD  предоставляет ряд предопределённых типов, которые можно классифицировать так : Примитивные :  базовые типы .  Наследованные :  определены с использованием других типов (называемых «базовыми»)   Атомарные :  примитивные или наследованные, которые не могут быть разбиты на более мелкие куски   Списки :  наследованный тип, содержащий серию атомарных Объединённые :  Результат объединения атомарных типов и списков
Элементы Существует 2 тип элементов: простые и сложные. Простой элемент Простой элемент не содержит   атрибутов или дочерних узлов Синтаксис объявления простого элмента : <xsd:element name=&quot;element-name&quot; type=&quot;data type&quot; minOccurs=&quot;nonNegativeInteger&quot; maxOccurs=&quot;nonNegativeInteger|unbounded&quot;/>
< PRODUCTDATA > < PRODUCT   PRODUCTID =&quot;P001&quot;  CATEGORY =&quot;BOOKS&quot;> < PRODUCTNAME >Gone With the Wind</ PRODUCTNAME > < DESCRIPTION > The backdrop of this book is the American  Civil War</ DESCRIPTION > < PRICE >25.00</ PRICE >   < QUANTITY >35</ QUANTITY > </ PRODUCT > </ PRODUCTDATA > <xsd:element name=&quot;PRODUCTNAME&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;DESCRIPTION&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;PRICE&quot; type=&quot;xsd:positiveInteger&quot;/> <xsd:element name=&quot;QUANTITY&quot; type=&quot;xsd:nonNegativeInteger&quot;/>
Элементы Сложные элементы Сложные элементы содержат другие элементы, атрибуты и сложный контент. Синтаксис: <xsd:complexType name=&quot;data type name&quot;> Content model declaration </xsd:complexType>
Элементы Определение нового простого типа на базу существующего простого типа : <xsd:simpleType name=&quot;phoneno&quot;> <xsd:restriction base=&quot;xsd:string&quot;> <xsd:length value=&quot;8&quot;/> <xsd:pattern value=&quot;\d{3}-\d{4}&quot;/> </xsd:restriction> </xsd:simpleType >
Элементы <xsd:simpleType name=&quot;num&quot;> <xsd:restriction base=&quot;xsd:positiveInteger&quot;> <xsd:maxInclusive value=&quot;400&quot;/> <xsd:minInclusive value=&quot;10&quot;/> </xsd:restriction> </xsd:simpleType>
Элементы Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом Синтаксис :  <xsd:element name=“ElementName&quot; type=“ComplexDataType&quot;/>
Элементы <xsd:complexType name=&quot;prdt&quot;> <xsd:sequence> <xsd:element name=&quot;PRODUCTNAME&quot;  type=&quot;xsd:string&quot;/> <xsd:element name=&quot;DESCRIPTION&quot;  type=&quot;xsd:string&quot;/> <xsd:element name=&quot;PRICE&quot;  type=&quot;xsd:positiveInteger&quot;/> <xsd:element name=&quot;QUANTITY&quot;  type=&quot;xsd:nonNegativeInteger&quot;/> </xsd:sequence> </xsd:complexType>
Прекращаем обучение… Полноценное устное обучение  XML  схемам может занять до 4 часов – так что прекратим. Остались не упомянутыми вопросы: Атрибуты (определение, типы значения и использование) Повторное использование определений в других схемах Пространство имён Типы расширений («расширение» и «ограничение» типа)
Где можно углубить свои знания по  XML  схемам http://www.w3.org Teach Yourself XML in 21 Days Learning XML, 2nd Edition XML tutorial http://www.w3schools.com/w3c/
Где можно углубить свои знания по  XML  схемам Есть в  Confluence…
Использование в модульных тестах Создан специальный под-проект  “big-archive-client-docFlow-schemas”. У проектов  “big-archive-client-docFlow-engine” & “big-archive-client-docFlow-scripts”  есть зависимости от него со  scope “test”.
Пример использования @Test public void testValidateResourcePath() throws XMLSchemaValidationException { XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); testable.validateResourcePath(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xml&quot;); } @Test(expected=XMLSchemaValidationException.class) public void testValidateXml_InvalidXml() throws XMLSchemaValidationException { XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); testable.validateXml(&quot;<tag></tag>&quot;); }
Предполагаемое использование в модульных тестах клерков
Дополнительные возможности Каждый редактор  XML  схем ( XML Spy & Oxygen )   могут составлять тестовые данные по схеме: т.е. генерировать  XML.

More Related Content

PPT
XForms новое поколение веб-форм
PPTX
Тема 1. Введение в HTML
PPT
Django шахрай. версия 4
PPT
Msu.Center.Lectures.J05.1 Xml Basics
PPT
Java. Lecture 06.1. XML Basics
PDF
Looking into the future
PDF
Лекция #2. Принцип организации World Wide Web
PDF
Лекция #1. Основы Web-технологий
XForms новое поколение веб-форм
Тема 1. Введение в HTML
Django шахрай. версия 4
Msu.Center.Lectures.J05.1 Xml Basics
Java. Lecture 06.1. XML Basics
Looking into the future
Лекция #2. Принцип организации World Wide Web
Лекция #1. Основы Web-технологий

Similar to XML Schema (20)

ODP
Yandex Lego олег оболенский
PPT
Adobe Flex константин ковалев
PPT
Zen Coding
PPT
Средства разработки web приложений (Web frameworks)
PPTX
Testing of Embedded SW – Alternative to Classic TDD
PPT
Js Http Request дмитрий котеров
PPT
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
ODP
комфортная разработка сайтов на Xsl надежда строганкова
PPTX
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ODP
ZFConf 2010: Zend Framework and Doctrine
ODP
Семинар-практикум по Drupal
PPTX
SP2010 for ASP.NET dev Ru
PPT
The Best Portlet
PPT
Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference
PPT
микроформаты максим россомахин
PPT
Введение в Django
PPT
Crossbrowser Css layout
Yandex Lego олег оболенский
Adobe Flex константин ковалев
Zen Coding
Средства разработки web приложений (Web frameworks)
Testing of Embedded SW – Alternative to Classic TDD
Js Http Request дмитрий котеров
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
комфортная разработка сайтов на Xsl надежда строганкова
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ZFConf 2010: Zend Framework and Doctrine
Семинар-практикум по Drupal
SP2010 for ASP.NET dev Ru
The Best Portlet
Выступление Андрея Сумина, Mail.Ru Group, на High Performance Conference
микроформаты максим россомахин
Введение в Django
Crossbrowser Css layout
Ad

More from Fedor Malyshkin (7)

PPT
Monitoring and Load testing
PPT
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
ODP
Документирование исходных текстов (javadoc)
ODP
Скриптовой язык Groovy и его применение в рамках разработки ПО
ODP
Распределённые приложения. Часть 1. «Клиент и ядро бизнес-логики»
PPT
Agile, SCRUM, Планирование – что в этом для программистов?
ODP
Борьба с ошибками (TDD)
Monitoring and Load testing
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Документирование исходных текстов (javadoc)
Скриптовой язык Groovy и его применение в рамках разработки ПО
Распределённые приложения. Часть 1. «Клиент и ядро бизнес-логики»
Agile, SCRUM, Планирование – что в этом для программистов?
Борьба с ошибками (TDD)
Ad

XML Schema

  • 1. XML схема (XML Schema) [email_address] Фёдор Малышкин
  • 2. Фазы использования Конфигурация (всё пока нормально) малое использование код писался одним человеком большой вопрос по необходимости, вообще Веб-сервисы (мелкие странности) скрытие деталей библиотеками JAXB & JAX-WS Клерки (начинаются проблемы) ОЧЕНЬ много XML данных Отсутствие общей договорённости о форматах XML Регрессионные ошибки при изменении форматов Сложность поддержания модульных тестов в актуальном состоянии (проекты “eks-scripts” & “docFlow-engine” )
  • 3. ОЧЕНЬ много XML данных <inbox action=&quot;new-inbox-item&quot; format=&quot;standart&quot;> <from>fromId</from> <to>toId</to> <route>REVIEW</route> <item>docId-123</item> <cause>TO_REVIEW</cause> <to-date>2008-05-15T15:46:49.081+04:00</to-date> <tag>route-id:route-id</tag> <tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-id:incomingRouteId</tag> <tag>parent-klerk:INCOMING</tag> <extended> <comment>comment</comment> <file-attachment>file-id-01</file-attachment> </extended> <operation type=&quot;reply&quot; id=&quot;reply-yes-no&quot; behaviour=&quot;close-on-reply&quot;> <yes-no> <data-validator klerk=&quot;REVIEW&quot; question=&quot;ValidateData_review&quot;/> </yes-no> </operation> <operation type=&quot;action&quot; id=&quot;action-start-instruction&quot;> <start-workflow workflow='INSTRUCTION'> <parent-route-id>new assigned to review id</parent-route-id> <parent-klerk>REVIEW</parent-klerk> <parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user> </start-workflow> </operation> </inbox>
  • 4. Отсутствие общей договорённости о форматах XML <parent-route-id>parent_route_id</parent-route-id> <parent-klerk>ORDER</parent-klerk> <parent-user>parent_user_id</parent-user> и <tag>route-stage:ASSIGNMENT</tag> <tag>parent-route-id:parentRouteId</tag> <tag>parent-klerk:CONTRACT</tag>
  • 5. Регрессионные ошибки при изменении форматов XML
  • 6. Сложность поддержания модульных тестов в актуальном состоянии
  • 7. XML Schema (XML схема ) XML Schema – название стандарта, формат и синтаксис XML документа, описывающий XML структуры. Можно сказать, что это правила (типа регулярных выражений). Потом по этим правилам проверяется – соответствует ли XML документ этим правилам? XML документ может сам заявлять, что он соответствует определённой схеме.
  • 8. Какие проблемы решит Моментальная проверка существующих XML на соответствие новым правилам (быстрая корректировка кодов по провалившимся тестам) Единообразие XML данных – уменьшение количества и упрощение кода по работе с XML Создание общего словаря с аналитиками, которые всё же хотят знать какие данные передаются между клерками.
  • 9. XML документ со схемой <rootElement xmlns=&quot;http://ru.sefer/schema/1&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://ru.sefer/schema/1 http://ru.sefer/schema/1.xsd&quot; > xmlns – пространство имён по-умолчанию schemaLocation – местоположение схемы
  • 10. Введение Схема определяет список элементов и атрибутов, которые могут быть использованы в документе. Она также определяет порядок, в котором они появляются в XML и их типы. Язык описания XML Schema – XML Schema Definition (XSD)
  • 11. Преимущества XSD обеспечивает больше контроля над структурой и типами, чем DTD . XSD позволяет создавать собственные типы данных. XSD позволяет накладывать ограничения на данные. Синтаксис схемы такой же как у самого документа - XML . XML схема расширяема.
  • 14. Типы данных Тип данных определяет, что может храниться внутри элемента . XSD предоставляет ряд предопределённых типов, которые можно классифицировать так : Примитивные : базовые типы . Наследованные : определены с использованием других типов (называемых «базовыми») Атомарные : примитивные или наследованные, которые не могут быть разбиты на более мелкие куски Списки : наследованный тип, содержащий серию атомарных Объединённые : Результат объединения атомарных типов и списков
  • 15. Элементы Существует 2 тип элементов: простые и сложные. Простой элемент Простой элемент не содержит атрибутов или дочерних узлов Синтаксис объявления простого элмента : <xsd:element name=&quot;element-name&quot; type=&quot;data type&quot; minOccurs=&quot;nonNegativeInteger&quot; maxOccurs=&quot;nonNegativeInteger|unbounded&quot;/>
  • 16. < PRODUCTDATA > < PRODUCT PRODUCTID =&quot;P001&quot; CATEGORY =&quot;BOOKS&quot;> < PRODUCTNAME >Gone With the Wind</ PRODUCTNAME > < DESCRIPTION > The backdrop of this book is the American Civil War</ DESCRIPTION > < PRICE >25.00</ PRICE > < QUANTITY >35</ QUANTITY > </ PRODUCT > </ PRODUCTDATA > <xsd:element name=&quot;PRODUCTNAME&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;DESCRIPTION&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;PRICE&quot; type=&quot;xsd:positiveInteger&quot;/> <xsd:element name=&quot;QUANTITY&quot; type=&quot;xsd:nonNegativeInteger&quot;/>
  • 17. Элементы Сложные элементы Сложные элементы содержат другие элементы, атрибуты и сложный контент. Синтаксис: <xsd:complexType name=&quot;data type name&quot;> Content model declaration </xsd:complexType>
  • 18. Элементы Определение нового простого типа на базу существующего простого типа : <xsd:simpleType name=&quot;phoneno&quot;> <xsd:restriction base=&quot;xsd:string&quot;> <xsd:length value=&quot;8&quot;/> <xsd:pattern value=&quot;\d{3}-\d{4}&quot;/> </xsd:restriction> </xsd:simpleType >
  • 19. Элементы <xsd:simpleType name=&quot;num&quot;> <xsd:restriction base=&quot;xsd:positiveInteger&quot;> <xsd:maxInclusive value=&quot;400&quot;/> <xsd:minInclusive value=&quot;10&quot;/> </xsd:restriction> </xsd:simpleType>
  • 20. Элементы Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом Синтаксис : <xsd:element name=“ElementName&quot; type=“ComplexDataType&quot;/>
  • 21. Элементы <xsd:complexType name=&quot;prdt&quot;> <xsd:sequence> <xsd:element name=&quot;PRODUCTNAME&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;DESCRIPTION&quot; type=&quot;xsd:string&quot;/> <xsd:element name=&quot;PRICE&quot; type=&quot;xsd:positiveInteger&quot;/> <xsd:element name=&quot;QUANTITY&quot; type=&quot;xsd:nonNegativeInteger&quot;/> </xsd:sequence> </xsd:complexType>
  • 22. Прекращаем обучение… Полноценное устное обучение XML схемам может занять до 4 часов – так что прекратим. Остались не упомянутыми вопросы: Атрибуты (определение, типы значения и использование) Повторное использование определений в других схемах Пространство имён Типы расширений («расширение» и «ограничение» типа)
  • 23. Где можно углубить свои знания по XML схемам http://www.w3.org Teach Yourself XML in 21 Days Learning XML, 2nd Edition XML tutorial http://www.w3schools.com/w3c/
  • 24. Где можно углубить свои знания по XML схемам Есть в Confluence…
  • 25. Использование в модульных тестах Создан специальный под-проект “big-archive-client-docFlow-schemas”. У проектов “big-archive-client-docFlow-engine” & “big-archive-client-docFlow-scripts” есть зависимости от него со scope “test”.
  • 26. Пример использования @Test public void testValidateResourcePath() throws XMLSchemaValidationException { XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); testable.validateResourcePath(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xml&quot;); } @Test(expected=XMLSchemaValidationException.class) public void testValidateXml_InvalidXml() throws XMLSchemaValidationException { XMLSchemaValidator testable = XMLSchemaValidator.newInstance(&quot;ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd&quot;); testable.validateXml(&quot;<tag></tag>&quot;); }
  • 27. Предполагаемое использование в модульных тестах клерков
  • 28. Дополнительные возможности Каждый редактор XML схем ( XML Spy & Oxygen ) могут составлять тестовые данные по схеме: т.е. генерировать XML.