290 likes | 425 Views
XML Data Management 10. Deterministic DTDs and Schemas. Werner Nutt. How Expressive can a Schema Be?. This schema is a frequent example in teaching material on XML Schema.
E N D
XML Data Management10. Deterministic DTDs and Schemas Werner Nutt
How Expressive can a Schema Be? This schema is a frequent example in teaching material on XML Schema <xsd:complexType name=“oneB”> <xsd:choice> <xsd:elementname=“B”type=“xsd:string”/> <xsd:sequence> <xsd:elementname=“A”type=“onlyAs”/> <xsd:elementname=“A”type=“oneB”/> </xsd:sequence> <xsd:sequence> <xsd:elementname=“A”type=“oneB”/> <xsd:elementname=“A”type=“onlyAs”/> </xsd:sequence> </xsd:choice></xsd:complexType> <xsd:elementname=“A”type=“oneB”/><xsd:complexType name=“onlyAs”> <xsd:choice> <xsd:sequence> <xsd:elementname=“A”type=“onlyAs”/> <xsd:elementname=“A”type=“onlyAs”/> </xsd:sequence> <xsd:elementname=“A”type=“xsd:string”/> </xsd:choice></xsd:complexType> What would documents look like that satisfy this schema? Arbitrary deep binary tree with A elements, and a single B element How would one check validity? What would be the cost? What are the pros and cons of allowing such schemas?
Here is the Full Error Message from Eclipse • cos-element-consistent: Error for type 'oneB'. Multiple elements with name 'A', with different types, appear in the model group. • cos-element-consistent: Error for type 'onlyAs'. Multiple elements with name 'A', with different types, appear in the model group. • cos-nonambig: A and A (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. • cos-nonambig: A and A (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. I.e., in a given context, elements with the same name must have the same content. Easy to check! That’s more subtle ...
The Country Example in XML Schema <?xmlversion="1.0"encoding="UTF-8"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/country" xmlns="http://www.example.org/country" elementFormDefault="qualified"> <xsd:elementname="country"> <xsd:complexType> <xsd:choice> <xsd:elementname="king"type="xsd:string"></xsd:element> <xsd:elementname="queen"type="xsd:string"></xsd:element> <xsd:sequence> <xsd:elementname="king"type="xsd:string"></xsd:element> <xsd:elementname="queen"type="xsd:string"></xsd:element> </xsd:sequence> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> As DTD: <!ELEMENTcountry (king |queen| (king,queen))>
Also this is not validated … • cos-nonambig: king and king (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. Let’s check what this means!
What the W3C Standard Explains … Schema Component Constraint: Unique Particle Attribution A content model must be formed such that during ·validation· of an element information item sequence, the particle contained directly, indirectly or ·implicitly· therein with which to attempt to ·validate· each item in the sequence in turn can be uniquely determinedwithout examining the content or attributes of that item, and without any information about the items in the remainder of the sequence. http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#cos-nonambig
Questions and Ideas Questions: • How can one make the standard formal? • How can a validator implement the standard? Ideas: • Content models are specified by regular expressions • A regular expression E can be translated into a finite state automaton A (Glushkov automaton)that checks which strings satisfy E Construct A from E and check whether A is deterministic
Formalization • Alphabet (i.e., set of symbols): the element names occurring in the content model • Regular expressions over are generated with the rule e, f a | (ef) | (e|f) | (e)+ | (e)* where e, f are expressions and a • Language L(e) of an expression e (inductively defined) • Exercise: Which of the following are in the language defined by a* (b | c) a+ ? • aba • abca In the following, we denote concatenation by a dot, no more by a comma. • aab • aaacaaa
Regular Expressions and DTDs These are formalizations of DTDs and validation: A DTD is a pair (d, s) where • s is the start symbol • dmaps every -symbol to a regular expression over A document treetsatisfiesd (t is valid wrt d) iff • the root of t is labeleds • for every noden in t, with symbol a, the string formed by the names of the children of nsatisfies d(a) Validation is checking whether a string satisfies a regexp
Markings Distinguish between the different occurrences of a symbol in a regexp by using numbers: markings of regexps Examples: • a1* (b2 | c3) a4+ is a marking of a* (b | c) a+ • king1 | queen2 | king3 queen4 is a marking of king | queen | king queen Definition A markinge′ of a regular expression e is an assignment of numbers to every symbol in e.
Unmarked Version Consider a regular expression e and a e marking of e Definition: For w L(e) , we denote by w#the corresponding unmarked string in L(r). Example: If w = b2a1a3, then w# = baa
“Unique Particle Attribution”: Formalization Brüggemann-Klein/Wood [1998] Definition: A regular expression r is deterministic iff there are no strings uxv, uyw ∈ L(r′) with • |x| = |y| = 1 • x y, (x and y are different marked symbols) • x# = y# (their unmarking is the same). Example: (a | b)* a is not deterministic because there are • marking ((a1 + b2)∗ a3) • strings b2 a1 a3 and b2 a3 u x w u x v How can we check, whether e is deterministic?
Finite State Automata The automaton is deterministic if every pair (q,a) is only mapped to a single state • Regular anguages can also be defined using automata • A finite state automaton (FSA) consists of: • a set of statesQ. • an alphabet(i.e., a set of symbols) • a transition function, which maps every pair (q,a) to a set of states q’ • an initial stateq0 • a set of accepting states F • A word a1…an is in the language defined by an automaton if there is a path from q0 to a state in Fwith edges labeled a1,…,an
b a q2 q0 q1 b c q3 a Which Language Does this FSA Define?
Non-Deterministic Automata • An automaton is non-deterministic if there is a state q and a letter a such that there are at least two transitions from qvia edges labeled with a What words are in the language of a non-deterministic automaton? • We now create a Glushkov automaton from a regular expression
a1*(b1|c1)a2+ Creating a Glushkov Automaton from a Regular Expression Step 1: Create a markingof the expression a*(b|c)a+
b1 a1 a2 c1 Creating a Glushkov Automaton from a Regular Expression Step 2: Create a stateq0 and create a state for each subscripted letter a1*(b1|c1)a2+ Step 3: Choose as accepting states all subscripted letters with which it is possible to end a word How do we find these states? q0
b1 q0 a1 a2 c1 Creating a Glushkov Automaton from a Regular Expression Step 4: Create a transition from a state lito a state kjif there is a word in which kjfollowsli. Label the transition with k a1*(b1|c1)a2+ How do we find these transitions?
Exercises What are the Glushkov automata of • a* b (a b)* • (a | b)* a (a | b) • (a | b)*a ?
Recognizing Deterministic Regular Expressions Theorem(Book et al 1971, Brüggemann-Klein, Wood, 1998) A regular expression is deterministic (one-unambiguous) iff its Glushkov automaton is deterministic.
Construction of the Glushkov Automaton For an arbitrary alphabet and a language L * we define two sets first(L) = a u *. au L last(L) = a u *. ua L and the function follow(L,a) = b u,v *. uabv L. Consider an expressione and its markinge We can construct the Glushkov automaton for e if we know the sets first(L(e)) , last(L(e)) , the function follow(L(e), ) , and if we know whether L(e) . empty word Why?
Construction of the Glushkov Automaton Where do we get this info? If e = a1, then • first(L(e)) = a1 • last(L(e)) = a1 • follow(L(e), ) is not defined for any li Also, L( e) If e = (f | g), then • first(L(e)) = first(L(f)) first(L(g)) • last(L(e)) = last(L(f)) last(L(g)) • follow(L(e), li) =follow(L(f), li) if li L(f) = follow(L(g), li) if li L(g) Also, L(e) if L(f) or L(g) For e = f*, f+, fg,exercise!
Construction of the Glushkov Automaton If e = (fg), then • first(L(e)) = first(L(f)) first(L(g)) if L(f) = first(L(f))otherwise • last(L(e)) = last(L(f)) last(L(g)) if L(g) = first(L(g))otherwise • follow(L(e), li)=follow(L(f), li) if li in f but not li last(L(f)) = follow(L(g), li) first(L(g)) ifli last(L(f)) =follow(L(g), li) if li ing Also, L(e) if L(f) and L(g)
Construction of the Glushkov Automaton If e = (f*), then • first(L(e)) = first(L(f)) • last(L(e)) = last(L(f)) • follow(L(e), li)=follow(L(f), li) if li in f but not li last(L(f)) = follow(L(f), li) first(L(f)) ifli last(L(f)) Also, L(e) if L(f) and L(g)
Recognizing Deterministic Regular Expressions Observation: • For each operator, first, last, and follow can be computed in quadratic time. This yields an O(n3) algorithm. Theorem(Brüggemann-Klein, Wood, 1998) • There is an O(n2) algorithm to check whether a regexpis deterministic.
More Results Theorems(Brüggemann-Klein, Wood, 1998) • Not every regular language can be denoted by a deterministic regular expression. E.g.,(a | b)* a (a | b) • Deterministic regular languages are not closed under union, concatenation, or Kleene-star. I.e., there is no easy syntactic characterization • If it exists, an equivalent deterministic regular expression can be constructed in exponential time. It is possible to help users, but that is costly
Theory for XML Schema XML schema allows schemas where • the same element appears with different types However, • it is illegal to have two elements of the same name,but different types in one content model. Also, content models must be deterministic. Consequence: Documents can be validated in a deterministic top-down pass
References This material draws upon slides by • Sara Cohen • Frank Neven, notes by • Leonid Libkin and the papers by A. Brüggemann-Klein and D. Wood