Follow Slashdot stories on Twitter

 



Forgot your password?
typodupeerror
×

Tim Bray Says RELAX 180

twofish writes to tell us that Sun's Tim Bray (co-editor of XML and the XML namespace specifications) has posted a blog entry suggesting RELAX NG be used instead of the W3C XML Schema. From the blog: "W3C XML Schemas (XSD) suck. They are hard to read, hard to write, hard to understand, have interoperability problems, and are unable to describe lots of things you want to do all the time in XML. Schemas based on Relax NG, also known as ISO Standard 19757, are easy to write, easy to read, are backed by a rigorous formalism for interoperability, and can describe immensely more different XML constructs."
This discussion has been archived. No new comments can be posted.

Tim Bray Says RELAX

Comments Filter:
  • Re:I have to agree. (Score:5, Interesting)

    by sien ( 35268 ) on Monday December 04, 2006 @11:55PM (#17109112) Homepage
    Yes. I've done it using Relax NG [relaxng.org] and it was easy, simple and readable.

    It also works really, really well with the nXML [thaiopensource.com] mode for emacs.

    Finally, XML schemas in a way that are not verbose, ugly and unreadable. And if you do need one of the older schema languages there are translators from RelaxNG available.

  • by SimHacker ( 180785 ) on Tuesday December 05, 2006 @12:33AM (#17109346) Homepage Journal

    Relax NG has a compact non-XML syntax. But C++/Java is a horrible syntax to use if you want a language to be readable and easy to understand. Since when was 17 levels of operator precedence [wikipedia.org] easy to understand? Of course any good programmer always uses parenthesis to avoid ambiguity, so why should a language have 17 levels of built-in ambiguity just to make it that much easier to make hard to find mistakes?

    -Don

    From my blog: Relax NG Compact Syntax: no to operator precedence, yes to annotations! [donhopkins.com]

    James Clark [jclark.com] is a fucking genius! Hes the guy who wrote the Expat XML parser, works on Relax NG [oasis-open.org], and does tons [jclark.com] of other important stuff. Relax NG is an ingeniously designed, elegant XML schema language based on regular expressions, which also has a compact, convenient non-xml syntax [oasis-open.org].

    I totally respect the way he throws down the gauntlet on operator precedence (take that you Perl and C++ weenies!):

    There is no notion of operator precedence. It is an error for patterns to combine the |, &, , and - operators without using parentheses to make the grouping explicit. For example, foo | bar, baz is not allowed; instead, either (foo | bar), baz or foo | (bar, baz) must be used. A similar restriction applies to name classes and the use of the | and - operators. These restrictions are not expressed in the above EBNF but they are made explicit in the BNF in Section 1.

    You can translate back and forth between Relax NG's XML and compact syntaxes with full fidelity, without losing any important information. Relax NG supports annotating the grammar with standard and custom namespaces, so you can add standard extensions and extra user defined meta-data to the grammar. That's useful for many applications like user interface generators, programming tools, editors, compilers, data binding, serialization, documentation, etc.

    Here's an interesting example of a complex Relax NG application: OpenLaszlo [openlaszlo.com] is an XML/JavaScript based programming language, which the Laszlo compiler translates into SWF files for the Flash player. The Laszlo compiler and programming tools use this lzx.rnc Relax NG schema for the OpenLaszlo XML language [openlaszlo.org]. This schema contains annotations used by the Laslzo compiler to define the syntax and semantics of the XML based programming language.

    The schema starts out by defining a few namespaces:

    default namespace = "http://www.laszlosystems.com/2003/05/lzx"
    namespace rng = "http://relaxng.org/ns/structure/1.0"
    namespace a = "http://relaxng.org/ns/compatibility/annotations/1 .0"
    datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
    namespace lza = "http://www.laszlosystems.com/annotations/1.0"

    The a: namespace [oasis-open.org] defines some standard annotations like a:defaultValue, and the lza: namespace defines some custom annotations private to the Laszlo compiler like lza:visibility and lza:modifiers. Thanks to the ability to annotate the grammar, much of the syntax and semantics of the Laszlo programming language are defined directly in the Relax NG schema in the compact syntax, so any other tool can read the exact same definition the compiler is using!

    To show how truly simple and elegant it is, here is the snake eating its tail: The Relax NG XML syntax, written in the Relax NG compact syntax:

    # RELAX NG XML syntax specified in compact syntax.

    default namespace rng = "http://relaxng.org/ns/structure/1.0"
    namespace loc

  • by SimHacker ( 180785 ) on Tuesday December 05, 2006 @12:38AM (#17109388) Homepage Journal

    Relax NG is a great example of the triumph of Design-by-Inspired-Individuals vs. Design-by-Committee.

    In The State of XML [xml.com], Edd Dumbill explains the secret behind the success of Relax NG:

    Incidentally the RELAX NG success can equally well be framed as a case of design-by-inspired-individuals vs. design-by-committee as much as it can be seen as a OASIS vs. W3C thing.

    -Don

  • Re:I have to agree. (Score:5, Interesting)

    by radtea ( 464814 ) on Tuesday December 05, 2006 @12:47AM (#17109446)

    I was at SGML '96 where XML was first announced, and was one of those people who went home and wrote a (non-validating) XML parser over the weekend, based on the draft spec. I've used both DTDs and XML Schemas and can say without question that schemas are actually a bigger pain to work with than DTDs. DTDs were bad enough, but schemas have been a major step backwards, adding complexity without adding the features one actually needs.

    Some years ago I wrote a code generator that used DTDs as the data modelling language. I sold it to the company I was working for at the time and someone I had no control over re-wrote it use schemas because they were "simpler". The result had major bugs and dropped features, not entirely due to schema-related problems, although it is worth noting that the "simplifications" included handling schemas in completely incorrect ways, because if you handled them correctly they could not do the job. I created a new generator from scratch last year and tried to do thing "properly" with schemas. It was essentially impossible, and I wound up creating a custom XML-based language use as input.

    At the time there was no Relax NG standards process, so I stayed clear of it. But it has the blessing of James Clarke too (author of the SP SGML parser and the expat XML parser.) So it is probably worth another very hard look.
  • Damn! I mean, add </>...

    (Argh, the "wait between comments" thing is infuriating...)

  • by 2short ( 466733 ) on Tuesday December 05, 2006 @03:11AM (#17110172)

    You could certainly make XML vastly more compact if you had some table of tags mapped to 2-byte codes. You're not the first to have such an idea, and I and others will be happy to use it... as soon as you've got it standardized, implemented, and as widely accepted as ASCII. Point being, I, and everyone I've never even met who will ever touch some particular XML file, already has a text editor.

    We also all have some way of decompressing files in several standard compression formats, which will squash the XML down to the same size as your custom scheme, if storage space is an issue, which it generally isn't. There's all manner of custom schemes one can use to do various things better when one defines the platform. When you want to inter-opperate well, you need to use the capabilities that already exist on only semi-known systems.

    Generally we don't actually make customers use new specialized tools. We take advantage of the new specialized tools they already have. I'm pretty sure not one of my customers ever got a browser to read my documentation; I wrote it in HTML because they've all got browsers already.

Remember, UNIX spelled backwards is XINU. -- Mt.

Working...