| Foreword | p. ix |
| Foreword | p. xi |
| Preface | p. xiii |
| Tutorial | |
| What RELAX NG Offers | p. 3 |
| Diversity | p. 3 |
| Keeping Documents Independent of Applications | p. 3 |
| Validation Has Many Aspects | p. 4 |
| The Best Way to Validate XML Document Structures | p. 4 |
| RELAX NG's Diverse Applications | p. 5 |
| RELAX NG as a Pivot Format | p. 6 |
| Why Use Other Schema Languages? | p. 7 |
| Simple Foundations Are Beautiful | p. 8 |
| Documents and Infosets | p. 8 |
| Different Types of Schema Languages | p. 9 |
| A Simple Example | p. 10 |
| A Strong Mathematical Background | p. 12 |
| Patterns, and Only Patterns | p. 13 |
| First Schema | p. 14 |
| Getting Started | p. 14 |
| First Patterns | p. 15 |
| Complete Schema | p. 20 |
| Introducing the Compact Syntax | p. 24 |
| First Compact Patterns | p. 25 |
| Full Schema | p. 28 |
| XML or Compact? | p. 29 |
| Flattening the First Schema | p. 31 |
| Defining Named Patterns | p. 33 |
| Referencing Named Patterns | p. 34 |
| The grammar and start Elements | p. 35 |
| Assembling the Parts | p. 36 |
| Problems That Never Arise | p. 42 |
| Recursive Models | p. 43 |
| Escaping Named Pattern Identifiers in the Compact Syntax | p. 44 |
| More Complex Patterns | p. 45 |
| The group Pattern | p. 45 |
| The interleave Pattern | p. 46 |
| The choice Pattern | p. 48 |
| Pattern Compositions | p. 49 |
| Order Variation as a Source of Information | p. 50 |
| Text and Empty Patterns, Whitespace, and Mixed Content | p. 51 |
| Why Is It Called interleave? | p. 54 |
| Mixed Content Models with Order | p. 57 |
| A Restriction Related to interleave | p. 59 |
| A Missing Pattern: Unordered Group | p. 61 |
| Constraining Text Values | p. 62 |
| Fixed Values | p. 62 |
| Co-Occurrence Constraints | p. 62 |
| Enumerations | p. 70 |
| Whitespace and RELAX NG Native Datatypes | p. 70 |
| Using String Datatypes in Attribute Values | p. 72 |
| When to Use String Datatypes | p. 73 |
| Using Different Types in Each Value | p. 74 |
| Exclusions | p. 74 |
| Lists | p. 76 |
| Data Versus Text | p. 78 |
| Datatype Libraries | p. 80 |
| W3C XML Schema Type Library | p. 80 |
| DTD Compatibility Datatypes | p. 98 |
| Which Library Should Be Used? | p. 101 |
| Using Regular Expressions to Specify Simple Datatypes | p. 104 |
| A Swiss Army Knife | p. 104 |
| The Simplest Possible Pattern Facets | p. 105 |
| Quantifying | p. 106 |
| More Atoms | p. 107 |
| Common Patterns | p. 115 |
| Creating Building Blocks | p. 120 |
| Using External References | p. 120 |
| Merging Grammars | p. 134 |
| A Real-World Example: XHTML 2.0 | p. 149 |
| Other Options | p. 153 |
| Namespaces | p. 160 |
| A Ten-Minute Guide to XML Namespaces | p. 160 |
| The Two Challenges of Namespaces | p. 165 |
| Declaring Namespaces in Schemas | p. 166 |
| Accepting Foreign Namespaces | p. 171 |
| Namespaces, Building Blocks, and Chameleon Design | p. 179 |
| Writing Extensible Schemas | p. 188 |
| Extensible Schemas | p. 188 |
| The Case for Open Schemas | p. 206 |
| Extensible and Open? | p. 208 |
| Annotating Schemas | p. 211 |
| Common Principles for Annotating RELAX NG Schemas | p. 211 |
| Documentation | p. 226 |
| Annotation for Applications | p. 238 |
| Generating RELAX NG Schemas | p. 250 |
| Examplotron: Instance Documents as Schemas | p. 251 |
| Literate Programming | p. 258 |
| UML | p. 264 |
| Spreadsheets | p. 270 |
| Simplification and Restrictions | p. 275 |
| Simplification | p. 275 |
| Restrictions | p. 295 |
| Determinism and Datatype Assignment | p. 305 |
| What Is Ambiguity? | p. 305 |
| The Downsides of Ambiguous and Nondeterministic Content Models | p. 315 |
| Some Ideas to Make Disambiguation Easier | p. 318 |
| Reference | |
| Element Reference | p. 323 |
| Compact Syntax Reference | p. 371 |
| Datatype Reference | p. 409 |
| Appendixes | |
| DSDL | p. 451 |
| The GNU Free Documentation License | p. 458 |
| Glossary | p. 467 |
| Index | p. 473 |
| Table of Contents provided by Ingram. All Rights Reserved. |