
- •Интернет-программирование
- •ИП. XML. Введение
- •ИП. «Генеалогия» XML
- •ИП. SGML
- •ИП. SGML-декларация
- •ИП. SGML-декларация для HTML4
- •ИП. SGML-декларация для XML
- •ИП. SGML. Введение в DTD
- •ИП. SGML. DTD. Типы данных
- •ИП. SGML. DTD. Описание элементов
- •ИП. SGML. DTD. Описание атрибутов
- •ИП. SGML. DTD. Примеры объявления атрибутов
- •ИП. «Генеалогия» XML. SGML. Введение в DTD
- •ИП. XML. Разметка
- •ИП. XML. Пример xml-документа
- •ИП. XML. Элементы или атрибуты
- •ИП. XML. Правильность и валидность
- •ИП. XML. Правильность
- •ИП. XML. Корректность
- •ИП. XML. Пространство имен
- •ИП. XML. XML-схема
- •ИП. XML. XML-схема
- •ИП. XML. XML-схема. Простые элементы
- •ИП. XML. XML-схема. Атрибуты
- •ИП. XML. XML-схема. Составные элементы
- •ИП. XML. XML-схема. Составные элементы
- •ИП. XML. XML-схема. Составные элементы
- •ИП. XML. XML-схема. Индикаторы
- •ИП. XML. XML-схема. Ссылка ref
- •ИП. XML. XML-схема. Ссылка ref
- •ИП. XML. XML-схема. Пример XML-документа и его схемы
- •ИП. Работа с XML
- •ИП. Работа с XML. PHP. Валидация
- •ИП. Работа с XML. PHP.
- •ИП. Работа с XML. JavaScript
- •ИП. Работа с XML. Java

ИП. XML. XML-схема. Ссылка ref |
МИЭТ, 2017 |
Ссылка ref позволяет ссылаться из определений одних элементов и атрибутов на определения других элементов и атрибутов
<!-- определение атрибутов -->
<xs:attribute name="width" type="xs:integer"/> <xs:attribute name="height" type="xs:integer"/> <xs:attribute name="href" type="xs:string"/>
<!-- определение составных элементов -->
<xs:element name="img">
<xs:complexType> <xs:attribute ref="width"/> <xs:attribute ref="height"/> <xs:attribute ref="href"/>
</xs:complexType>
</xs:element>

ИП. XML. XML-схема. Ссылка ref |
МИЭТ, 2017 |
Пример ссылки на элементы
<xs:element name="project">
<xs:complexType>
<xs:sequence> <xs:element ref="title"/>
<xs:element ref="authors"/>
<xs:element ref="img" minOccurs="0" maxOccurs="1"/> <xs:element ref="vuz"/>
<xs:element ref="annotation"/> </xs:sequence>
<xs:attribute ref="id" use="required"/> <xs:attribute ref="year" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="projects"> <xs:complexType>
<xs:sequence>
<xs:element ref="project" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence>
</xs:complexType>
</xs:element>

ИП. XML. XML-схема. Пример XML-документа и его схемы |
МИЭТ, 2017 |
<?xml version="1.0" encoding="UTF-8"?>
<projects xmlns:miet="http://www.w3.org/2001/XMLSchema-instance" miet:schemaLocation="portfolio.xsd">
<project id="000001" year="2017">
<title>Мобильное приложение “Student Assistant”</title> <authors>
<author country="RU">Янис Василиадис</author> </authors>
<img width="185" height="46" href="https://miet.ru/bitrix/templates/.default/img/miee_logo2.png"/> <vuz>МИЭТ</vuz>
<annotation>
Портал(доска) объявлений которая позволяет осуществлять информирование студентов и конечно главным плюсом является то, что информация надежно хранится и доступна откуда угодно(в отличии от “обычных” досок объявлений). К примеру, вакансии различных компаний,
</annotation>
</project>
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- определение простых элементов --> <xs:element name="title" type="xs:string"/> <xs:element name="vuz" type="xs:string"/> <xs:element name="annotation" type="xs:string"/>
<!-- определение атрибутов -->
<xs:attribute name="country" type="xs:string"/> <xs:attribute name="width" type="xs:integer"/> <xs:attribute name="height" type="xs:integer"/> <xs:attribute name="href" type="xs:string"/> <xs:attribute name="id" type="xs:string"/>
<xs:attribute name="year" type="xs:integer" default="2017"/>
ИП. Работа с XML |
МИЭТ, 2017 |
PHP
libxml simplexml
-основная библиотека (включена по умолчанию)
-более простая и легкая библиотека
JavaScript
XMLHttpRequest
JQuery
Java
-объект браузера для работы с XML (включен)
-распространенная универсальная библиотека
Пакеты: |
|
javax.xml.parsers.* |
- создание (загрузка) и парсинг (разбор) |
org.w3c.dom.* |
- перемещение по DOM документа |
org.xml.sax.SAXException |
- генерация событий при чтении документа |

