数据库应用-半结构化数据模型(Semistrukturierte Datenmodelle)2

来源:互联网 发布:戚家刀 淘宝 编辑:程序博客网 时间:2024/06/02 09:58

OEM(Object Exchange Model)

OEM中有两种类型:
原子类型(Atomare Typen): string
混合类型(Polymorphe Typen):
Obj ::= || sel: Typ||
Set ::= {Obj}
其中:
Typ 是原子类型或Obj
Object:Selector(Attribute)//(Sammlung atomarer oder zusammengesetzter Datenelement)属性-值
Set是Obj的集合(严格来说这个并无卵用???)
//欠图片一张 OEM-Illustration
在OEM中同个Selector可能多次出现,同时不同位置的Object可能指向同一个Object
相较而言OEM的结构强度(Strukturelle Mächtigkeit)并不咋样,但是他结构的正交性比较好(Orthogonalität)
与XML的不同:
1.顺序:OEM顺序无关
2.schema:OEM无Schema//XML呢??
3.kante:OEM边有标志,即属性
4.原子类型:仅一个//???
5.Obj-Identifier:OEM有Obj-Identifier

文档类型定义(Dokumenttypdefinition)DTD

DTD本质上就是一系列的规则或者说是语法(Reglen/Grammatik)
他规定了文档中可以出现的Markup,以及他们应在什么地方出现。
DTD中包含有内容模型(Inhaltsmodell),并通过Inhaltsmodell定义结构化的元素。举个例子,他可以在Inhaltsmodell中定义,一个元素比如book必须包含有元素price和author。

<!ELEMENT bookstore (book)*><!ELEMENT book (title,author+,price?)><!ELEMENT book genre CDATA #REQUIRED><!ELEMENT title (#PCDATA)><!ELEMENT author (name|(first name,last name))><!ELEMENT price (#PCDATA)><!ELEMENT name (#PCDATA)><!ELEMENT first name (#PCDATA)><!ELEMENT lastname (#PCDATA)>

//为什么和前面的GML的代码感觉一模一样,没搞错把?????
结构优美和有效(Wohlgeformt vs. gültig):
结构优美(Wohlgeformt)是指文档中的内容有整齐的句法结构
有效(gültig,valid)指首先一个文档是结构优美的,并且遵守一个事先定好的Schema。
比如,按照DTD定义的文档。

XML-Engine(XML引擎)

XML-Engine就是一个用于检测文档是否符合结构优美和有效规定的工具。(前提是使用了DTD)
DTD-元素描述(Deklaration von Elementen):
Syntax:
<!DOCTYPE XXX [(ELEMENT|ATTLIST)]> //确定根元素xxx
<!ELEMENT Name (Definition)>
唯一一个原子类型:#PCDATA(Parsed Character DATA)
(a,b,c):子元素列表
(a|b|c):可选
正规:
*:零次或任意多次
+:一次或任意多次
?:一次或零次
(没任何符号):一次
EMPTY:必须使用空元素//??
DTD-属性描述(Deklaration von Attributen):
Syntax:
<!ATTLIST Element Attributename1 Typ1 Zusatz1 Attributename2...>
类型(Typ:)
CDATA: 字符串(Zeichenkette)
ID: OID(Object identifier)
IDREF: Reference
IDREFS: Reference的集合
补充:
REQUIRED: 强制的,必须得(zwingend)
IMPLIED: 可选的(optional)
(初始值) //设定默认的初始值???

