- From: Michael Kay <mike@saxonica.com>
- Date: Tue, 18 Dec 2012 10:38:30 +0000
- To: public-microxml@w3.org
I think the key to having a really small schema language is that it must
extend gracefully to be capable of expressing complex constraints.
That could be as simple as adding a clause like
person/@date[. castable as xs:date]
car/@colour[. = ('red', 'green', 'blue')]
where the square brackets contain an assertion in the form of an
arbitrary XPath expression.
If you had this, I think you could dispense with // outside the brackets:
form[not(.//form)]
For such clauses to be useful to an editor, of course, it would have too
look for common patterns in the XPath expression to recognize things
such as enumerations; but that's not demanding too much, I think.
(Perhaps the square brackets look too much like XPath predicates and
different syntax would work better, especially when the assertion itself
contains predicates)
Michael Kay
On 18/12/2012 09:49, James Clark wrote:
> Here's an idea I was playing around with a while ago. It relates to
> the PossibleChildren property John mentioned.
>
> Imagine a really, really simple schema language that
>
> - uses a non-XML syntax;
>
> - allows a parser to do reasonable error recovery (and thus markup
> minimization, if you ignore the errors);
>
> - allows editors to provide a useful-level of authoring assistance.
>
> I think the starting point would be being able to say which elements
> are possible children of other elements.
>
> What might this look like? Here are some examples.
>
> ul / li
>
> This is schema that says that a ul element can have any number of li
> elements.
>
> A ul element may have any number of li child elements.
>
> ul, ol / li
>
> This is equivalent to:
>
> ul / li
> ol / li
>
> The ul element and the ol element may each have any number of li child
> elements.
>
> p / b, i
>
> This is equivalent to:
>
> p / b
> p / i
>
> The p element may have any number of b child elements and any number
> of i child elements.
>
> p / .text
>
> The p element may (directly) contain text. An element that can
> contain child elements is automatically allowed to contain whitespace
> between
> those elements, so this really means that the p element may
> contain non-whitespace text.
>
> An img element must have a src attribute whose value has the url datatype.
>
> /html
>
> An html element may be the root element.
>
> math / *
>
> A math element may have child elements with any name.
>
> p !/ p
>
> A p element must not have a p child element.
>
> br !/ *
>
> A br element must not have any child elements.
>
> br !/ *, .text
>
> A br element must not have any child elements and must not have any
> text content.
>
> I think you would need to handle attributes as well, which can be done
> without too much complexity.
>
> a @ href
>
> The a element may have an href attribute.
>
> a @ href, type
>
> This is equivalent to:
>
> a @ href
> a @ type
>
> A next step might be to use // to say things about descendants.
>
> form !// form
>
> A form element must not have any form descendant elements.
>
> Obviously, this is far from fully baked.
>
> James
>
>
>
>
>
>
>
Received on Tuesday, 18 December 2012 10:38:52 UTC