XML  схема  (XML Schema) [email_address] Фёдор Малышкин
Фазы использования <ul><li>Конфигурация (всё пока нормально) </li></ul><ul><ul><li>малое использование </li></ul></ul><ul>...
ОЧЕНЬ много  XML  данных <ul><li><inbox action=&quot;new-inbox-item&quot; format=&quot;standart&quot;>  <from>fromId</from...
Отсутствие общей договорённости о форматах  XML <ul><li><parent-route-id>parent_route_id</parent-route-id> </li></ul><ul><...
Регрессионные ошибки при изменении форматов XML
Сложность поддержания модульных тестов в актуальном состоянии
XML Schema (XML  схема ) <ul><li>XML Schema –  название стандарта, формат и синтаксис  XML  документа, описывающий  XML  с...
Какие проблемы решит <ul><li>Моментальная проверка существующих  XML  на соответствие новым правилам (быстрая корректировк...
XML  документ со схемой <ul><li><rootElement   xmlns=&quot;http://ru.sefer/schema/1&quot;   xmlns:xsi=&quot;http://www.w3....
Введение <ul><li>Схема определяет список элементов и атрибутов, которые могут быть использованы в документе. </li></ul><ul...
Преимущества <ul><li>XSD обеспечивает больше контроля   над структурой и типами, чем DTD . </li></ul><ul><li>XSD позволяет...
XML Spy
Oxygen
Типы данных <ul><li>Тип данных определяет, что может храниться внутри элемента .  </li></ul><ul><li>XSD  предоставляет ряд...
Элементы <ul><li>Существует 2 тип элементов: простые и сложные. </li></ul><ul><li>Простой элемент </li></ul><ul><ul><li>Пр...
<ul><li>< PRODUCTDATA > </li></ul><ul><li>< PRODUCT   PRODUCTID =&quot;P001&quot;  CATEGORY =&quot;BOOKS&quot;> </li></ul>...
Элементы <ul><li>Сложные элементы </li></ul><ul><ul><li>Сложные элементы содержат другие элементы, атрибуты и сложный конт...
Элементы <ul><li>Определение нового простого типа на базу существующего простого типа : </li></ul><ul><li><xsd:simpleType ...
Элементы <ul><li><xsd:simpleType name=&quot;num&quot;> </li></ul><ul><li><xsd:restriction base=&quot;xsd:positiveInteger&q...
Элементы <ul><li>Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом </li></ul><...
Элементы <ul><li><xsd:complexType name=&quot;prdt&quot;> </li></ul><ul><li><xsd:sequence> </li></ul><ul><li><xsd:element n...
Прекращаем обучение… <ul><li>Полноценное устное обучение  XML  схемам может занять до 4 часов – так что прекратим. </li></...
Где можно углубить свои знания по  XML  схемам <ul><li>http://www.w3.org </li></ul><ul><li>Teach Yourself XML in 21 Days <...
Где можно углубить свои знания по  XML  схемам <ul><li>Есть в  Confluence… </li></ul>
Использование в модульных тестах <ul><li>Создан специальный под-проект  “big-archive-client-docFlow-schemas”. </li></ul><u...
Пример использования <ul><li>@Test </li></ul><ul><li>public void testValidateResourcePath() throws XMLSchemaValidationExce...
Предполагаемое использование в модульных тестах клерков
Дополнительные возможности <ul><li>Каждый редактор  XML  схем ( XML Spy & Oxygen )   могут составлять тестовые данные по с...
Upcoming SlideShare
Loading in...5
×

XML Schema

4,385

Published on

Описание XML Schema стандарта и его применение в разработке фирмы Magnetosoft

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,385
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
21
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

XML Schema

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

    Clipping is a handy way to collect important slides you want to go back to later.

×