XML - 管理資料交換/遞迴關係/答案
外觀
< XML - 管理資料交換 | 遞迴關係
(重定向自 XML - 管理資料交換/遞迴關係 (答案))- 建立一個描述接力賽中一個隊的模式。資訊需要描述比賽中的跑步者以及跑步者從誰那裡接過接力棒。建立一個包含此模式的示例資料的 XML 檔案,並用至少四位跑步者填充它。確保 XML 文件格式正確且有效。
答案
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : appetizerXML.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<race xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="relayXSD.xsd">
<runner primaryKey="1">
<firstName>Jesse</firstName>
<lastName>Owens</lastName>
</runner>
<runner primaryKey="2">
<firstName>Bruce</firstName>
<lastName>Jenner</lastName>
<predecessor foreignKey="1"/>
</runner>
<runner primaryKey="3">
<firstName>Clarke</firstName>
<lastName>Kent</lastName>
<predecessor foreignKey="2"/>
</runner>
<runner primaryKey="4">
<firstName>Steve</firstName>
<lastName>Austin</lastName>
<predecessor foreignKey="3"/>
</runner>
<runner primaryKey="5">
<firstName>Jamie</firstName>
<lastName>Summers</lastName>
<predecessor foreignKey="4"/>
</runner>
<runner primaryKey="6">
<firstName>Road</firstName>
<lastName>Runner</lastName>
<predecessor foreignKey="5"/>
</runner>
</race>
|
檔案 relayXML.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : relayXSD.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xsd:element name="race">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="runner" type="runnerType" maxOccurs="10">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:keyref name="predecessorKey" refer="runKey">
<xsd:selector xpath="runner/predecessor"/>
<xsd:field xpath="@foreignKey"/>
</xsd:keyref>
<xsd:unique name="runIdChecker">
<xsd:selector xpath="runner"/>
<xsd:field xpath="@primaryKey"/>
</xsd:unique>
<xsd:unique name="oneToOneChecker">
<xsd:selector xpath="runner/predecessor"/>
<xsd:field xpath="@foreignKey"/>
</xsd:unique>
<xsd:key name="runKey">
<xsd:selector xpath="runner"/>
<xsd:field xpath="@primaryKey"/>
</xsd:key>
</xsd:element>
<xsd:complexType name="runnerType">
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="predecessor" type="predecessorType" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="primaryKey" type="xsd:long" use="required"/>
</xsd:complexType>
<xsd:complexType name="predecessorType">
<xsd:attribute name="foreignKey" type="xsd:long" use="required"/>
</xsd:complexType>
</xsd:schema>
|
檔案 relayXSD.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : appetizerXML.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:key name="predecessor" match="runner" use="@primaryKey"/>
<!--xsl:key name="name referenced from within XSL file" match="element in XML file containing key" use="attribute or sub-element containing actual value of key "-->
<!-- key() function use:
key('predecessor',2) will return the nodes contained by the president element with attribute: primaryKey="2"
Since a node list is returned, <xsl:value-of select="key('predecessor',2)/firstName"/> will output John
-->
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<style>
BODY {background-color:darkblue}
</style>
</head>
<body>
<table style="background-color:gray; color:darkblue;margin-left:auto; margin-right:auto">
<tr style="background-color:lightblue;font-weight:bold">
<td>Runner First Name</td>
<td>Runner Last Name</td>
<td>Predecessor First Name</td>
<td>Predecessor Last Name</td>
</tr>
<xsl:for-each select="//runner">
<tr style="background-color:salmon">
<td>
<xsl:value-of select="firstName"/>
</td>
<td>
<xsl:value-of select="lastName"/>
</td>
<xsl:choose>
<!--XSL if-else structure-->
<xsl:when test="key('predecessor',predecessor/@foreignKey)">
<!-- if there is a predecessor-->
<td>
<xsl:value-of select="key('predecessor',predecessor/@foreignKey)/firstName"/>
</td>
<td>
<xsl:value-of select="key('predecessor',predecessor/@foreignKey)/lastName"/>
</td>
</xsl:when>
<xsl:otherwise>
<!-- else-->
<td colspan="2" style="text-align:center">This Runner started the race</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table> </body>
</html>
</xsl:template>
</xsl:stylesheet>
|
檔案 relayXSL.xsl
- 每個州都有許多壽險銷售人員,每個州的區域(北部、南部、東部、西部)都有一個區域負責人。銷售人員只能在一個區域銷售,並且只能有一個他/她工作的負責人。建立一個模式來描述這種關係。建立一個 XML 文件,並用兩個州的資料填充它。確保 XML 文件格式正確且有效。每個州應該至少有兩個區域的資料,每個區域應該至少有三個銷售人員,包括區域負責人。每個銷售人員應該用一個唯一的數字識別。每個州應該用其兩個字母的縮寫唯一識別。建立一個 XSL 樣式表來顯示這些資料,每個州都有一個單獨的表格。如果銷售人員是區域負責人,則應說明這一點。在樣式表中建立一個名為 doublespace 的實體,它等效於兩個回車符。使用新實體在兩個表格之間建立兩行空白。
答案
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : insuranceXML.xml
Created on : March 21, 2004, 11:26 PM
Author : russell
Description:
Purpose of the document follows.
-->
<insuranceInfo xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation='file:/Users/russell/Courses/MIST7700/XML/ch6-assn/insuranceXSD.xsd'>
<state stateAbbr = "GA">
<stateName>Georgia</stateName>
<region regionId = "1">
<regionName>East</regionName>
<salesPerson salesPersonId="1">
<firstName>Joe</firstName>
<lastName>Schmo</lastName>
</salesPerson>
<salesPerson salesPersonId="2">
<firstName>Jim</firstName>
<lastName>Beam</lastName>
<regionHead fk_salesPersonId = "1"/>
</salesPerson>
<salesPerson salesPersonId="3">
<firstName>Johnny</firstName>
<lastName>Walker</lastName>
<regionHead fk_salesPersonId = "1"/>
</salesPerson>
</region>
<region regionId="2">
<regionName>West</regionName>
<salesPerson salesPersonId="4">
<firstName>Ian</firstName>
<lastName>Fleming</lastName>
</salesPerson>
<salesPerson salesPersonId="5">
<firstName>Tom</firstName>
<lastName>Clancy</lastName>
<regionHead fk_salesPersonId = "4"/>
</salesPerson>
<salesPerson salesPersonId="6">
<firstName>Conan</firstName>
<lastName>Doyle</lastName>
<regionHead fk_salesPersonId = "4"/>
</salesPerson>
</region>
</state>
<state stateAbbr = "NJ">
<stateName>New Jersey</stateName>
<region regionId = "3">
<regionName>East</regionName>
<salesPerson salesPersonId="7">
<firstName>Tony</firstName>
<lastName>Stark</lastName>
</salesPerson>
<salesPerson salesPersonId="8">
<firstName>Peter</firstName>
<lastName>Parker</lastName>
<regionHead fk_salesPersonId = "7"/>
</salesPerson>
<salesPerson salesPersonId="9">
<firstName>Johnny</firstName>
<lastName>Storm</lastName>
<regionHead fk_salesPersonId = "7"/>
</salesPerson>
</region>
<region regionId="4">
<regionName>West</regionName>
<salesPerson salesPersonId="10">
<firstName>Sue</firstName>
<lastName>Storm</lastName>
</salesPerson>
<salesPerson salesPersonId="11">
<firstName>Bruce</firstName>
<lastName>Banner</lastName>
<regionHead fk_salesPersonId = "10"/>
</salesPerson>
<salesPerson salesPersonId="12">
<firstName>Conan</firstName>
<lastName>Thebarbarian</lastName>
<regionHead fk_salesPersonId = "10"/>
</salesPerson>
</region>
</state>
</insuranceInfo>
|
檔案 insuranceXML.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : appetizerXML.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="insuranceInfo">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="state" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="stateName" type="xsd:string"/>
<xsd:element name="region" type="regionInfo" maxOccurs="4"/>
</xsd:sequence>
<xsd:attribute name="stateAbbr" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:unique name="regionChecker">
<xsd:selector xpath="region"/>
<xsd:field xpath="@regionId"/>
</xsd:unique>
<xsd:unique name="salesPersonChecker">
<xsd:selector xpath="region/salesPerson"/>
<xsd:field xpath="@salesPersonId"/>
</xsd:unique>
<xsd:key name="salesPersonKey">
<xsd:selector xpath="salesPerson"/>
<xsd:field xpath="@salesPersonId"/>
</xsd:key>
<xsd:keyref name="salesPersonForeignKey" refer="salesPersonKey">
<xsd:selector xpath="state"/>
<xsd:field xpath="@fk_salesPersonId"/>
</xsd:keyref>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="stateChecker">
<xsd:selector xpath="state"/>
<xsd:field xpath="@stateAbbr"/>
</xsd:unique>
</xsd:element>
<xsd:complexType name="regionInfo">
<xsd:sequence>
<xsd:element name="regionName" type="xsd:string"/>
<xsd:element name="salesPerson" type="salesPersonInfo" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
<xsd:attribute name="regionId" type="xsd:long" use="required"/>
</xsd:complexType>
<xsd:complexType name="salesPersonInfo">
<xsd:sequence>
<xsd:element name="firstName" type="xsd:string"/>
<xsd:element name="lastName" type="xsd:string"/>
<xsd:element name="regionHead" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:attribute name="fk_salesPersonId" type="xsd:long" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="salesPersonId" type="xsd:long" use="required"/>
</xsd:complexType>
</xsd:schema>
|
檔案 insuranceXSD.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [<!ENTITY space "<xsl:text xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> </xsl:text>"> <!ENTITY dblspace "<br /><br />">]>
<!-- The namespace attribute above is only necessary for XML parsers using the MSXML parser--<
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:key name="regionHead" match="salesPerson" use="@salesPersonId"/>
<xsl:output method="html"/>
<xsl:template match="insuranceInfo">
<xsl:for-each select="state">
<xsl:variable name = "state"><xsl:value-of select="stateName"/></xsl:variable>
<xsl:for-each select="region">
<table>
<tr style="background-color:#6495ED;font-weight:bold">
<td colspan="3">
State Name: <xsl:value-of select="$state"/><br />
Region Id: <xsl:value-of select="@regionId"/><br />
Region Name: <xsl:value-of select="regionName"/><br />
</td>
</tr>
<tr style="background-color:#F0E68C;font-weight:bold">
<td>Sales Person Id</td><td>Sales Person Name</td><td>Region Head</td>
</tr>
<xsl:for-each select="salesPerson">
<tr style="background-color:#D3D3D3">
<td><xsl:value-of select="@salesPersonId"/></td>
<td><xsl:value-of select="firstName"/>&space;<xsl:value-of select="lastName"/></td>
<xsl:choose>
<xsl:when test="regionHead">
<td>
<xsl:value-of select="key('regionHead',regionHead/@fk_salesPersonId)/firstName"/>&space;
<xsl:value-of select="key('regionHead',regionHead/@fk_salesPersonId)/lastName"/></td>
</xsl:when>
<xsl:otherwise>
<td style="background-color:#FF0000;font-weight:bold">Region Head</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
<br />
</xsl:for-each>&dblspace;
</xsl:for-each>
</xsl:template>
<xsl:template match="/">
<html>
<head>
<title>Insurance Regions</title>
</head>
<body style="background-color:darkblue">
<xsl:apply-templates select = "insuranceInfo"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
|
檔案 insuranceXSL.xsl
- 一家餐廳在其選單上有許多開胃菜。餐廳還可以建立一個拼盤,它是精選開胃菜的小份量的組合。建立一個模式來描述這種關係。建立一個 XML 文件,並用足夠的開胃菜填充它以建立至少兩個拼盤組。確保 XML 文件格式正確且有效。
答案
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : appetizerXML.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<appetizers xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation='file:/Users/russell/Courses/MIST7700/XML/ch6-assn/appetizersXSD.xsd'>
<appetizer appetizerId="1">
<appetizerName>Buffalo Wings</appetizerName>
<appetizerPrice>7.99</appetizerPrice>
</appetizer>
<appetizer appetizerId="2">
<appetizerName>Mozerella Sticks</appetizerName>
<appetizerPrice>4.99</appetizerPrice>
</appetizer>
<appetizer appetizerId="3">
<appetizerName>Potato Skins</appetizerName>
<appetizerPrice>5.99</appetizerPrice>
</appetizer>
<appetizer appetizerId="4">
<appetizerName>Onion Blossom</appetizerName>
<appetizerPrice>7.99</appetizerPrice>
</appetizer>
<appetizer appetizerId="5">
<appetizerName>Chips and Salsa</appetizerName>
<appetizerPrice>2.49</appetizerPrice>
</appetizer>
<appetizer appetizerId="6">
<appetizerName>Pot Stickers</appetizerName>
<appetizerPrice>5.99</appetizerPrice>
</appetizer>
<appetizer appetizerId="7">
<appetizerName>Wings and Things Sampler</appetizerName>
<appetizerPrice>12.99</appetizerPrice>
<samplerAppetizer fk_samplerAppetizerId="1"/>
<samplerAppetizer fk_samplerAppetizerId="2"/>
<samplerAppetizer fk_samplerAppetizerId="3"/>
</appetizer>
<appetizer appetizerId="8">
<appetizerName>Ultimate Sampler</appetizerName>
<appetizerPrice>19.99</appetizerPrice>
<samplerAppetizer fk_samplerAppetizerId="1"/>
<samplerAppetizer fk_samplerAppetizerId="2"/>
<samplerAppetizer fk_samplerAppetizerId="3"/>
<samplerAppetizer fk_samplerAppetizerId="4"/>
<samplerAppetizer fk_samplerAppetizerId="5"/>
<samplerAppetizer fk_samplerAppetizerId="6"/>
</appetizer>
</appetizers>
|
檔案 appetizerXML.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : appetizerXML.xml
Created on : March 28, 2004, 9:46 PM
Author : Jess Russell
Description:
Purpose of the document follows.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="appetizers">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="appetizer" type="appetizerInfo" minOccurs="0" maxOccurs="unbounded">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:unique name="appetizerChecker">
<xsd:selector xpath="appetizer"/>
<xsd:field xpath="@appetizerId"/>
</xsd:unique>
<xsd:key name="appetizerKey">
<xsd:selector xpath="appetizer"/>
<xsd:field xpath="@appetizerId"/>
</xsd:key>
<xsd:keyref name="samplerAppetizerKey" refer="appetizerKey">
<xsd:selector xpath="samplerAppetizer"/>
<xsd:field xpath="@fk_samplerAppetizerId"/>
</xsd:keyref>
</xsd:element>
<xsd:complexType name="appetizerInfo">
<xsd:sequence>
<xsd:element name="appetizerName"/>
<xsd:element name="appetizerPrice" type="xsd:decimal"/>
<xsd:element name="samplerAppetizer" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="fk_samplerAppetizerId" type="xsd:long" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="appetizerId" type="xsd:long" use="required"/>
</xsd:complexType>
</xsd:schema>
|
檔案 appetizerXSD.xsd