<!DOCTYPE family[<!ELEMENT family (person*)><!ELEMENT person (name)><!ELEMENT name (#PCDATA)><!ATTLIST personid      ID      #REQUIREDmother  IDREF   #IMPLIEDfather  IDREF   #IMPLIEDchildrenIDREFS  #IMPLIED]>

//IDREF必须指向存在的ID
但是上面的表达还是存在缺陷的,比如他不能表达一下内容:
一个人不能同时又是父亲又是母亲
父亲只能是男的
父亲/母亲不能反过来成为儿子的子孙
DTD中的递归:
DTD中允许使用递归定义:

<!DOCTYPE paper[<!ELEMENT paper (section*)><!ELEMENT section ((title,section*)|text)><!ELEMENT title (#PCDATA)><!ELEMENT text (#PCDATA)>]>

//S30到S39有好多图 不知道是干什么的?????
对DTD的评价:
DTDs在定义Schema这方面存在一些不足:
1.Reference没法被限制(Referenzen können nicht eingeschränkt(typisiert) werden)
2.同一个namespace中的元素都是global的(Alle Elementnamen sind global in einem Namensraum)
3.强制规定了所有的顺序:(ungewollte Festung der Reihenfolge)
<!ELEMENT person (name,phone)>
//此上强制规定了name和phone的顺序,要解除这规定有点麻烦:
<!ELEMENT person((name,phone)|(phone,name))>
4.有些表达太过于模糊:(Kann teilweise zu vage werden)
<!ELEMENT person ((name|phone|email)*)>

XML应用

序言

以前应用开发,首先重视的是建模。而现在一般都使用XML文档//这句不理解????
(Bis jetzt:Herangehensweise eher kontemplativ Modellierung stand im Vordergrund.Jetzt:Arbeitens mit XML-Dokumenten)
一般情况下,基于XML的应用比较容易实现(Es muss leicht möglich sein, XML-basierte Anwendungen zu entwickeln)
两个程序接口(Prozedurale Mechanismen,zwei Schnittstellen):
DOM(Document Object Model):以面向对象的方式描述XML文档(objektorientierte Sicht auf XML-Dokumente)。是W3C组织推荐的处理可扩展标志语言的标准编程接口。(来自百度百科)
SAX-API(simple API for XML):使用回调机制(Fallback-Mechanismus).他是一个 event-driven serial-access 类 型的 XML 处理机制。
/*
XML-Engine validiert auch
DOM:Anwendung hält Kontrolle über den Ablauf
Callback-Methoden:XML-Engine hält Kontrolle
????
*/
XSL(Extensible Stylesheet Language):
是XML的索引(XQuery)或转化机制(XSLT:基于Xpath)

DOM(Document Object Model)

以面向对象的方式处理XML文档以及文档中的组成成分(Objektorientierte Sicht auf XML-Dokument und Dokumentbestandteile)。
可以生成对应的树结构(Baumstruktur),树结构展示的内容不仅包括元素还包括其他所有的组成成分。DOM还提供了对应的基于树结构的定位方法(Navigieren)和修改(Manipulieren des Baum)树的方法。
DOM不包含有对对象的具体实现,他只提供接口//不了解???
(Keine Aussagen über die konkrete Implementation der Objekte, nur Methodeninterface wird spezifiziert.DOM-Anwender muss sich Klassenbibliothek besorgen, die er verwenden kann.)
//插一图 若能上传
//具体还得去别处找

SAX(Simple API for XML)

SAX使用的主要方法是回调函数,他是事件驱动的。也就是说只有当特定的事件发生时,他才会调用特定的方法。
//(D.h. XML-Engine hat Kontrolle über den Ablauf???)
SAX 工作起来有点像一个 连续 的 I/O 流,能 实时 的 传 送和接收数据,它不会去构造 XML 的 树 形 结 构,所以只需要很少的内存。当然 这 在另一方面 , 也 导 致了你不能退回到早前 读 取的一个 element 或者跳到后面 还 未 读 到的 element 。(这段是从shensuqiao的博客上抄过来的)
那么什么时候要用到SAX呢??因 为 SAX 是 处 理 XML 文件的最快的,内存需求最小的 解析器 ,所以当你只需要 简单 地 读取 数据,好 让 你的程序运行 这 些数据的 时候 ,SAX 是很好的 选择 。因此, SAX 常被用于 servlet 和面向 网络 编程的存取 XML 文件。(同样是从shensuqiao的博客中抄来的)
//最后补充点课件里看不懂的???
/*
Schnittstelle der Fallback-Methoden ist standardisiert, Implementierung ist anwendungsspezifisch.
Anwendungsprogrammierer schreibt und lässt nur Fallback-Methoden registrieren für Ereignisse, an denen er interessiert ist.
*/

0 0
原创粉丝点击