xml schema
DESCRIPTION
Описание XML Schema стандарта и его применение в разработке фирмы MagnetosoftTRANSCRIPT
2
Фазы использования1. Конфигурация (всё пока нормально)
– малое использование– код писался одним человеком– большой вопрос по необходимости, вообще
2. Веб-сервисы (мелкие странности)– скрытие деталей библиотеками JAXB & JAX-WS
3. Клерки (начинаются проблемы)– ОЧЕНЬ много XML данных– Отсутствие общей договорённости о форматах XML– Регрессионные ошибки при изменении форматов– Сложность поддержания модульных тестов в
актуальном состоянии (проекты “eks-scripts” & “docFlow-engine”)
3
ОЧЕНЬ много XML данных<inbox action="new-inbox-item" format="standart"> <from>fromId</from><inbox action="new-inbox-item" format="standart"> <from>fromId</from>
<to>toId</to> <route>REVIEW</route> <item>docId-123</item><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> <cause>TO_REVIEW</cause> <to-date>2008-05-15T15:46:49.081+04:00</to-date> <tag>route-id:route-id</tag><tag>route-id:route-id</tag>
<tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-<tag>action:review</tag> <tag>reviewer:reviewerId</tag> <tag>parent-route-id:incomingRouteId</tag>id:incomingRouteId</tag>
<tag>parent-klerk:INCOMING</tag> <extended><tag>parent-klerk:INCOMING</tag> <extended>
<comment>comment</comment> <file-attachment>file-id-01</file-attachment><comment>comment</comment> <file-attachment>file-id-01</file-attachment>
</extended> <operation type="reply" id="reply-yes-no" behaviour="close-on-reply"></extended> <operation type="reply" id="reply-yes-no" behaviour="close-on-reply">
<yes-no> <data-validator klerk="REVIEW" question="ValidateData_review"/><yes-no> <data-validator klerk="REVIEW" question="ValidateData_review"/>
</yes-no> </operation> </yes-no> </operation>
<operation type="action" id="action-start-instruction"><operation type="action" id="action-start-instruction">
<start-workflow workflow='INSTRUCTION'><start-workflow workflow='INSTRUCTION'>
<parent-route-id>new assigned to review id</parent-route-id><parent-route-id>new assigned to review id</parent-route-id>
<parent-klerk>REVIEW</parent-klerk><parent-klerk>REVIEW</parent-klerk>
<parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user><parent-user>b470e114-a0be-46ee-bba5-aee66c52e349</parent-user>
</start-workflow> </operation> </inbox></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="http://ru.sefer/schema/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ru.sefer/schema/1 http://ru.sefer/schema/1.xsd">
• xmlns – пространство имён по-умолчанию• schemaLocation – местоположение схемы
10
Введение
• Схема определяет список элементов и атрибутов, которые могут быть использованы в документе.
• Она также определяет порядок, в котором они появляются в XML и их типы.
• Язык описания XML Schema – XML Schema Definition (XSD)
11
Преимущества
• XSD обеспечивает больше контроля над структурой и типами, чем DTD.
• XSD позволяет создавать собственные типы данных.
• XSD позволяет накладывать ограничения на данные.
• Синтаксис схемы такой же как у самого документа - XML.
• XML схема расширяема.
12
XML Spy
13
Oxygen
14
Типы данных
• Тип данных определяет, что может храниться внутри элемента.
• XSD предоставляет ряд предопределённых типов, которые можно классифицировать так:– Примитивные: базовые типы. – Наследованные: определены с использованием
других типов (называемых «базовыми») – Атомарные: примитивные или наследованные,
которые не могут быть разбиты на более мелкие куски
– Списки: наследованный тип, содержащий серию атомарных
– Объединённые: Результат объединения атомарных типов и списков
15
Элементы
Существует 2 тип элементов: простые и сложные.
• Простой элемент– Простой элемент не содержит атрибутов или
дочерних узлов– Синтаксис объявления простого элмента:
<xsd:element name="element-name" type="data type" minOccurs="nonNegativeInteger" maxOccurs="nonNegativeInteger|unbounded"/>
16
<PRODUCTDATA><PRODUCT PRODUCTID="P001" CATEGORY="BOOKS">
<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="PRODUCTNAME" type="xsd:string"/><xsd:element name="DESCRIPTION" type="xsd:string"/><xsd:element name="PRICE" type="xsd:positiveInteger"/><xsd:element name="QUANTITY"
type="xsd:nonNegativeInteger"/>
17
Элементы
• Сложные элементы– Сложные элементы содержат другие
элементы, атрибуты и сложный контент.– Синтаксис:<xsd:complexType name="data type name">
Content model declaration</xsd:complexType>
18
Элементы
• Определение нового простого типа на базу существующего простого типа:
<xsd:simpleType name="phoneno"><xsd:restriction base="xsd:string">
<xsd:length value="8"/><xsd:pattern value="\d{3}-\d{4}"/>
</xsd:restriction></xsd:simpleType>
19
Элементы
<xsd:simpleType name="num"><xsd:restriction base="xsd:positiveInteger">
<xsd:maxInclusive value="400"/><xsd:minInclusive value="10"/>
</xsd:restriction></xsd:simpleType>
20
Элементы
• Элемент, для того, что бы быть объявленным сложным, должен быть ассоциирован со сложным типом– Синтаксис:
<xsd:element name=“ElementName" type=“ComplexDataType"/>
21
Элементы
<xsd:complexType name="prdt"><xsd:sequence>
<xsd:element name="PRODUCTNAME" type="xsd:string"/>
<xsd:element name="DESCRIPTION" type="xsd:string"/>
<xsd:element name="PRICE" type="xsd:positiveInteger"/>
<xsd:element name="QUANTITY" type="xsd:nonNegativeInteger"/>
</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("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd");
testable.validateResourcePath("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xml");
}
@Test(expected=XMLSchemaValidationException.class)
public void testValidateXml_InvalidXml() throws XMLSchemaValidationException {
XMLSchemaValidator testable = XMLSchemaValidator.newInstance("ru/magnetosoft/bigarchive/client/docflow/schema/assignment-route.xsd");
testable.validateXml("<tag></tag>");
}
27
Предполагаемое использование в модульных тестах клерков
28
Дополнительные возможности
• Каждый редактор XML схем (XML Spy & Oxygen) могут составлять тестовые данные по схеме: т.е. генерировать XML.