This document contains the issues raised by comments on XML Schema during its Last-Call period. Officially, the Last-Call comment period began 7 April 2000 and ended 12 May 2000; it does not in general contain issues raised earlier or later (though there are some exceptions). In its current form it has been prepared by Michael Sperberg-McQueen.
The process by which the XML Schema WG plans to handle these issues is described at http://www.w3.org/2000/04/24-xmlschema-lcprocess.html.
Material reproduced from comments has been marked up, and obvious typos have been corrected. Postings and documents which raise several issues have been silently divided among several issues. To consult the original postings, consult the archive of the comments list.
Commentators have been requested to consult the records for the issues they have raised, and check to make sure we have correctly understood and paraphrased the issue. (Note that in a few cases the paraphrase poses a slightly broader question that the commentator appears to have had in mind.)
In addition to the postings to the XML Schema comments list, some postings to the XML Schema Interest-Group mailing list have been included here; this list is W3C-internal and only those with member access to the W3C web site will be able to follow the relevant hyperlinks. Where we have received permission to quote the original posting in this public document, we have done so; in other cases, a paraphrase enclosed in square brackets has been supplied. Links to member-only material included in postings to the public list have been left intact in the interests of completeness (for those who do have member access) and simplicity (for those maintaining this document).
In addition, the following documents have been consulted:
| Num | Cl | Cluster | Locus | Originator | Responsible | Description |
|---|---|---|---|---|---|---|
| LC-1 | C | 04 datetime | datatypes 3.3.22 | Martin Bryan, Paul Cotton | editor | Specify date/time validity better? |
| LC-2 | D | 23 constructors | datatypes | Curt Arnold | Martin Gudgin | Conjunction types? |
| LC-3 | C | 01 facets | datatypes 2.4.1.2 | Paul Cotton | editor | Why allow divergent order relations? |
| LC-4 | C | 01 facets | datatypes 2.4.2.5 | Paul Cotton | editor | Enumerations should inherit ordering from underlying type |
| LC-5 | C | 01 facets | datatypes 3.2.1 | Paul Cotton | editor | Ordering information is missing |
| LC-6 | D | 15 strings | datatypes 3.2.1 | Paul Cotton | Jonathan Robie | Do strings need collation sequence? |
| LC-7 | D | 26 numeric | datatypes 3.2.5 | Paul Cotton | Jonathan Robie | Arbitrary-precision decimal too much? |
| LC-8 | C | 04 numeric | datatypes 3.3.9 | Paul Cotton | editor | Integers should not allow non-significant leading or trailing zeroes |
| LC-9 | A | strings | datatypes | Peter Canning | Biron, Sperberg-McQueen | How do I restrict strings to ASCII or Latin 1? |
| LC-10 | D | 28 keys | structures | Mary F. Fernandez | David Beech, Ashok Malhotra | Clarify the exposition of identity-constraint tables |
| LC-11 | C | 04 datetime | datatypes | Aram Airapetian | editor | Date and time period |
| LC-12 | A | 19 modules | structures | Aaron M. Cohen | Dan Connolly | How can a module creator make attributes available to other modules? |
| LC-13 | A | 19 modules | structures | Aaron M. Cohen | Sperberg-McQueen | How can a module creator add things to content models in other modules? |
| LC-14 | D | 15 xpath | datatypes | Curt Arnold | Don Box | Define an XPath type |
| LC-15 | A | 14 attldecl | structures | Curt Arnold | Sperberg-McQueen | Allow hints for initial value of an attribute? |
| LC-16 | D | 24 content-models | structures | Martin J. Duerst | Matt Timmermans | Allow arbitrary order with occurrence > 1? |
| LC-17 | C | regex | datatypes | TAMURA Kent, Alexander Falk | editor | Give BNF for regular-expression language? |
| LC-18 | C | regex | datatypes | TAMURA Kent | editor | Clarify character-set subtraction? |
| LC-19 | C | regex | datatypes | TAMURA Kent | editor | Make - unambiguous in regexes? |
| LC-20 | C | regex | datatypes | TAMURA Kent | editor | Clean up definition of multi-character escape? |
| LC-21 | D | 27 i18n-datetime | datatypes | David RR Webber | Sperberg-McQueen | Allow non-gregorian dates? |
| LC-22 | C | publication | both | Murray Altheim | editor | Where's the glossary? |
| LC-23 | D | 21 sfs | both A | Alexander Falk | Dan Connolly | Use 2000 not 1999 in XML Schema namespace name? |
| LC-24 | C | ed-str | structures G | Alexander Falk | editor | Improve or drop tabulation of changes in Structures? |
| LC-25 | C | 01 facets | datatypes 3.2.2.2 | Alexander Falk | editor | Why have pattern facet for Boolean? |
| LC-26 | C | binary | datatypes 3.2.8.1 | Alexander Falk | editor | Drop pattern from binary? |
| LC-27 | D | 27 i18n-numeric | datatypes 3.2.3 - 3.2.5 | Alexander Falk, Dario De Judicibus | Sperberg-McQueen | Allow multiple lexical spaces for floats? |
| LC-28 | C | 01 facets | datatypes 3.3 | Alexander Falk | editor | Don't list fixed-value facets? |
| LC-29 | C | 04 datetime | datatypes | Alexander Falk | editor | Fix lexical form for recurringDay? |
| LC-30 | C | publication | datatypes A | Alexander Falk | editor | Where is xml.xsd? |
| LC-31 | C | publication | both | Alexander Falk | editor | Provide archive of spec, DTDs, stylesheets, and XSDs? |
| LC-32 | D | 15 regex | datatypes | Alexander Falk | Dave Peterson | Add shorthands to regex syntax? |
| LC-33 | A | regex | datatypes | Alexander Falk | Matt Timmermans | Why is {0,0} there? |
| LC-34 | C | regex | datatypes | Alexander Falk | Paul Biron | Define single-character escape for vertical bar? |
| LC-35 | C | typos | primer | David Wang | editor | Typo in example in Primer section 5? |
| LC-36 | B | process | requirements | David RR Webber | Dave Hollander, Michael Sperberg-McQueen | Reconsider project requirements and design? |
| LC-37 | A | 20 keys | both | Ani Pedersen | Noah Mendelsohn | Multi-field keys? |
| LC-38 | C | 13 occurs | primer | Nick K. Aghazarian | editor | Fix defaulting text for maxOccurs? |
| LC-39 | C | typos | primer 4.7 | Peter A. Berggren | editor | Typo: for finalDefault read blockDefault? |
| LC-40 | C | 20 keys | both | Henry Thompson | editor | xsi:null and keyref |
| LC-41 | C | typos | datatypes 3.3.22 | Curt Arnold | editor | Typos in datatypes? |
| LC-42 | C | typos | primer 3.1 | Adrian Robert | editor | Typos in Primer Section 3.1? |
| LC-43 | A | 02 enums | both | Martin Bryan | Martin Gudgin | Defining lists of permitted attribute values |
| LC-44 | A | dt-queries | datatypes | Martin Bryan | Ashok Malhotra | Questions relating to data types |
| LC-45 | A | 21 ns | structures | gmacri@libero.it | Henry Thompson | Questions |
| LC-46 | B | 11 infoset | structures | Mikael Ståldal | chairs | Remove default values? |
| LC-47 | C | typos | structures | Gregor Meyer | editor | Typo in example? |
| LC-48 | C | sfs | structures | Curt Arnold | editor | Fix declaration of simpleType element? |
| LC-49 | D | 12 content-models | structures | Curt Arnold | MSM, Matt Fuchs | Streamline restriction of content models? |
| LC-50 | C | sfs | structures | Curt Arnold | editor | Suppress multiple local declarations of attribute element? |
| LC-51 | D | 12 content-models | structures | Curt Arnold | Don Box, Dan Connolly | Can XML Schema define XSLT? |
| LC-52 | D | 13 occurs | structures 4.3.3 | Curt Arnold | Don Box | Clarify minOccur/maxOccur defaulting? |
| LC-53 | C | typos | primer 2.7 | Ray Gates | editor | Shipper/biller vs. Shippee/billee in part 0 |
| LC-54 | D | 04 numeric | datatypes | Gregor Meyer | Ashok Malhotra | Drop nonPositiveInteger? |
| LC-55 | D | 21 ns | datatypes | Curt Arnold | Henry Thompson | Proper home namespace/resource for built-in datatypes |
| LC-56 | D | 19 modules | structures | Curt Arnold | Mark Reinhold* | Add schemaPrefix, targetPrefix attributes? |
| LC-57 | D | 19 impl-modules | structures | Curt Arnold | Matt Fuchs | Add maximum depth for includes? |
| LC-58 | D | 58 impl-modules | structures 6.3.2 | Curt Arnold | Matt Fuchs | How to deal with nested imports? |
| LC-59 | D | 03 constructors | datatypes | Dario de Judicibus | Mary Holstege | Allow user-defined list separators? |
| LC-60 | A | 10 openness | structures | Dario de Judicibus | Roger Costello* | Change meaning of anyAttribute? |
| LC-61 | D | 03 constructors | datatypes | Dario de Judicibus | Frank Olken | Allow record-style simple types? |
| LC-62 | D | 25 facets | datatypes | Ray Waldin | Mary Holstege, Ashok Malhotra | Doubly specified facets |
| LC-63 | C | 12 content-models | structures | Richard Tobin | editor | Forbid recursion in content models? |
| LC-64 | A | entities | structures | Dario De Judicibus | Priscilla Walmsley | Entities |
| LC-65 | C | 14 attldecl | structures 3.2 | James Tauber | editor | Why are {min occurs}/{max occurs} optional in Attribute Declaration? |
| LC-66 | A | urtype | structures 3.4 | James Tauber | Henry Thompson | {name} of the Ur-Type |
| LC-67 | C | sfs | structures 3.4 | James Tauber | editor | Why does absent point to definition for null in glossary? |
| LC-68 | C | urtype | structures 3.4/3.13 | James Tauber | editor | Should there be a Simple Type Definition of the Ur-Type? |
| LC-69 | C | 14 attldecl | structures 4.3.3 | James Tauber | editor | Should "anyAttribute" have a "processContents" attribute? |
| LC-70 | C | 10 openness | structures 4.3.7 | James Tauber | editor | Can ##local stand alone in namespace attribute or must it be in a list? |
| LC-71 | C | 14 attldecl | structures 3.2/4.3.1 | James Tauber | editor | {value constraint} in top-level attribute declarations |
| LC-72 | C | 14 attldecl | structures 4.3.1 | James Tauber | editor | Representation of {target namespace} in second case has parent instead of ancestor |
| LC-73 | D | 21 publication | structures | Henry Thompson | Dan Connolly*, Henry Thompson | XML Schema Namespace versioning |
| LC-74 | D | 31 urtype | structures | Noah Mendelsohn | Paul Grosso, Noah Mendelsohn* | Define an explicit name for the urType? |
| LC-75 | A | 09 appinfo | structures 4.3.10 | David Vun Kannon | Frank Olken | Using appinfo annotations to store integrity constraints |
| LC-76 | A | 14 attldecl | structures | David Vun Kannon | Rick Jelliffe* | Defining inherited attribute values |
| LC-77 | D | 17 sfs | datatypes | Curt Arnold | Paul Biron* | Namespace of has-facet, has-property |
| LC-78 | C | 21 ns | both | Alexander Falk | editor | Possible schema validation issue in 3.0b3 |
| LC-79 | C | sfs | datatypes A | Dan Vint | editor | Stray data in Datatypes schema? |
| LC-80 | C | sfs | datatypes | Dan Vint | editor | Stray slash in declaration of base attribute for simple types? |
| LC-81 | C | publication | both | Dan Vint | editor | Schema-for-schema files |
| LC-82 | A | 09 appinfo | requirements | Robert Miller | Matt Fuchs, Jonathan Robie | XML Schema considered inadequately extensible |
| LC-83 | A | 09 appinfo | both | Robert Miller | Jim Barnette | Better support for semantics? |
| LC-84 | A | 15 arrays | both | Robert Miller, MPEG-7 | Frank Olken | Arrays? |
| LC-85 | C | 14 attldecl | structures 4.3.1 | James Tauber | editor | 4.3.1: second scenario: should value constraint default to FIXED? |
| LC-86 | C | 21 ns | structures 3 | Peter Canning | editor | Optional component != mandatory but absent? |
| LC-87 | C | xsinull | primer 2.3 | Curt Arnold | editor | Value space for xsi:null attribute |
| LC-88 | C | 03 constructors | primer 2.3 | Curt Arnold | editor | Limits on lists |
| LC-89 | A | 19 modules | primer 3.4 | Curt Arnold | Henry Thompson | Undeclared and unnamed namespaces |
| LC-90 | D | 12 content-models | primer 4.2 | Curt Arnold | David Fallside* | Extension of mixed types |
| LC-91 | D | 31 entities | structures | Steven Pemberton | Don Mullen* | Support declaration of character entities? |
| LC-92 | A | 19 modules | structures | Dr. Ardeshir Bahreininejad | Mary Holstege | Dynamic element name specification. |
| LC-93 | D | 23 constructors | datatypes | David Vun Kannon | Ashok Malhotra | Disjoint datatypes? |
| LC-94 | A | 07 typedecl | structures 5.11 | Asir S Vedamuthu | Henry Thompson* | Clarify Structures 5.11 Complex Type Definition Constraints - Type Derivation OK |
| LC-95 | A | 19 modules | structures | Jane Hunter | Sperberg-McQueen | Use of xml:lang |
| LC-96 | D | 10 openness | structures 2.2.2.2 | Curt Arnold | Henry Thompson, Ugo Corda* | equivClass: common ancestor type |
| LC-97 | D | 04 numeric | datatypes | Doug Ransom | Frank Olken | Allow hex notation for integers? |
| LC-98 | A | 19 modules | structures | gmacri@libero.it | David Ezell* | Clarifying schema location and namespace |
| LC-99 | A | 20 keys | structures | gmacri@libero.it | Jonathan Robie* | XPath expressions in key definitions |
| LC-100 | C | ed-str | structures 3.8 | Michael K Smith | editor | Suggested rewording in '3.8 Particle Details' |
| LC-101 | A | 14 attldecl | structures | achille@us.ibm.com | Chuck Campbell | Help on Wildcard |
| LC-102 | D | 03 constructors | both | Anders W. Tell | David Ezell | Suggestion: Microparsing support in XML Schema |
| LC-103 | A | 01 facets | datatypes | Michael Anderson | Lew Shannon | Restricting Facets |
| LC-104 | A | requirements | both | Joseph M. Reagle Jr. | Sperberg-McQueen | XML Signature WG's review of XML Schema |
| LC-105 | A | requirements | both | Joseph M. Reagle Jr. | Sperberg-McQueen | Please stabilize syntax |
| LC-106 | C | 08 complexity | structures 2.2 | Joseph M. Reagle Jr. | editor | Restructure Structures 2.2.*, or define components? |
| LC-107 | C | 08 complexity | both | Joseph M. Reagle Jr. | editor | Reagle's comments on XML Schema |
| LC-108 | C | 08 complexity | both | Joseph M. Reagle Jr. | editor | Clear relation of xsi and xsd namespaces |
| LC-109 | C | publication | structures A | Joseph M. Reagle Jr. | editor | Make schema and DTD locations more explicit? |
| LC-110 | C | publication | both | Joseph M. Reagle Jr. | editor | Simplify default values, or document better |
| LC-111 | C | 08 complexity | primer 3 | Joseph M. Reagle Jr. | editor | Clearer guidelines in Primer section 3? |
| LC-112 | A | 12 content-models | structures | Bob Schloss | Henry Thompson | Determinism and Choices of Sequences |
| LC-113 | C | misc | structures | Susan Lesch | editor | Minor comments for WD-xmlschema-1-20000407 |
| LC-114 | C | 08 complexity | structures | Curt Arnold | editor | Minor part 1 comments |
| LC-115 | A | 19 modules | structures 6.2.2 | Curt Arnold | Roger Costello | Resolution of QNames references |
| LC-116 | D | 19 modules | structures 6.3.2 | Curt Arnold | Noah Mendelsohn | Require declaration before use of schema location? |
| LC-117 | D | 19 modules | structures 6.3 | Curt Arnold | Noah Mendelsohn | (Locating Schema resources) |
| LC-118 | D | 27 i18n-boolean | both | Martin J. Duerst | Ashok Malhotra | Making it easy to create signable schemas |
| LC-119 | A | 19 modules | structures | gmacri@libero.it | Ugo Corda | Question on include |
| LC-120 | C | 04 datetime | datatypes | Ninggang Chen | editor | [Clarifications] Part 2 Datatypes |
| LC-121 | D | 05 fco | structures | Tim Berners-Lee | Henry Thompson | Element names should be xml:ids in schemas |
| LC-122 | C | 05 fco-appinfo | structures | Ralph R. Swick | Paul Biron | xsd:appinfo |
| LC-123 | D | 17 sfs/content-models | structures | Curt Arnold | Henry Thompson | Inconsistency on content model for group |
| LC-124 | D | formal | both | Jane Hunter | Frank Olken | MPEG-7 Feedback to Last Call for Review |
| LC-125 | B | process | requirements | David RR Webber | Dave Hollander | Extend last-call comment period? |
| LC-126 | D | 12 content-models | structures | Henry Thompson | Henry Thompson | Content model of <complexType> |
| LC-127 | D | 11 infoset | structures | Henry Thompson | Henry Thompson | Error logging in the infoset |
| LC-128 | D | 31 modules | structures | Henry Thompson | Lee Buck | Lee Buck's use case returns: a hesitant proposal for type modification |
| LC-129 | C | typos | datatypes | Susan Lesch | editors | Minor typos in WD-xmlschema-2-20000407 |
| LC-130 | D | formal | both | Roger L. Costello | Roger Costello, Noah Mendelsohn | XML Schema Comments |
| LC-131 | - | - | - | - | - | [Dummy] |
| LC-132 | A | 12 content-models | structures | Dan Rupe | Martin Gudgin | Contents which may occur in any order |
| LC-133 | D | 05 fco | datatypes | Ralph R. Swick | Henry Thompson | Well-known URIs for all built-in datatypes and facets |
| LC-134 | - | - | - | - | - | [Dummy] |
| LC-135 | A | 06 localtypes | structures | Ralph R. Swick | Noah Mendelsohn | 'form' and 'elementFormDefault' appear harmful |
| LC-136 | D | 15 constants | both | Steven Goldfarb | Frank Olken | Symbolic constants |
| LC-137 | - | - | - | - | - | [Dummy] |
| LC-138 | - | - | - | - | - | [Dummy] |
| LC-139 | A | 12 content-models | structures | Ninggang Chen | Dan Connolly* | Mixed Content Model |
| LC-140 | - | - | - | - | - | [Dummy] |
| LC-141 | - | - | - | - | - | [Dummy] |
| LC-142 | D | formal | both | Jim Trezzo | Ashok Malhotra, David Beech | Oracle Comments on XML Schema Last Call: |
| LC-143 | D | 30 complexity | structures | Philip Wadler | Matt Fuchs | Simplifying XML Schema |
| LC-144 | A | 15 arrays | datatypes | Don Brutzman | Frank Olken | X3D-related comments on Schema datatypes |
| LC-145 | A | 09 appinfo | datatypes | Don Brutzman | Priscilla Walmsley | How do I specify additional numeric constraints? |
| LC-146 | A | 12 content-models | structures | gmacri@libero.it | Henry Thompson | Question on "ref" attribute |
| LC-147 | - | - | - | - | - | [Dummy] |
| LC-148 | - | - | - | - | - | [Dummy] |
| LC-149 | A | 10 openness | structures | Jane Hunter (MPEG-7) | Frank Olken, Lee Buck | Provide guidance on extending schema for schemas? |
| LC-150 | D | 15 arrays | both | Jane Hunter (MPEG-7) | Frank Olken | Allow specification of size constraints in instance? |
| LC-151 | A | 20 keys | structures | Jane Hunter (MPEG-7) | Frank Olken | How do I restrict IDREFs to particular (element) types? |
| LC-152 | D | 07 typedecl | structures | Jane Hunter (MPEG-7) | Frank Olken | Simultaneous restriction and extension? |
| LC-153 | D | 24 occurs | structures | Jane Hunter (MPEG-7) | Frank Olken | Re-align occurrence indications for elements and attributes? |
| LC-154 | D | 19 modules | structures | Jane Hunter (MPEG-7) | Frank Olken | Allow explicit specification of name import/export? |
| LC-155 | D | 29 openness | structures | Roger L. Costello | Roger Costello, Noah Mendelsohn | Restore global openness |
| LC-156 | D | 29 openness | structures | Roger L. Costello | Roger Costello, Noah Mendelsohn | Make schema for schemas open? |
| LC-157 | D | 29 openness | structures | Roger L. Costello | Roger Costello, Noah Mendelsohn | Clarify schema evolution |
| LC-158 | D | 08 complexity | both | Roger L. Costello | Roger Costello, Noah Mendelsohn | Split the specification? |
| LC-159 | D | 28 keys-infoset | both | Jim Trezzo | Ashok Malhotra, David Beech | Add PSV infoset properties for keyref info? |
| LC-160 | D | 10 openness | both | Jim Trezzo | Ashok Malhotra, David Beech | Default equivclass blocking? |
| LC-161 | B | 11 infoset | both | Jim Trezzo | Ashok Malhotra, David Beech | An API needed for the PSV info set? |
| LC-162 | D | 28 infoset | both | Jim Trezzo | Ashok Malhotra, David Beech | Add items to PSV infoset for schemas? |
| LC-163 | D | 04 datetime | both | Jim Trezzo | Ashok Malhotra, David Beech | Recurring durations |
| LC-164 | D | 18 xsi | structures | Philip Wadler | Matt Fuchs | Drop xsi:type? |
| LC-165 | D | 23 xsi-nulls | structures | Philip Wadler | Matt Fuchs | Drop xsi:null? |
| LC-166 | D | 12 content-models | structures | Philip Wadler | Matt Fuchs | Align simple and complex types more fully? |
| LC-167 | D | 06 localtypes | structures | Philip Wadler, Murray Altheim | Matt Fuchs | Local declarations: less or more |
| LC-168 | A | 07 typedecl | both | Murray Altheim | Peter Chen | Drop/clarify anonymous types? |
| LC-169 | A | ed-primer | primer | Murray Altheim | David Fallside | Primer notes |
| LC-170 | D | 19 modules-include | structures | Murray Altheim | Aki Yoshida | Drop include? |
| LC-171 | D | 20 keys | structures | Murray Altheim | David Cleary | Drop/clarify keys? |
| LC-172 | D | 10 openness | structures | Murray Altheim | MSM, Murray Maloney | Drop any wildcard? |
| LC-173 | C | 08 complexity | structures | Murray Altheim | editor | Miscellaneous notes on structures |
| LC-174 | D | 08 complexity | structures | Murray Altheim | Mary Holstege | Drop abstract model? |
| LC-175 | D | 10 openness | structures | Murray Altheim | Norm Walsh | Drop equivalence classes? |
| LC-176 | A | notations | structures | Murray Altheim | Dave Peterson | Drop/clarify notation? |
| LC-177 | D | 16 validation | structures | Murray Altheim | Matt Fuchs | Tighten conformance rules? |
| LC-178 | A | 08 complexity | structures | Murray Altheim | Sperberg-McQueen | Clarify! |
| LC-179 | A | str-queries | structures | Peter Canning | Peter Chen | May components not at the top level be named? |
| LC-180 | A | 08 complexity | both | XML Query | Sperberg-McQueen | Locality of exposition |
| LC-181 | C | 12 content-models | structures | XML Query | editor | Allow abstract types in element declarations? |
| LC-182 | D | 16 localtypes | structures | XML Query | Rick Jelliffe | Relax single-binding rule? |
| LC-183 | C | validation | structures | XML Query | editor | Clarify details of lax validation? |
| LC-184 | A | 19 modules | structures | Steve Monk | Dan Connolly | How do I combine schemas for two namespaces in one schema? |
| LC-185 | D | 11 infoset | both | XML Core WG | Sperberg-McQueen | Comments from XML Core WG |
| LC-186 | D | 19 modules | structures | Daniel Veillard | Matt Timmermans | Naturalizing names while declaring their relation to their original namespace |
| LC-187 | D | 04 numeric | datatypes | Graham Kline | Paul Biron | Type hierarchy for numerics |
| LC-188 | C | ed-primer | both | Martin Duerst | editor | Notes on the primer |
| LC-189 | D | 02 enums | datatypes | Martin Duerst | Asir Vedamuthu | Easier (more compact) enumerations? |
| LC-190 | D | 07 typedecl | structures | Martin Duerst | MSM | Allow attributes and content model in any order? |
| LC-191 | D | 22 sui-generis | both | XForms Group | John McCarthy | Comments from XForms Group |
| LC-192 | D | 11 infoset | both | DOM WG | Sperberg-McQueen | Comments from DOM WG |
| LC-193 | A | 14 attldecl | structures | Peter van de Hoef | Sperberg-McQueen | How do I specify co-occurrence constraints on attributes? |
| LC-194 | D | 12 content-models | both | Michael Stonebraker | Dave Hollander | Align better with OR schema |
| LC-195 | C | ed-str | structures | Martin Duerst | editor | Eliminate the term 'obtains'? |
| LC-196 | C | 08 complexity | both | Martin Duerst | editor | Need graphics? |
| LC-197 | D | 26 numeric | datatypes | Martin Duerst | Don Mullen | Allow negative scale? |
| LC-198 | D | 28 infoset | both | XML Query | Henry Thompson | Provide type-information in PSV Infoset? |
| LC-199 | D | 28 infoset | both | XML Query | Henry Thompson et al. | A schema for the schemaless? |
| LC-200 | D | 24 content-models | both | XML Query | David Beech | Distinguish sequences from sets? |
| LC-201 | D | 20 keys | structures | XML Query | Jonathan Robie | Support cross-document keyref? |
| LC-202 | B | 11 infoset | datatypes | XML Query | chairs | Make physical representation an optional PSV property? |
| LC-203 | C | 11 infoset | both | XML Query | Align part 1 and part 2 better on datatypes infoset? | |
| LC-204 | D | 15 dt-misc | both | XML Query | Sperberg-McQueen | Type coercions |
| LC-205 | C | 27 i18n | primer | I18n WG | editor | I18n notes on primer, misc |
| LC-206 | C | 27 i18n | structures | I18n WG | editor | I18n notes on structures |
| LC-207 | C | 27 i18n | datatypes | I18n WG | editor | I18n notes on datatypes, misc |
| LC-208 | D | 24 content-models | structures | Philip Wadler | Rename equivalence classes? | |
| LC-209 | D | 23 enums | both | XForms | Don Box, Martin Gudgin | Open enumerations |
| LC-210 | D | 31 misc | structures | Beech | Make DTD non-normative? | |
| LC-211 | D | 22 xforms | datatypes | XForms WG | John McCarthy* | Add masks? |
| LC-212 | D | 22 xforms | both | XForms WG | John McCarthy* | Currencies |
| LC-213 | D | 22 xforms | datatypes | XForms WG | John McCarthy* | Drop facets? |
| LC-214 | D | 22 xforms | datatypes | XForms WG | John McCarthy* | Add facets? |
| LC-215 | D | 27 i18n | structures | I18n WG | Martin Gudgin | Easy add-ins |
| LC-216 | D | 27 i18n | both | I18n WG | Merge mixed, text-only, and string? | |
| LC-217 | D | 27 i18n | structures | I18n WG | Allow pattern on complex types? | |
| LC-218 | B | 27 i18n | both | I18n WG | chairs | Solve C0 control-character issue? |
| LC-219 | D | 27 i18n | datatypes | I18n WG | Lay foundation for multiple lexical representations? | |
| LC-220 | D | 27 i18n | datatypes | I18n WG | Single lexical representations? | |
| LC-221 | D | 27 i18n | datatypes | I18n WG | I18n on date/time types | |
| LC-222 | D | unassigned | structures | XML Query | Revamp occurrence indicators? |
Should the datatypes part of XML Schema specify the legal value ranges for the parts of dates and times? In particular, should it point out that 0000 is not a valid year in the Gregorian calendar?
Input from Martin Bryan:
(Martin Bryan to XML Schema comments list, 29 February 2000.)
There would appear to be no mechanism for entering a data prior to 0 AD.
Could -CCYY be allowed, with the proviso that 0000 is not a valid
year?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
The spec should specify the legal value ranges of the CC, YY, MM, and DD parts of a date (even if this information is given in ISO 8601), and also the various parts of a time value.
Input from C. M. Sperberg-McQueen:
"C. M. Sperberg-McQueen" <cmsmcq@acm.org> to XML Schema Comments list, Mon, 08 May 2000 20:11:05 -0600
At 16:24 00/02/29 +0000, Martin Bryan wrote: There would appear to be no mechanism for entering a data prior to 0 AD. Could -CCYY be allowed, with the proviso that 0000 is not a valid year?
I believe that this form is allowed by the schema spec. Section 3.3.24.1 says
"To accommodate year values outside the range from 0 to 9999, additional digits can be added to the left of this representation and an preceding '-' is allowed."
I believe there are two typos here (there is no year 0 in the Gregorian calendar, so the range should be 1-9999, and for 'an' read 'a'), but the phrase about the preceding minus sign is not a typo.
Personally, I agree that there should be a note pointing out that '0000' is not a valid year; otherwise, too many implementors will get it wrong.
Input from Martin Bryan <mtbryan@sgml.u-net.com>:
"Martin Bryan" <mtbryan@sgml.u-net.com> to XML Schema Comments list on Sun, 14 May 2000 08:01:08 +0100
Ashok
You have sent a number of notes with comments on the Datatypes part of the XML Schema specification. We appreciate your input. I believe I have responded to all your concerns but would like to ask you formally whether you feel your concerns have been addressed and the issues you raised can be closed.
The vast majority of my concerns have been answered, for which I thank you. There are still some relatively minor ones, such as the sentence that reads 'To accommodate year values outside the range from 0 to 9999, additional digits can be added to the left of this representation and an preceding "-" is allowed.' This really needs the 0 changed to 1, and a statement to indicate that negative numbers represent Before Christian Era (BC/BE) dates....
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
Appendix D now contains information on the legal ranges of the parts of date and time values.
Formal response to commentator. Martin Bryan confirms he is satisfied, for the most part. A later message says he thinks there are still problems.
Paul Cotton indicates he is satisfied.
Should XML Schema introduce constructors for simple types based on Boolean logic?
Input from Curt Arnold:
Curt Arnold to XML Schema Comments list, 3 March 2000:
The following facets would seem to address quite a few constructs that appear within Schema for Schema and a few things like multiple, disjunctive value ranges from http://lists.w3.org/Archives/Public/www-xml-schema-comments/1999OctDec/0034.html
Examples:
<simpleType name="maxOccur" base="string">
<or>
<conform type="non-negative-integer"/>
<enumeration><literal value="*"/></enumeration>
</or>
</simpleType>
|
<simpleType name="noTeens" base="integer">
<or>
<and>
<minInclusive value="0"/>
<maxExclusive value="10"/>
</and>
<minInclusive value="20"/>
</or>
</simpleType>
|
<simpleType name="targetOrNamespace" base="string">
<or>
<enumeration>
<literal value="##targetNamespace"/>
</enumeration>
<conform type="uri-reference"/>
</or>
</simpleType>
<simpleType name="targetOrNamespaces"
base="targetOrNamespace"
derivedBy="list"/>
<simpleType name="anyAttribute" base="string">
<or>
<enumeration>
<literal value="##any"/>
<literal value="##other"/>
<literal value="##local"/>
</enumeration>
<conform type="targetOrNamespaces"/>
</or>
</simpleType>
|
Discussed at Edinburgh ftf.
Task force assigned to work on the problem.
Discussed in call of 2000-07-14.
The question is on the 'union types proposal'. The WG discussed the question.
Paul Biron spoke in favor of the proposal: the functionality is important for our language and for other people's schemas. XSL documented this very early, so it's a well-known need which this proposal meets.
David Beech expressed a number of reservations: there's an even stronger requirement for codependency constraints, which we've done nothing about. This proposal adds to the complexity of the spec, and picks some low-hanging fruit, but not necessarily the most important fruit. The proposal to change the syntax for complex types does so in a way that does some strange things (e.g. requiring 'restriction' as part of the definition of a complex type without any explicit base!).
It's much more important to just put 'type' in the element name and merge simple and complex types. The uniformity proposed here has several restrictions. Is this a slippery slope? What about unions for complex types? You soon get into needing discriminators. Unions are not normally order-dependent; they are usually commutative.
The union-types proposal from the task force was sent 30 June 2000 to the IG by Henry Thompson.
Discussed again at face to face meeting 1-2 August 2000.
Clarifications: the PSV infoset should give you both the union type and also which member of the union you actually got. It is possible to use xsi:type with union types, as a discriminator. Open enumerations (e.g. a union of the enumeration small - medium - large with string) are possible.
In discussion, some WG members said they liked the general idea better than the specifics of the proposed concrete syntax, and were worried about the verbosity of common cases; other WG members felt that the concrete syntax was a net usability win, since the proposal reduces the variation in declarations and makes their formal definitions much tighter, and thus much easier to work with in XML-aware tools. Some WG members felt that too much effort was being put into a relatively minor problem, when more important problems (e.g. co-occurrence constraints) had been shelved for now. The disambiguation rule has the perhaps unpleasant effect that A union B is not the same as B union A. An alternative syntax which used attributes and not nested subelements seemed attractive to some WG members; it would however in practice require that all member types have names, and had been considered and rejected by the task force. Some members of the WG held that the attribute-based alternative would in fact be harder to understand and teach.
Resolved: to resolve issues LC-2 and LC-93 by adopting the proposal. Dissenting: Vedamuthu. Abstaining: Beech, Grosso.
On the follow-on question of aligning the syntax of complex types with that proposed for simple types, a majority (12:4) was inclined to pursue the question. A task force met overnight and reported the next day.
Resolved: to adopt the task force proposal, leaving open the question of the generic identifiers for the elements and the correct solution to the design problem identified in the proposal.
Discussed the follow-on issues in call of 2000-08-10. Resolved: to retain the element names simpleContent and complexContent.
Resolved without dissent: to allow the 'mixed' attribute on the 'complexType' element, specifying that when the complexType element has a simpleContent child, then the attribute has no effect (but is not illegal). Abstaining: Beech, Corda, Mendelsohn, Olken, Vedamuthu by proxy.
Should the discussion of order relations state or imply that each datatype must define a different order relation on the value space?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
1. Section 2.4.1.2 Order
This section states "In such cases each datatype will define a different order relation on the value space". I do not understand why this must be done. Certainly at worst it should say "may define". Better even would be to delete the sentence entirely.
Formal response to commentator. Paul Cotton indicates resolution is satisfactory.
Should the discussion of enumerations be revised to specify that enumerations inherit their ordering from their base type?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
2. Section 2.4.2.5 enumeration
This section states "No order or any other relationship is implied ...". This seems to imply that enumerations are not ordered. I think this sentence needs to be reworded to imply that "No further ordering is implied" since certainly the ordering of the underlying data type must be inherited. If not then XML Query will have no means of ordering enumerations.
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
Section has been reworded to reflect the intent above.
Formal response to commentator. Paul Cotton indicates resolution is satisfactory.
Should all primitive datatypes specify how their values are ordered?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
3. Section 3.2.1 string
This section states "The ordered property of string is the Unicode character number sequence." The string data type is the only primitive datatype that makes an explicit statement about how the ordering relation (not property) is defined. I expect the ordering information is missing from other primitive datatype sections.
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
We've added order relations for the other primitive datatypes.
Formal response to commentator. Paul Cotton indicates resolution is satisfactory.
Should XML Schema allow schema authors to specify that a particular subtype of string should be sorted according to a particular collation sequence? If so, should XML Schema provide a way of defining collation sequences, or simply a way to provide a name, with the further details left out of bound (as in SQL)?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
4. Section 3.2.1 string This section states "The ordered property of string is the Unicode character number sequence." I wonder why the definition of the string datatype does not permit a user to define the "collation" to be used? "Unicode character number sequence" is only one "collation" and is not very useful. In addition the specification does not explain why this "collation" is needed.
XML Query will need to support different collations for the string data
type. It would be preferable if the collation was defined as part of the
<data type> not as part of the query
<predicate>s. I would recommend you consider a solution such
as one adopted by SQL to permit the type definer to simply name the collation
to be used. No exact definition of the action collation needs to be provided
since there are several other sources for this information.
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
Collation is needed to enable max/min on strings. The WG discussed user-defined collations but decide not to do anything about this in V1. My personal viewpoint is that, except for the min/max case, schema never concerns itself with the relation between 2 strings and so this is not a schema problem. Others disagree with this position but, regardless, we will not add anything in V!.
Discussed in call of 2000-06-29.
Some members of the WG suggested that this issue is tied in with the proposal from the i18n WG to remove minimum- and maximum-value facets from strings and string-based types.
After discussion, a straw poll was taken, covering the four possibilities of keeping/adding or removing/not-adding the min/max facets and user-identified collation sequences. The results showed a small amount of support for retaining min/max values and adding user-identified collation sequences, some support for removing min/max and adding collations, no support for the status quo, and substantial support for removing min- and max-values and declining to add user-identified collation sequences.
RESOLVED: to remove minimum- and maximum-value facets from strings and string-based types, and to reply to LC-6 by saying no (with rationale). Dissenting: Olken.
This decision left us with a follow-on question. Up until now, all ordered value spaces have had (a) a specified ordering relation and (b) minimum- and maximum-value facets. In removing those facets from string, we have removed the need to specify any collation sequence at all. Do we wish:
There was no support for claiming that strings are intrinsically unordered; there was some support for each of the others, with a very strong preponderance of support for saying only that XML Schema does not specify any ordering relation for strings.
Paul Biron expressed the intention of the editors to add a note making clear that any description of a value space as 'unordered' should not be taken as precluding other applications from defining an ordering relation for that value space, only as indicating that XML Schema defines no such relation. There was no audible objection to that statement of intent.
RESOLVED: to specify that XML Schema defines no ordering relation on strings. Dissenting: Maloney, Olken. (Rationale: we should say that strings are ordered, and that the order relation is locale-dependent).
Is the requirement that XML Schema implementations must support arbitrary-precision decimals an excessive burden on implementors of a query language? Should XML Schema instead specify that the maximum precision for decimal numbers should be an "implementation-defined number not less than X", with the value of X to be determined?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
5. Section 3.2.5 decimal
The Note in this section asks "Our design discussions did not reveal convincing evidence of undue burden because of arbitrary precision decimal numbers in this design, but we welcome further input from implementors".
I believe that you may want to consider the impact on implementors of a
query language based on this data type that must implement
<predicate>s and arithmetic operators for an "arbitary
precision decimal number". I believe we will find this to be too expensive and
that implementations will in fact constrain the precision of this data type. If
the XML Schema specification does not do this then interoperability will be
heavily constrained.
I do not accept the argument that XML Schemas needs an arbitrarily precise decimal datatype just to be able to model the length of names in XML which are in turn unconstrained in length.
I suggest that the document be modified to state that the maximum precision for decimal numbers should be an "implementation-defined number not less than X" where X can be agreed upon by implementors as a practical lower limit for this amount. "Implementation-defined" means that a conforming implementation must state in its conformance statement what the value is.
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
There is now a note in 3.2.5 asking for feedback on this issue.
Discussed at Edinburgh ftf.
Task force consisting of Robie and Malhotra will examine this with a goal of formulating a new design which (1) sets minimum precision and magnitude that all processors must support and (2) makes a formal proposal for what schema processors must accept (presumably includes unrestricted integer) in a schema as well as an instance.
1. The XML Schema spec set down the minimum mumber of digits that must be supported by a conforming XML processor for the numeric datatypes integer, decimal, float and double.
2. XML processors are free to support more than the minimum number of digits. If they do so, they should adverstise this fact as part of their specifications.
3. The minimum number of digits required for (1) should be derived based on the number of digits supported by some standard programming languages such as C and Java. These are discussed below. In earlier notes I had proposed that the precisions be based on the number of digits supported by 32-bit processors but I realized that languages often use multiple words to store numeric values.
Also, as most processors will translate values encoded in XML documents into values in some programming language, it seems more sensible to base precisions on those supported by common programming languages.
SUGGESTED PRECISIONS
The Java Language Specification (Gosling, Joy, Steele) says
C allows compilers to chose how many digits to use for int and long. The limits.h library defines the minimum and maximum values for long consistent with the values for Java int above.
For floating point numbers float.h defines precisions tha are significantly lower: for float, 6 digits of precision in the mantissa and a maximum of +/- 37 for the exponent. For double, 10 digits of precision and still +/- 37 as a maximum for the exponent.
I do not understand the lower precision for floating point numbers in C. Perhaps this is because float.h also allows you to specify the radix for float and double or merely that I used Kernighan and Richie and newer compilers allow more digits.
RECOMMENDATION
If we set a single minimum standard then, based on the Java figures above, I would recommend 18 digits for integers and decimals. For float and double I would recommend 15 digits for the mantissa and 2 digits for the exponent.
If these figures are felt to be too generous we could go with a 2-tier system.
Discussed in call of 2000-07-21.
The question is on a proposal from Paul Cotton to specify some minimal level of support for precision of decimals, which all implementations must support as a minimum. The argument in favor is that this clarifies where the interoperability boundary lies much more clearly than will otherwise be the case. The argument against is that the minimum level of support will turn into the maximum and no one will support any more.
Concrete proposal by Ashok Malhotra is: If we set a single mnimum standard then, based on the Java figures above, I would recommend 18 digits for integers and decimals. For float and double I would recommend 15 digits for the mantissa and 2 digits for the exponent.
RESOLVED: to dispose of issue LC-7 by saying in principle yes, we will specify some minimal level of support for precision of decimals. Dissenting: Biron, Corda, Gudgin. Abstaining: none
RESOLVED without dissent: to specify that conforming processors may support any number of digits of precision greater than or equal to 18 digits precision, and to make the minimum level a priority feedback issue. Abstaining: Biron, Corda, Fuchs, Gudgin, Mendelsohn, Peterson.
RESOLVED: to require processors to specify the maximum number of digits they support. Dissenting: Fuchs, Hollander, Mendelsohn, Vedamuthu. Rationale for dissent: because we don't specify anything about the form of documentation, this is not really enforceable as a requirement.
Michael Rys would prefer a different solution.
Should XML Schema forbid the use of non-significant leading and trailing zeroes?
Cf. Allow multiple lexical spaces for floats?
Input from Paul Cotton:
(Paul Cotton to XML Schema comments list, 9 March 2000)
6. Section 3.3.9 integer
The definition of the lexical representation of the integer datatype does not correctly reflect that non-significant leading and trailing zeroes should not be used. Non-significant zeroes are leading zeroes to the left of the decimal point or trailing zeroes to the right of the decimal point. I suggest using this concept in the descriptive material.
petsa@us.ibm.com to XML Schema Comments list, Fri, 14 Apr 2000 13:18:32 -0400
This is a good addition to integer. For decimal, trailing zeroes sometimes provide information.
Discussed at Edinburgh ftf.
CONSENSUS: make no change to status quo (meaning keep multiple lexical representations for integers and decimals), but add explicit definition of canonical representations for them (and other types with multiple lexical representations).
RESPONSE to originator will be that we are unwilling to impose that usability cost. ACTION to editors to propose which forms are canonical.
OPEN QUESTION: what about the PSV infoset? Do you get a single value in the original form? In the canonical form? Both? Status quo is you get the string as it was in the document and its type.
These questions were resolved, in the course of September, in favor of a schema-normalized form of any simple type, which has undergone whitespace normalization and has no comments or processing instructions, but which is not canonicalized (so that, for example, nonsignificant leading and trailing zeroes may occur). Members of the WG deeply involved with database implementation said that most commercial DBMS are capable of handling leading and trailing zeroes.
Formal response to commentator. Paul Cotton indicates that XML Query can live with this decision, although it would prefer a differeent one. "I am still concerned that user's of the XML Query language will want to distinguish between occurrences of XML Schema Integers with the values 01 and 1. This is why I wanted to prohibit the former. Since XML Schema has not prohibited the first alternative then XML Query will simply have to ensure that it clearly states which values can be searched for."
How should a schema designer go about restricting the string type to contain only characters from a specific coded character set or encoding, such as ASCII or ISO Latin 1 (ISO 8859-1)?
Input from Peter Canning:
(Peter Canning to XML Schema IG, 14 March 2000 -- member-only)
[What if I want a type 'ASCII' or 'Latin1', to model an existing string type?]
(The following draft reply was prepared by C. M. Sperberg-McQueen.)
Because XML Schema applies only at the info-set level, it is not possible to restrict a string to a specific character encoding, nor to what ISO standards used to call a coded character set, such as ISO 8859-1. All XML processors are required to accept data in the UTF-16 and UTF-8 encodings, and no schema can override that.
It is, however, possible to restrict a string to a particular set of characters (a particular character repertoire). The process might go something like this:
If you are defining a self-contained schema (i.e. you don't expect elements from other namespaces to appear in your documents), this should be all you are looking for.
If you are defining a schema module, which is expected to be used in conjunction with other modules, designed by other people, and you had been hoping for a way to restrict the other modules, then it will be disappointing to learn that such after-the-fact restriction of other people's schemas is not supported in XML Schema.
(The following draft reply was prepared by Paul Biron and posted to the XML Schema IG on 15 March 2000.)
Assuming the character set you wish to restrict to is a Unicode Block, then you could define a subtype of string restricted to just that block as in:
<simpleType name='ascii-string' base='string'>
<pattern value='\p{IsBasicLatin}*'/>
</simpleType>
|
or
<simpleType name='latin-1-string' base='string'>
<pattern value='\p{IsLatin-1Supplement}*'/>
</simpleType>
|
This is mentioned in the regex design that was part of the 1999-12-17 draft but was accidentally left out of the 2000-02-25 draft. The recognized block names are those in the Unicode Database (file blocks.txt), with whitespace stripped out.
If the character set you with to restrict to is not a single block, but can be constructed by combining some set of Unicode properties, then you can do something like (which is described in the 2000-02-25 draft):
<simpleType name='letters-and-punctuation' base='string'>
<pattern value='[\p{L}\p{P}]*'/>
</simpleType>
|
As a last resort, you could always construct the character class which comprises the character set by enumerating all members of the class [2], as in:
<simpleType name='my-strings' base='string'> <pattern value='[{̻ᕡ...]*'/> </simpleType> |
Commentator responds privately 21 September "I am satisfied with the response of the working group on this issue."
Should the exposition of identity-constraint tables be revised in the interests of clarity?
Input from Mary Fernandez:
(Mary Fernandez to XML Schema Comments list, 15 March 2000)
I am writing as a representative of the XML Query working group. Currently, we are specifying the data model for XML Query. Part of that exercise requires specifying formally the mapping from an instance of the PSV Infoset to an instance of the Query data model.
This message regards the definition of the Schema Infoset Contribution for Identity-constraint tables described in : http://www.w3.org/TR/xmlschema-1/#Identity-constraint_Definition_details.
This message has 2 parts:
Part 1.
A request to review the example in the attached text file. Please confirm that this example is correct w.r.t. the definition above.
If not, please explain how we misinterpreted the definition.
The attached example contains an abbreviated version of the <purchaseReport> example by David Fallside in : http://www.w3.org/XML/Group/xmlschema-current/new-design/exposition.html.
For the given example, we define a fragement of the corresponding PSV Infoset instance, which contains the Identity-constraint table for the <purchaseReport> element item.
We use the following notation:
Here's a DTD for an identity-constraint table that I inferred from the XML Schema document:
<!ELEMENT psvis:identityConstraintTable
(psvis:identityConstraint, psvis:nodeTable)*>
<!ELEMENT psvis:identityConstraint is:ref>
<!ELEMENT psvis:nodeTable (psvis:keySequence, psv:qualifiedNode)*>
<!ELEMENT psvis:keySequence (is:ref)*>
<!ELEMENT psvis:qualifiedNode is:ref>
<!ELEMENT is:ref EMPTY>
<!ATTLIST is:ref idref > |
Part 2
A question and a suggestion follow.
In the subsection "Schema Information Set Contribution: Identity-constraint Table", I believe "key sequence k" should be changed to "key sequence b". If not, then please explain the relationship between the b & k key sequences.
[On 17 March 2000 Henry Thompson replies: You're right about the typo, that should be 'key sequence k' throughout."]
Part of the difficulty in understanding the definition of the Identity-Constraint table is that the document tries to describe in prose both what the table is and how to construct it at the same time. I tried to translate the prose into a pseudo-code specification (see below). If we assume that a node table is is a table of (key-sequence, qualified-node) pairs and is keyed on key-sequence, we can compute a new node table for element E, eligible constraint C as follows:
fun nodeTable(E, C) {
let /* compute node table for element E & constraint C */
table = UNION(forall (keyseq, qualnode) in eligibleConstraint(E,C))
/* inherit non-conflicting constraints from children */
kidsTable = UNION(forall K in children(E), nodeTable(K, C))
inheritTable = kidsTable - table
in table UNION inheritTable
}
// inheritTable is really a project on key-sequence, difference of the
// two tables and then a join with kidsTable to reconstruct the
// inherited table.
|
You might not want to present the definition in such a form, but for anyone who must implement or use the Schema definition (such as the Query working group), this is precisely what must be inferred.
[On 5 April 2000, Henry Thompson replied: "As near as I can tell your algorithm is correct, and the example infoset is also correct."]
A. Abbreviated Example Data (same Schema as in full example)
<purchaseReport>
<regions>
<zip code="95819">
<part number="872-AA"/>
<part number="455-BX"/>
</zip>
<zip code="63143">
<part number="455-BX"/>
</zip>
</regions>
<parts>
<part number="872-AA">Lawnmower</part>
<part number="455-BX">Sturdy Shelves</part>
</parts>
</purchaseReport>
|
B. Information-Set Instance for Example Data in A. This is an XML serialization of the infoset instance.
<is:Document id="document#0">
<is:children>
<is:ref idref="element#0"/>
<!-- reference to infoset item for schema -->
<psvis:schema idref="schema#0"/>
</is:children>
</is:Document>
<is:Element is:id="element#0">
<is:localName>purchaseReport</is:localName>
<is:children>
<is:ref idref="element#1">
<is:ref idref="element#7">
</is:children>
<psvis:identityConstraintTable>
<!-- Skip <unique> constraint -->
<!-- Constraint : <key name="pNumKey"> -->
<psvis:identityConstraint>
<!-- reference to infoset item for
<key name="pNumKey"> -->
<is:ref idref="identityConstraint#0"/>
</psvis:identityConstraint>
<psvis:nodeTable>
<psvis:keySequence>
<!-- number="872-AAA" -->
<is:ref idref="attribute#5"/>
</psvis:keySequence>
<psvis:qualifiedNode>
<is:ref idref="element#8"/>
</psvis:qualifiedNode>
<psvis:keySequence>
<!-- number="455-BX" -->
<is:ref idref="attribute#6"/>
</psvis:keySequence>
<psvis:qualifiedNode>
<is:ref idref="element#9"/
</psvis:qualifiedNode>
</psvis:nodeTable>
<!-- Constarint : <keyref refer="pNumKey"> -->
<psvis:identityConstraint>
<!-- reference to infoset item for
<keyref refer="pNumKey">...</key> -->
<is:ref idref="identityConstraint#1"/>
</psvis:identityConstraint>
<psvis:nodeTable>
<psvis:keySequence>
<!-- number="872-AAA" -->
<is:ref idref="attribute#1"/>
</psvis:keySequence>
<psvis:qualifiedNode>
<is:ref idref="element#8"/>
</psvis:qualifiedNode>
<psvis:keySequence>
<!-- number="455-BX" -->
<is:ref idref="attribute#2"/>
</psvis:keySequence>
<psvis:qualifiedNode>
<is:ref idref="element#9"/
</psvis:qualifiedNode>
<psvis:keySequence>
<!-- number="455-BX" -->
<is:ref idref="attribute#4"/>
</psvis:keySequence>
<psvis:qualifiedNode>
<is:ref idref="element#9"/
</psvis:qualifiedNode>
</psvis:nodeTable>
</psvis:identityConstraintTable>
</is:Element>
<is:Element is:id="element#1">
<is:localName>regions</is:localName>
<is:children>
<is:ref idref="element#2"/>
<is:ref idref="element#5"/>
</is:children>
</is:Element>
<is:Element is:id="element#2">
<is:localName>zip</is:localName>
<is:attributes>
<is:ref idref="attribute#0"/>
</is:attributes>
<is:children>
<is:ref idref="element#3"/>
<is:ref idref="element#4"/>
</is:children>
</is:Element>
<is:Element is:id="element#3">
<is:localName>part</is:localName>
<is:attributes>
<is:ref idref="attribute#1/>
</is:attributes>
</is:Element>
<is:Element is:id="element#4">
<is:localName>part</is:localName>
<is:attributes>
<is:ref idref="attribute#2/>
</is:attributes>
</is:Element>
<is:Element is:id="element#5">
<is:localName>zip</is:localName>
<is:attributes>
<is:ref idref="attribute#3"/>
</is:attributes>
<is:children>
<is:ref idref="element#6"/>
</is:children>
</is:Element>
<is:Element is:id="element#6">
<is:localName>part</is:localName>
<is:attributes>
<is:ref idref="attribute#4/>
</is:attributes>
</is:Element>
<is:Element is:id="element#7">
<is:localName>parts</is:localName>
<is:children>
<is:ref idref="element#8"/>
<is:ref idref="element#9"/>
</is:children>
</is:Element>
<is:Element is:id="element#8">
<is:localName>part</is:localName>
<is:attributes>
<is:ref idref="attribute#5/>
</is:attributes>
<is:children>
<!-- references to CDATAItems for "Lawnmower" -->
</is:children>
</is:Element>
<is:Element is:id="element#9">
<is:localName>part</is:localName>
<is:attributes>
<is:ref idref="attribute#6/>
</is:attributes>
<is:children>
<!-- references to CDATAItems for "Sturdy Shelves" -->
</is:children>
</is:Element>
<is:Attribute is:id="attribute#0">
<is:localName>code</is:localName>
<value>95819</value>
</is:Attribute>
<is:Attribute is:id="attribute#1">
<is:localName>number</is:localName>
<value>872-AA</value>
</is:Attribute>
<is:Attribute is:id="attribute#2">
<is:localName>number</is:localName>
<value>455-BX</value>
</is:Attribute>
<is:Attribute is:id="attribute#3">
<is:localName>number</is:localName>
<value>872-AA</value>
</is:Attribute>
<is:Attribute is:id="attribute#4">
<is:localName>number</is:localName>
<value>455-BX</value>
</is:Attribute>
|
This issue was discussed and resolved together with issue LC-159; see there for details of decisions in this area.
Should the date and time types have the same value for period?
Input from Aram Airapetian:
(Aram Airapetian to XML Schema Comments list, 30 March 2000)
How come the date and the time types have the same period? The "000000T2400" value is period for time. It is 'unit' for date, though. For date (CCYY-MM-DD, see 3.3.22.1) period is "010000". Am I missing something?
The notions of 'period' and 'unit' might be beneficial for simplification of numeric type definition. All types 3.2.2 - 3.2.5 and 3.3.9 - 3.3.21 could be defined (derived from decimal) by assigning corresponding 'period', 'unit' and 'signed/unsigned' constraints.
Input from Ashok Malhotra:
My apologies for taking so long to reply to your note below. We have made some changes to the text and corrected some typos. Now, "date" has a period of 0 (no recurrence) and a duration of 24hours. "time" has a period of 24 hours and a duration of zero. I trust that addresses your concerns.
How does a schema author go about adding new attributes to elements declared in a different module?
Input from Aaron M. Cohen:
(Aaron M. Cohen to XML Schema Comments list, 3 April 2000)
It has recently been brought to my attention that the current draft of XML-Schemas does not provide a mechanism for incrementally building up an attribute set on an element, perhaps from several separate modules containing attributes, and also for adding attributes to elements already declared.
This is essential for modularizing SMIL with XML Schemas, and is something that can (and has) already be done with DTD's. Maybe my information is incorrect, or my understanding is faulty, so I am sending this to make you aware of our needs, and asking for guidance in applying XML Schemas in this manner. If my information and understanding are correct, then please consider this a requirement for the SMIL modules to have associated XML Schemas. I am under the impression that XHTML has very similar needs, and my impression is based in part on my exchanges with some of the XHTML folks.
A concrete example will probably make our needs clear. So I'll discuss our modularization needs in the context of a vastly simplified view of SMIL.
SMIL timing is a set of reusable modules that can be used to incorporate timing relationships into XML languages. This language could be "SMIL", or "XHTML", or something else. We provide time containers, which are grouping elements that contain other elements and provide semantics for the timing relationships between the grouped elements. We also provide attributes that are added to elements to allow authors to specify explicit timing relationships.
For example, SMIL includes the parallel time container, <par>, which allows for several things to be played at once. To play an audio and video clip and the same time (assuming that the language, like SMIL 1.0, includes elements to express playing each of these):
<par> <video .../> <audio .../> </par> |
Note that the elements could be from some other language, such as XHTML. Here's how two paragraphs of text might be displayed at the same time:
<par> <p>First Paragraph.</p> <p>Second Paragraph.</p> </par> |
This becomes much more powerful when the elements that are timed can have their own timing-specific attributes. For this discussion, we'll only have two. 'begin' tells when to start displaying something, and 'dur' specifies the duration, or how long to display it. Building off the XHTML example:
<par> <p begin="0s" dur="1s">First Paragraph.</p> <p begin="2s" dur="1s">Second Paragraph.</p> </par> |
This displays the first paragraph immediately for 1 second, then there is one second where nothing is displayed, and then at time=2s, the second paragraph is displayed for 1 second.
This admittedly very simple example gets to the root of what we need to be able to accomplish with XML Schemas. The <p> element is already defined in a module by XHTML. For a language designer to be able to incorporate or combine timing with elements already defined, we need to be able to extend the attribute set of an element defined in a different module. For this particular example, the language designer needs an XML Schema method of adding the begin and dur attributes defined in a SMIL XML Schema module to the <p> element defined in an XHTML Schema module. It is not sufficient to just be able to declare the members of an attribute set from several places when the element is initially defined.
Please feel free to contact me with any questions you may have about anything that I have said here.
Input from Dan Connolly <connolly@w3.org>:
Dan Connolly <connolly@w3.org> to XML Schema Comments list on Fri, 12 May 2000 17:18:11 -0500
It has recently been brought to my attention that the current draft of XML-Schemas does not provide a mechanism for incrementally building up an attribute set on an element, perhaps from several separate modules containing attributes,
I believe the attribute group mechanism provides this. http://www.w3.org/TR/2000/WD-xmlschema-1-20000407/#Attribute_Group_Definition
and also for adding attributes to elements already declared.
I presume you're talking about this idiom...
"6.1. Defining additional attributes [...] This works because XML permits the definition or extension of the attribute list for an element at any point in a DTD. " http://www.w3.org/TR/2000/WD-xhtml-building-20000105/developing.html#s_dev_attrs
The Schema spec provides an analog of this idiom; if you want your element declarations to allow other attributes this way, just include
<anyAttribute namespace="##any" processContents="strict"/> |
cf http://www.w3.org/TR/2000/WD-xmlschema-1-20000407/#element-anyAttribute
I would actually recommend ##other rather than
##any; requiring
"mixed in attributes" to be declared as coming from another
namespace seens more appropriate than allowing unqalified
attributes or attributes from the same namespace.
This is essential for modularizing SMIL with XML Schemas, and is something that can (and has) already be done with DTD's.
Well... it can be done with a specific set of conventions layered on top of DTDs, using parameter entities. It cannot be done for arbitrary combinations of DTDs. And the XHTML modularization mechanisms are susceptible to name collisions between modules.
cf http://www.w3.org/TR/2000/WD-xhtml-building-20000105/developing.html#s_dev_attrs
Maybe my information is incorrect, or my understanding is faulty, so I am sending this to make you aware of our needs, and asking for guidance in applying XML Schemas in this manner. If my information and understanding are correct, then please consider this a requirement for the SMIL modules to have associated XML Schemas. I am under the impression that XHTML has very similar needs, and my impression is based in part on my exchanges with some of the XHTML folks.
A concrete example will probably make our needs clear.
Yes, thanks.
So I'll discuss our modularization needs in the context of a vastly simplified view of SMIL.
SMIL timing is a set of reusable modules that can be used to incorporate timing relationships into XML languages.
I started drafting a schema for SMIL animation; see: http://www.w3.org/XML/2000/04schema-hacking/smil-animation.xsd, revision 1.1, date: 2000/05/04 19:35:09, aka http://www.w3.org/XML/2000/04schema-hacking/smil-animation.xsd.txt
This language could be "SMIL", or "XHTML", or something else. ...
This admittedly very simple example gets to the root of what we need to be able to accomplish with XML Schemas. The <p> element is already defined in a module by XHTML. For a language designer to be able to incorporate or combine timing with elements already defined, we need to be able to extend the attribute set of an element defined in a different module.
Or, alternatively, you need the definition of the P element to allow attributes declared elsewhere (as noted above, this is the default in XML 1.0)
I mocked up this example... http://www.w3.org/XML/2000/04schema-hacking/h+s.html
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsi='http://www.w3.org/1999/XMLSchema-instance'
xmlns:t='http://www.w3.org/2000/TR/smil-animation10'
xsi:schemaLocation="http://www.w3.org/1999/xhtml html.xsd
http://www.w3.org/2000/TR/smil-animation10 smil-animation.xsd
"
>
<head><title>Example of mixing HTML and SMIL timing</title></head>
<body><h1>Some stuff</h1>
<!-- example from
http://www.w3.org/TR/NOTE-HTMLplusTIME -->
<p t:begin="1">
This is a paragraph of text that appears after one second
</p>
<p t:begin="2">
This is a paragraph of text that appears after two seconds
</p>
<p t:begin="3">
This is a paragraph of text that appears after three seconds
</p>
</body>
</html>
|
(The schemaLocation gobbledygook is only necessary until schemas for XHTML and SMIL are available by dereferencing their namespace identifiers)
then in html.xsd: (i.e. http://www.w3.org/XML/2000/04schema-hacking/html.xsd)
<element name='p'>
<complexType content='mixed'>
<anyAttribute namespace="##other" processContents="strict"/>
[...]
</complexType>
</element>
|
and in smil-animation.xsd :
<attribute name='begin' type='string'/>
<attribute name='dur' type='string'/>
<attribute name='end' type='string'/>
<attribute name='restart'>
<simpleType base='string'>
<enumeration value='always'/>
<enumeration value='never'/>
<enumeration value='whenNotActive'/>
</simpleType>
</attribute>
<attribute name='repeatCount' type='string'/>
<attribute name='repeatDur' type='string'/>
<attribute name='fill'>
<simpleType base='string'>
<enumeration value='remove'/>
<enumeration value='freeze'/>
</simpleType>
</attribute>
|
You can check the results using http://cgi.w3.org/cgi-bin/xmlschema-check i.e. http://cgi.w3.org/cgi-bin/xmlschema-check?docAddrs=http%3A%2F%2Fwww.w3.org%2FXML%2F2000%2F04schema-hacking%2Fh%2Bs.html
I have used qualified names for the "mixed in" attributes, per this principle:
"The syntax must unambiguously associate an identifier in a document with the related schema without requiring inspection of that or another schema." -- http://www.w3.org/TR/1998/NOTE-webarch-extlang-19980210#Ambiguity
The schema spec allows you to violate that principle by using
<anyAttribute namespace="##any"/> on the P element
declaration, and and attributeForm="unqualified" in the
smil-animation schema, but I don't recommend that.
For this particular example, the language designer needs an XML Schema method of adding the begin and dur attributes defined in a SMIL XML Schema module to the <p> element defined in an XHTML Schema module.
I believe I have demonstrated this above.
It is not sufficient to just be able to declare the members of an attribute set from several places when the element is initially defined.
... To this end, we need confirmation that it can be done with XML Schemas, and guidance in how to proceed.
Does the explanation above provide enough confirmation and guidance?
I've been told to expect a note on modularization using XML Schemas. Will our use cases be covered in that note?
I'm not sure.
Input from Cohen, Aaron M <aaron.m.cohen@intel.com>:
"Cohen, Aaron M" <aaron.m.cohen@intel.com> to XML Schema Comments list on Mon, 15 May 2000 15:31:05 -0700
Dan:
Thanks for taking a look at this. I'll take a closer look at your SMIL Animation Schema later this week when I have a chance.
Meanwhile, I have a question. You integrated the SMIL timing attributes with the "P" element by making your own version of xhtml.xsd that allowed including qualified attribute names from other schemas. I'm not sure that this is a total solution.
However, in my understanding of our discussion of namespaces, I got the impression that redefining elements to include new content and/or attributes and then "putting" those elements in a "new" namespace was okay. So it seems that you can define hybrid languages, it's just that they don't have a "lineage" reflected in a namespace structure, or in an XML Schema structure (because the attributes on an element can only be defined in one place).
This will lead to integrations that need to be done very differently in DTD's vs. XML Schemas. What I mean is that in some cases, the schema will have to repeat a lot of stuff defined in a "base" schema, while the DTD will not. The case in point is XHTML+SMIL, which it seems, will have to repeat the definitions of all of the XHTML-based elements, add the timing attributes (which can be done nicely in attribute groups in the smil modules), and declare them in a new namespace. So while there will be very tight semantics coupling between XHTML and XHTML+SMIL, this coupling will not be reflected in either the namespace or the schema for XHTML+SMIL.
About the best that I think could be done is if the XHTML-WG creates "proto-HTML" types that can be used in the derived languages to define the actual elements.
I think that you can do something like this for timed <a> link's (correct me if I am wrong):
In the XHTML.xsd:
<xsd:complexType content="mixed" name="aType"> <xsd:attribute name="href" type="xsd:uriReference"/> ...other linking attribute declarations </xsd:complexType> |
In the SMIL.xsd:
<xsd:attributeGroup name="smilTimingAttrs" /> <xsd:attribute name="begin" type="xsd:string"/> <xsd:attribute name="end" type="xsd:string"/> ...other timing attribute declarations </xsd:attributeGroup> |
And then in the XHTML+SMIL.xsd:
<xsd:element name="a" type="xhtml:aType"> <xsd:attributeGroup ref="smilTimingAttrs"/> </xsd:element> |
Of course, the means to do this has to be set up in XHTML.xsd and SMIL.xsd. I can see us doing this kind of thing for SMIL, but of course the other stuff is up to XHTML, SVG, and the other XML-based languages using XML Schemas.
Input from Dan Connolly:
Meanwhile, I have a question. You integrated the SMIL timing attributes with the "P" element by making your own version of xhtml.xsd that allowed including qualified attribute names from other schemas.
Yes, I expect the "official" XHTML schema to work that way.
I'm not sure that this is a total solution.
However, in my understanding of our discussion of namespaces, I got the impression that redefining elements to include new content and/or attributes and then "putting" those elements in a "new" namespace was okay. So it seems that you can define hybrid languages, it's just that they don't have a "lineage" reflected in a namespace structure, or in an XML Schema structure (because the attributes on an element can only be defined in one place).
Not so: (a) as I say, I expect the XHTML schema to allow anyAttribute namespace="#other" in the first place, and (b) if you did create a new XHTML namespace, you certainly could design it so that it has a discoverable "lineage", i.e. it derived from the canonical XHTML schema.
This will lead to integrations that need to be done very differently in DTD's vs. XML Schemas. What I mean is that in some cases, the schema will have to repeat a lot of stuff defined in a "base" schema, while the DTD will not.
I don't know what leads you to think that; it's not so.
The case in point is XHTML+SMIL, which it seems, will have to repeat the definitions of all of the XHTML-based elements, add the timing attributes (which can be done nicely in attribute groups in the smil modules), and declare them in a new namespace. So while there will be very tight semantics coupling between XHTML and XHTML+SMIL, this coupling will not be reflected in either the namespace or the schema for XHTML+SMIL.
About the best that I think could be done is if the XHTML-WG creates "proto-HTML" types that can be used in the derived languages to define the actual elements.
I certainly expect the HTML WG to use things like <anyAttribute
namespace="#other">
to specify that XHTML is extensible.
I think that you can do something like this for timed <a> link's (correct me if I am wrong): ...
Yes, that's another way to design a schema for XHTML+SMIL.
But I hope that we don't use that approach; as you say:
Of course, the means to do this has to be set up in XHTML.xsd and SMIL.xsd. I can see us doing this kind of thing for SMIL, but of course the other stuff is up to XHTML, SVG, and the other XML-based languages using XML Schemas.
I think it's clearly preferable to have one schema for XHTML, one for SMIL, one for SVG, and one for MathML that can be used together in compound documents; rather than one for XHTML+MathML, one for XHTML+MathML+SVG, etc. for a total of N! schemas.
See clarifications above.
How does a schema author go about adding new elements as children of elements declared in a different module?
Input from Aaron M. Cohen:
(Aaron M. Cohen to XML Schema Comments list, 3 April 2000)
The same thing goes for the content model of the elements. It may be necessary to extend the permissible child element set of a module beyond how it was initially defined. SMIL Boston is planning on using "levels" of modules. As the functionality goes up in higher levels, we add some elements to the set of allowed children. As above, we'll also add new attributes to existing elements in order to make them more powerful in the higher level modules.
Furthermore, we will use the above process to define our next version of the SMIL Language, and also to define a language/profile that combines XHTML and SMIL timing structure (as well as some other aspects of SMIL), and to define a baseline "SMIL-Basic". So you can see that the use case that we are asking for is a key element in SMIL being a successful and reusable technology. The DTD experts in the group are comfortable that we can produce DTD's that reflect this structure, and we would also like to have a set XML Schemas before SMIL becomes a Recommendation. To this end, we need confirmation that it can be done with XML Schemas, and guidance in how to proceed. I've been told to expect a note on modularization using XML Schemas. Will our use cases be covered in that note?
Please feel free to contact me with any questions you may have about anything that I have said here.
Formal response to commentator.
Aaron Cohen replies that "Yes, I think that the answer below is sufficient for advance into CR, but I do think that the director should be aware of the difficulties in using XML Schemas for the modular design of reusable technology and "langauge families" and I'd like to see more experience with that as a requirement of XML Schemas coming out of CR. In particular, it is important that someone write a modular XHTML to show that it can be done in a useful and acceptable manner."
Should XML Schema define a built-in type for XPath?
Input from Curt Arnold:
(Curt Arnold to XML Schema Comments list, 6 April 2000)
It would seem a minimal burden to add a built-in datatype that allows you to declare an attribute (or element content) as conceptually being an XPath. Since XPath is intended to be used across W3C technologies, it would seem that the best place for it would be as a built-in type in Schema instead of every technology that uses it trying to kludge it with their own regular expressions.
<datatype base="string" name="XPath"/> |
The difficulty is in the implied validation a schema aware processor is expected to do when it encounters an attribute that uses an XPath or derived datatype (in the same manner the parser is anticipated to validate that a uri or Qname is valid beyond what is in the explicit Schema for Schema definitions). If that seems like too much complexity, you could except conforming processors from doing any implied validation of XPath's. But compared to the overall complexity of Schema, an XPath type validation seems fairly trivial.
Noah_Mendelsohn@lotus.com to XML Schema Comments list, Tue, 18 Apr 2000 11:48:26 -0400
Just my opinion, not speaking for the WG or anyone else, but I think that an XPath datatype would be a fine thing for the XSL workgroup to declare. I think it is a mistake to ask schemas to go too far down the road in baking in every string-type that is motivated by some other W3C spec. Schemas gives other groups the power to create their own target namespaces, and to publish schemas with the appropriate type definitions. As noted below, validation of XPath strings can at best be somewhat loose, but you can easily provide a standard W3C-wide means to express that a string is intended as an XPath. Admittedly, there is a slight circularity in the fact that schemas makes some use of XPath in structures. I would still prefer to do the architecturally correct thing, and get the XSL WG lined up to publish an XPath type if the world needs one. I would like to believe that we could sort out the corresponding trivial change to the schema for schemas during the CR period. In general, groups that own particular namespaces should own the schemas for the corresponding datatypes, I think. Yes, there is room for exceptions for convenience.
Discussed in call of 2000-06-29.
A straw poll showed a preponderance of opinion against defining an XPath data type (4 in favor, 11 opposed).
RESOLVED: to dispose of issue LC-14 by saying no (with rationale). Dissenting: Beech, Biron, Jelliffe, Peterson, Robie, Sperberg-McQueen.
Rationale for the decision: if there should be such a datatype, it should be defined as part of the XPath specification, not as part of XML Schema.
Rationale for the dissent (at least Sperberg-McQueen's): there should be such a datatype, we cannot now arrange for it to be defined in an XPath spec which is already a recommendation, and schema processors are already required to be able to type-check strings purported to be XPath expressions, so there is no additional implementation burden.
Should XML Schema provide a mechanism to allow a schema author to provide an initial or hint value for an element or attribute, which would be used by user interfaces but which unlike a default value would not add anything to the information set?
Input from Curt Arnold:
(Curt Arnold to XML Schema Comments list, 6 April 2000)
I meant to mention this at XTech, but it may be useful to allow for element and attribute a way that a