Современные языки и технологии программирования Использование XML
Пространства имен XML computer scientist mathematician cryptographer ]]>
Пространство имен по умолчанию для элемента computer scientist mathematician cryptographer ]]>
Схема документа (XSD) Формальное описание валидного XML документа Более мощное и выразительное средство по сравнению с DTD Может определять комплексные ограничения на элементы и их атрибуты Для валидации документа может использоваться несколько схем Формат XSD сам по себе имеет структуру XML
Схема XML - возможности Вложенность элементов Ограничения на присутствие элементов Разрешенные атрибуты Типы атрибутов и значения по умолчанию Простые и сложные типы данных Наследование типов Точные ограничения на количество вложенных дочерних элементов Учитываются пространства имен
Проверка XML по схеме SAXParserFactory f = SAXParserFactory.newInstance(); f.setValidating(false); f.setNamespaceAware(true); SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_ NS_URI); Schema s = schemaFactory.newSchema( new File("src/famous.xsd )); f.setSchema(s); SAXParser p = f.newSAXParser(); p.parse(new FileInputStream(args[0]), new MyContentHandler());
XSL, XSLT, XPath Extensible Stylesheet Language (XSL): XSL-FO (Formatted Objects) - стандарт описывающий форматирование и представление объектов XSLT трансформация XML – язык, основанный на правилах («если-то») XPath – средство определения пути и выборки XML докуентов, используемое в XSL/XSLT, XPointer
XPath Выражение для выборки узлов XML: Корневого элемента ( / ) Определенного элемента (/name) Текста ( text() ) Атрибута ( ) Комментария ( comment() ) Инструкции обработки (processing_instruction()) Пространства имен( famous:profession)
Примеры выражений XPath./name profession /person.//profession famous:biography. – текущий узел (не путать с элементом!!!).. – родительский узел [] – предикат some_function() – функция над текущим узлом /some/path – абсолютный путь some/path – относительный путь от – любой узел - атрибут * – любой узел – элемент node() – любой узел
XSLT - трансформация Определяет набор правил преобразования XML документа Все правила применяются рекурсивно Выбор правила осуществляется на основе XPath либо явным вызовом по имени Может быть оптимизирован под вывод текста, HTML, XML Поддерживает условные выражения
Использование XSLT DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = f.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new FileReader(args[0]))); StreamSource style = new StreamSource(new File("src/famoushtml.xsl")); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(style); t.transform(new DOMSource(doc), new StreamResult(new FileOutputStream( "res.html")));
XLink – простая ссылка The Wonderful Wizard of Oz L. Frank Baum 1900 XPointer – ссылка вместе с XPath
XLink – сложная ссылка The Wonderful Wizard of Oz L. Frank Baum 1900
JAXB – XML binding = "ISPAEntity", propOrder = { "account", "info", "phone" }) public class ISPAEntity = true) protected Long = true) protected String = true) protected String phone; }
Использование JAXB Генерация кода xjc -p com.mypackage -d gen/ myschema.xsd Использование JaxbContext jc = JAXBContext.newInstance(com.mypackage"); Unmarshaller u = jc.createUnmarshaller(); JAXBElement poElement = (JAXBElement ) u.unmarshal(new StringReader(source)); MyClass response=(MyClass) poElement.getValue();
Задача 1.Определить схему XSD 2.Валидировать на основе схемы 3 3.Определить стиль XSL для трансформации в HTML 4.Трансформировать в HTML 5.Расширить схему XSD декларациями JAXB 6.Сгенерировать XJC классы-обертки для JAXB 7.Попробовать работать с документом через объекты JAXB