XML дает вам возможность описывать "слабоструктурируемые" данные. Только что высказанная мысль о том, что XML позволяет вам структурировать данные может звучать несколько сбивающей с толку. Слабоструктурированные данные определяются как "бессхемные" или самоописательные. Это означает, что нет разделения описания типа от структуры данных.
Как вы уже видели в этой книге, когда мы храним или программируем часть данных, сначала мы описываем структуру этих данных, а потом создаем экземпляр этого типа. В случае слабоструктурированных данных мы напрямую описываем данные с помощью простого синтаксиса. XML специально разработан для описания данных или содержимого, а не представления. Это фундаментальное отличие от HTML.
Давайте рассмотрим пример. Если я скажу, что я имею данные, которые описывают меню ресторана, то в уме сразу всплывет любимый ресторан и его меню. Но давайте взглянем на проблему немного пристальней, и вы осознаете, что все меню выполняют одну и то же работу - описывают цены ресторана - но каждое меню делает это немного иначе. Многие китайские рестораны используют числа и разделяют свои блюда по содержимому - морепродукты, мясо, птица, свинина или овощи. Другие рестораны структурируют свое меню по сроку приема пищи - завтрак, ланч или обед.
<?xml version='1.0'?> <?xml:stylesheet type="text/xsl" href="tij_menu.xsl" ?> <restaurant xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="tij_menu.xsd"> <name>TIJ's Restaurant</name> <address> <addr1>108 Java Sapien Avenue</addr1> <city>Wayne</city> <state>PA</state> <country>USA</country> </address> <phone>610-687-1234</phone> <menu> <menugroup desc="Starters"> <menuitem> <name>Nachos</name> <price>$7.25</price> <description> cheddar and monterey jack cheese, salsa, sour cream and guacamole. add jalapenos or black olives $.50 each </description> </menuitem> <menuitem> <name>Portabello Mushroom Cap</name> <price>$8.75</price> <description> Stuffed with crabmeat, andouille sausage and smoked tomato sauce </description> </menuitem> <menuitem> <name>Chicken Wings</name> <price>$4.95</price> <description> A dozen chicken Wings with blue cheese sauce. Two dozen for $8.75 </description> </menuitem> <menuitem> <name>Quesadilla</name> <price>$6.25</price> <description> Chicken, black beans, guacamole, salsa, fresca and sour cream </description> </menuitem> </menugroup> <menugroup desc="Salads, Big Salads, and Soups"> <menuitem> <name>House Salad</name> <price>$4.75/$8.00</price> <description> Small or large house salad with balsamic herbed vinaigrette </description> </menuitem> <menuitem> <name>Mesclun Salad</name> <price>$7.25/$13.50</price> <description> with marinated mushrooms, roasted peppers, artichokes, fresh mossarella and balsamic vinaigrette </description> </menuitem> <menuitem> <name>Grilled Chicken Salad</name> <price>$6.75/$11.25</price> <description> soy sesame marinade, mixed greens, red and green peoppers, carrots, red onion, crispy fried wontons and honey ginger dressing </description> </menuitem> <menuitem> <name>Chicken Soup of the Day</name> <price>$2.30/$3.95</price> </menuitem> </menugroup> <menugroup desc="Pizza"> <menuitem> <name>Duck Confit Pizza</name> <price>$9.00</price> <description> with caramelized onion, fresh thyme and goat cheese </description> </menuitem> <menuitem> <name>The Salty Pizza</name> <price>$8.50</price> <description> with proscuitto, black olives cotija cheese, tomatoes and anchovies </description> </menuitem> <menuitem> <name>Traditional Pizza</name> <price>$7.50</price> <description> red sauce and mozzarella cheese </description> </menuitem> <menuitem> <name>Toppings</name> <price>$.50</price> <description> Pepperoni, Sausage, Chicken, Grilled Portabello, Roasted Peppers, Sun Dried Tomatoes, Roasted Garlic, Broccoli Rabe, Spinach, Shrimp, Proscuitto, Black Olives, Goat Cheese, Bacon, Roasted Veggies, Green Peppers, Onions, Mushrooms </description> </menuitem> </menugroup> <menugroup desc="Entrees"> <menuitem> <name>Grilled Rib Eye Steak</name> <price>$18.00</price> <description> with buttermilk biscuits, vegetable of the day and button mushroom gravy </description> </menuitem> <menuitem> <name>Pork Tenderloin</name> <price>$16.00</price> <description> dry rubbed with swiss chard, maple whipped sweet potatoes and apple bourbon sauce </description> </menuitem> <menuitem> <name>Grilled Chicken</name> <price>$16.00</price> <description> with mushroom risotto pesto sauce and tomato salsa </description> </menuitem> <menuitem> <name>Center Cut Sirlion</name> <price>$16.00</price> <description> with cheddar cheese mashed potatoes, horseradish sour cream and vegetable of the day </description> </menuitem> </menugroup> <menugroup desc="Kids"> <menuitem> <name>Hot Dog</name> <price>$3.50</price> <description> on roll; with American Chees $3.75 </description> </menuitem> <menuitem> <name>Grilled Cheese Sandwich</name> <price>$3.25</price> <description>The classic!</description> </menuitem> <menuitem> <name>Chicken Fingers</name> <price>$5.00</price> <description>Finger licking good</description> </menuitem> </menugroup> <menugroup desc="Beverages"> <menuitem> <name>Milkshake</name> <price>$3.50</price> <description> vanilla, chocolate or strawberry; double thick, $5.00 </description> </menuitem> <menuitem> <name>Orange Cream Soda Float</name> <price>$5.00</price> </menuitem> <menuitem> <name>Chocolate Milk</name> <price>$2.50</price> </menuitem> </menugroup> </menu> </restaurant>
Я не знаю, определяет ли эта структура все меню для всех ресторанов, но она описывает меню для любимого близлежащего ресторана и она может быть подогнана под большинство меню.
XML позволяет пользователям определять тэги для указания структуры. В этом меню <restaurant> содержит <menu>, также наш ресторан может содержать <menugroups>, а <menugroups> содержат <menuitems>, которые представляют блюда. Здесь может быть необходимо больше данных для элементов меню - скажем: калорийность блюд.
В отличие от HTML, XML документ не предоставляет никаких инструкций о том, как он будет отображаться. Этот тип информации может быть включен отдельно в страницу стилей (stylesheet). Страница стилей на языке спецификации XSL (XML Stylesheet Language) используется для трансляции XML данных в HTML представление.
Таким образом, я должен также объяснить, что XML - это нечто большее, чем простой набор правил для конструирования данных. XML включает целый пласт спецификаций, которым он удовлетворяет. Эти спецификации позволяют вам описать структуру XML документа. По существу, они удаляют "слабость" из слабоструктурированных данных.
← | XML | XML Элементы | → |