ИП. Работа с XML. PHP. Валидация |
МИЭТ, 2017 |
Проверка по DTD
<?
$dom = new DOMDocument;
$dom->Load('portfolio.xml'); if (!$dom->validate()) {
echo "Документ содержит ошибки валидации!\n"; } else {
//Действия с документом
}
?>
Проверка по XML-схеме
<?
$dom = new DOMDocument;
$dom->Load('portfolio.xml');
if (!$dom->schemaValidate('portfolio.xsd')) {
echo '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
}
?>

ИП. Работа с XML. PHP. |
МИЭТ, 2017 |
Пример вывода всех элементов и атрибутов
$dom = new DOMDocument; $dom->Load('portfolio.xml');
if (!$dom->schemaValidate('portfolio.xsd')) {
print '<b>DOMDocument::schemaValidate() Generated Errors!</b>';
}
$elems = $dom->getElementsByTagName('project');
foreach ($elems as $temp) {
echo "<br><b>".$temp->tagName." | "; echo $temp->getAttribute('id')." | "; echo $temp->getAttribute('year')."</b>";
foreach ($temp->childNodes as $cnd) {
echo "<br>".$cnd->nodeName." / ".$cnd->nodeValue;
}
}

ИП. Работа с XML. JavaScript |
МИЭТ, 2017 |
После загрузки XML-документа для работы с ним можно использовать методы обхода DOM объекта document: getElementByTagName(...) и т.д.
url = "http://miet.ru/portfolio.xml";
xml=new window.XMLHttpRequest(); xml.open("GET", url, false); parse_xml = xml.responseXML;
var projects=parse_xml.getElementsByTagName("project"); if(projects) {
for(var i=0; i<projects.length; i++) { prohect=projects[i];
// операции над текущим проектом
}
}

ИП. Работа с XML. Java |
МИЭТ, 2017 |
// Создается "построитель" документа
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); // Создается дерево DOM документа из файла
Document document = documentBuilder.parse("src/javatest/portfolio.xml"); // Получаем корневой элемент
Node root = document.getDocumentElement(); System.out.println("List of projects:\n");
// Просматриваем все подэлементы корневого - т.е. проекты NodeList projects = root.getChildNodes();
for (int i = 0; i < projects.getLength(); i++) { Node project = projects.item(i);
// Если нода не текст, то это проект - заходим внутрь if (project.getNodeType() != Node.TEXT_NODE) {
NodeList projectProps = project.getChildNodes(); for(int j = 0; j < projectProps.getLength(); j++) {
Node projectProp = projectProps.item(j);
// Если нода не текст, то это один из параметров проекта - печатаем if (projectProp.getNodeType() != Node.TEXT_NODE) {
System.out.println(projectProp.getNodeName()+"\n!"+projectProp.getTextContent().trim()+"\n\n");
}
}
System.out.println("===========>>>>");
}
}
}catch (ParserConfigurationException ex) { ex.printStackTrace(System.out);
}catch (SAXException ex) { ex.printStackTrace(System.out);
}catch (IOException ex) { ex.printStackTrace(System.out);
}