Смекни!
smekni.com

А. Н. Терехов Санкт Петербург (стр. 7 из 8)

<!ELEMENT catgraph (edge*)>

<!ELEMENT edge EMPTY>

<!ATTLIST edge from IDREF #REQUIRED to IDREF #REQUIRED>

<!ELEMENT regions (africa, asia, australia, europe, namerica, samerica)>

<!ELEMENT africa (item*)>

<!ELEMENT asia (item*)>

<!ELEMENT australia (item*)>

<!ELEMENT namerica (item*)>

<!ELEMENT samerica (item*)>

<!ELEMENT europe (item*)>

<!ELEMENT item (location, quantity, name, payment,

description, shipping, incategory+, mailbox)>

<!ATTLIST item id ID #REQUIRED

featured CDATA #IMPLIED>

<!ELEMENT location (#PCDATA)>

<!ELEMENT quantity (#PCDATA)>

<!ELEMENT payment (#PCDATA)>

<!ELEMENT shipping (#PCDATA)>

<!ELEMENT reserve (#PCDATA)>

<!ELEMENT incategory EMPTY>

<!ATTLIST incategory category IDREF #REQUIRED>

<!ELEMENT mailbox (mail*)>

<!ELEMENT mail (from, to, date, text)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT date (#PCDATA)>

<!ELEMENT itemref EMPTY>

<!ATTLIST itemref item IDREF #REQUIRED>

<!ELEMENT personref EMPTY>

<!ATTLIST personref person IDREF #REQUIRED>

<!ELEMENT people (person*)>

<!ELEMENT person (name, emailaddress, phone?, address?,

homepage?, creditcard?, profile?, watches?)>

<!ATTLIST person id ID #REQUIRED>

<!ELEMENT emailaddress (#PCDATA)>

<!ELEMENT phone (#PCDATA)>

<!ELEMENT address (street, city, country, province?, zipcode)>

<!ELEMENT street (#PCDATA)>

<!ELEMENT city (#PCDATA)>

<!ELEMENT province (#PCDATA)>

<!ELEMENT zipcode (#PCDATA)>

<!ELEMENT country (#PCDATA)>

<!ELEMENT homepage (#PCDATA)>

<!ELEMENT creditcard (#PCDATA)>

<!ELEMENT profile (interest*, education?, gender?, business, age?)>

<!ATTLIST profile income CDATA #IMPLIED>

<!ELEMENT interest EMPTY>

<!ATTLIST interest category IDREF #REQUIRED>

<!ELEMENT education (#PCDATA)>

<!ELEMENT income (#PCDATA)>

<!ELEMENT gender (#PCDATA)>

<!ELEMENT business (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT watches (watch*)>

<!ELEMENT watch EMPTY>

<!ATTLIST watch open_auction IDREF #REQUIRED>

<!ELEMENT open_auctions (open_auction*)>

<!ELEMENT open_auction (initial, reserve?, bidder*, current,

privacy?, itemref, seller, annotation, quantity, type, interval)>

<!ATTLIST open_auction id ID #REQUIRED>

<!ELEMENT privacy (#PCDATA)>

<!ELEMENT initial (#PCDATA)>

<!ELEMENT bidder (date, time, personref, increase)>

<!ELEMENT seller EMPTY>

<!ATTLIST seller person IDREF #REQUIRED>

<!ELEMENT current (#PCDATA)>

<!ELEMENT increase (#PCDATA)>

<!ELEMENT type (#PCDATA)>

<!ELEMENT interval (start, end)>

<!ELEMENT start (#PCDATA)>

<!ELEMENT end (#PCDATA)>

<!ELEMENT time (#PCDATA)>

<!ELEMENT status (#PCDATA)>

<!ELEMENT amount (#PCDATA)>

<!ELEMENT closed_auctions (closed_auction*)>

<!ELEMENT closed_auction (seller, buyer, itemref, price, date,

quantity, type, annotation?)>

<!ELEMENT buyer EMPTY>

<!ATTLIST buyer person IDREF #REQUIRED>

<!ELEMENT price (#PCDATA)>

<!ELEMENT annotation (author, description?, happiness)>

<!ELEMENT author EMPTY>

<!ATTLIST author person IDREF #REQUIRED>

<!ELEMENT happiness (#PCDATA)>

2.7.1.3 Часть графа DTD XMark - в People узла

DTD в People узла

<!ELEMENT people (person*)>

<!ELEMENT person (name, emailaddress, phone?, address?,

homepage?, creditcard?, profile?, watches?)>

<!ATTLIST person id ID #REQUIRED>

<!ELEMENT emailaddress (#PCDATA)>

<!ELEMENT phone (#PCDATA)>

<!ELEMENT address (street, city, country, province?, zipcode)>

<!ELEMENT street (#PCDATA)>

<!ELEMENT city (#PCDATA)>

<!ELEMENT province (#PCDATA)>

<!ELEMENT zipcode (#PCDATA)>

<!ELEMENT country (#PCDATA)>

<!ELEMENT homepage (#PCDATA)>

<!ELEMENT creditcard (#PCDATA)>

<!ELEMENT profile (interest*, education?, gender?, business, age?)>

<!ATTLIST profile income CDATA #IMPLIED>

<!ELEMENT interest EMPTY>

<!ATTLIST interest category IDREF #REQUIRED>

<!ELEMENT education (#PCDATA)>

<!ELEMENT income (#PCDATA)>

<!ELEMENT gender (#PCDATA)>

<!ELEMENT business (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT watches (watch*)>

<!ELEMENT watch EMPTY>

<!ATTLIST watch open_auction IDREF #REQUIRED>

2.7.1.4 Отношение Shema от графа DTD

a. The Basic Inlining Technique

People(peopleID:integer,people.person.id:String,people.person.name:String,people.person.emailaddress:String,people.person.phone:String,people.person.address.street:String, people.person.address.city:String, people.person.address.country:String, people.person.address.province:String, people.person.address.zipcode:String,people.person.homepage:String,people.person.creditcard:String, people.person.profile.interest.category:String, people.person.profile.business:String, people.person.profile.education:String, people.person.profile.gender:String, people.person.profile.income:String, people.person.profile.age:String,people.person.wathes.wath.open-auction:String)

Person(personID:integer,person.id:String,person.name:String,person.emailaddress:String,person.phone:String,person.address.street:String,person.address.city:String,person.address.country:String,person.address.province:String,person.address.zipcode:String,person.homepage:String,person.creditcard:String,person.profile.interest.category:String,person.profile.business:String, person.profile.education:String, person.profile.gender:String, person.profile.income:String, person.profile.age:String, person.wathes.wath.open-auction:String)

Name (nameID: Integer, name: String)

Emailaddress (emailaddressID: Integer, emailaddress: String)

Phone (phoneID: Integer, phone: String)

Address(addressID:Integer,address.street:String, address.city:String,address.country:String,address.province:String,address.zipcode:String)

Street(streetID:Integer,street:String)

City(CityID:Integer,city:String)

Country(countryID:Integer,country:String)

Province(provinceID:Integer,province:String)

Zipcode(zipcodeID:Integer,zipcode:String)

Homepage(homepageID:Integer,homepage:String)

Creditcard(creditcardID:Integer,creditcard:String)

Profile(profileID:Integer,profile.interest.category:String,profile.business:String,profile.education:String,profile.income:String,profile.gender:String,profile.age:String)

Interest (interestID: Integer, interest.category: String)

Category(categoryID:Integer,category:String)

Business(businessID:Integer,business:String)

Education(educationID:Integer,education:String)

Gender(genderID:Integer,gender:String)

Age(ageID:Integer,age:String)

Watches(watchesID:Integer,watch.open-auction:String)

Watch(watchID:Integer,watch:String)

b. The Shared Inlining Technique

People.person(people.personID:integer,people.person.name.isroot:Boolean,people.person.name:String,people.person.emailaddress.isroot:Boolean,people.person.emailaddress:String, people.person.phone.isroot:Boolean,people.person.phone:String, people.person.homepage.isroot:Boolean,people.person.homepage:String, people.person.creditcard.isroot:Boolean,people.person.creditcard:String,)

Address(addressID:Integer,address.parentID:Integer,address.street.isroot:Boolean,address.street:String,address.city.isroot:Boolean,address.city:String,address.country.isroot:Boolean,address.country:String,address.province.isroot:Boolean,address.province:String,address.zipcode.isroot:Boolean,address.zipcode:String)

Profile(profileID:Integer,profile.parentID:Integer,profile.interest.isroot:Boolean,profile.interest.category:String,profile.education.isroot:Boolean,profile.education:String,profile.business.isroot:Boolean,profile.business:String,profile.gender.isroot:Boolean,profile.gender:String,profile.age.isroot:Boolean,profile.age:String,profile.income:String)

Interest(interestID:Integer,interest.parentID:Integer,interest.category:String)

Watches(watchesID:Integer,watches.parentID:Integer,watches.watch.isroot:Boolean,watches.watch.open-auction:String)

Watch(watchID:integer,watch.parentID:Integer,watch.open-auction:String)

Отношение Shema Hibird Inlining Методика в этом случаи подобно отношению Shema Shared Inlining Методики.

2.7.2. Подход атрибутов

2.7.2.1 Подход Edge таблицы.

Наиболее простой хранить все атрибуты в единственной таблице: позвольте нам называть эту таблицу таблицей Edge. Таблица Edge делает запись oid источника и объектов маленького круглого щита атрибута, имя атрибута, флажок, который указывает, является ли атрибут меж-объектной ссылкой или poit к значению, и порядковое число имело обыкновение возвращать весь атрибуты объекта в праве и выполнять модификации, если объекты имеют несколько атрибутов с тем же самым именем.

Таблица Edge имеет следующую структуру:

Edge(sourceID, tag, ordinal, targeteID, Data )

Ключ таблицы Edge {sourceID, ordinal}.Простой вариант подхода Edge должен хранить имена атрибута в отдельной таблице.

2.7.2.2 Подход Атрибута

В этом методе, всеми атрибутами с тем же самым именем была группа в одну таблицу. Этот подход соответствует горизонтальному разделению таблицы Edge, используемой в первом подходе, использование имени как атрибут разделения. Таким образом, там мы создаем так много таблиц атрибутов, имеет структуру:

A-имя (source, ordinal, flag, target )

Ключ такой таблицы атрибута - {source, ordinal}, и все поля имеет то же самое значение как в подходе Edge

3.Эксперименты/ результаты

Эксперимент проводился на Windows XP машина; RAM на 512 МБ 40Gb Жесткий диск. Программное обеспечение: Oracle 10g и SQL Server 2005 используются. База данных от XMark и вопросов, случайных от 20 вопросов XMark, и я дала некоторые вопросы для сравнения разных методов.

3.1 Сравнение разных методов

3.1.1 Время погрузки данных

SQL Server (s) Oracle (s)
Тип XML данных 197 87s
XQuery 200 100
DTD подход 518400 --
Edge подход 432000 --

Видим в таблицу, мы получим: Два метод DTD подход и Edge подход, в которых надо выбрать данные из XML данных и потом вставить в таблицу, поэтому время погрузки данных медленнее, чем много раз подходов Тип XML данных и XQuery, которые только вставить в одну строку таблицы. В DTD подход, поскольку в каждый тэг надо создать соответствующую таблицу и в Edge подход все данные только создать одну таблицу, поэтому время погрузки данных быстрее чем, DTD подхода.

В Oracle, время чтобы загрузить данных в таблицы надо много времени, поэтому я не проводила эксперимент DTD поход и Edge подход в Oracle.

3.1.2 Память хранения данных из 110Mb XML данных

SQL Server (Mb) Oracle (Mb)
Тип XML данных 172.2 140
XQuery 172.2 140
DTD подход 230 --
Edge подход 210 --

Из таблицы, мы видим так, в DTD подходе и Edge подходе мы храним данные в таблицы с много строк, которые нужны дополненная память для индекса. В тип XML данных и XQuery подходах только хранятся в одну строку, поэтому память хранения данных DTD и Edge подходов много чем, тип XML данных и XQuery.

3.1.3 Время выполнения запросов

В этом эксперименте, я сделала DTD и Edge подходы только в узел person поэтому запросы я не использовала запросы из XMark, а я сама думала запросы. И запросы такие:

Q1: Выбрать люди, которые имеют ordinal равно 100

Q2: Выбрать люди, которые не имеют homepage

Q3: Найти все люди.

Q4: Найти имя, адрес всех людей, которые имеют zipcode равно 22

Q5: Выбрать имя, age, пол, income людей, которые имеют open_auction равно 6634

Q6: Найти сумм всех людей, у которых есть income > =100

Q7: Выбрать имя, улицы, город, страна людей, у которых имеют education =”College

Q8: Найти людей, у которых есть телефон и пол «female»

Q9: Найти сумм всех женских

Q10: Выбрать имя, пол, education людей, у которых есть creditcard

Время выполнения:

Query SQL Server Oracle
Тип XML XQuery DTD Edge Тип XML XQuery
Q1 23 20 2 2 1543 2956
Q2 12 19 1 1 1666 7873
Q3 20 30 3 3 2416 6265
Q4 2500 35 1 3 1308 8157
Q5 15 20 2 8 7065 7515
Q6 2550 65 0.5 6 2325 8115
Q7 2200 44 1 7 2453 6315
Q8 2600 70 1 2 2154 7265
Q9 1000 28 4 15 3421 5437
Q10 200 22 2 10 4325 7125

Из результатов, мы видим что: