On 11/29/07, James Fuller wrote:
well, if my previous posts didn't attract flames.... this post certainly will ;)

Nah, this is getting into the interesting language part! (Technically, it should be perl6+xml-language... but then the goal of perl6 is to be infinitely flexible, so I guess it is on topic!)

but you did say 'from a users perspective' ... so I will play 'make believe' with some syntax

I mentioned in my previous message that there is a technical side to the issue of standards. That involves questions about what makes for a "good" XML (etc.) module (which raises the question, "Good for *what*?" -- a practical answer is, what's good for a lot of the people a lot of the time. Maybe there's no single answer even to that question, so perhaps there are multiple standards in some cases; that's fine. And of course, there will always be de facto standards based on whatever "most people" happen to be using at any given time. That's fine too.)

But one of the obvious things that makes a module technically good -- and the one that's most relevant here -- is what its "dialect' is like, how its syntax works, how perlish it is; in other words, how well it fits in with design goals of perl6 as a language. We've all seen modules that worked but didn't feel very perly (and a good Python XML module might look very different from a good Perl one).

So I think what a P6 XML module would look like (as opposed to how it works) is certainly worth discussing here. (Or indeed, any other module, as far as its linguistic aspects go.) The first thing that caught my eye about James's examples was the way he plunked XML (that looked like XML) in the middle of Perl (that looked like Perl).

my $sales = <sales vendor="John">
    <item type="peas" price="4" quantity="6"/>
    <item type="carrot" price="3" quantity="10"/>
    <item type="chips" price="5" quantity="3"/>
  </sales>;
no surrounding quotes seems about right.

Having just been admiring Aurdrey's XML::Literal module the other day, I was wondering whether it could work in Perl6. P6 already works the angles pretty hard -- you couldn't make them quote a piece of XML without giving up their standard string-quoting function. But hey, maybe that's worth it if you're doing a lot of XML. Could P6 still recognise a hash-key quoted %like<this> as a special non-XML case? (Should it? Would XML-keys be particularly useful?) Or is it better to pick some other characters as the XML-quoters and have the code "almost" look like XML?

Having your XML look like XML carries definite advantages, and having things look like what they are is definitely part of Perl's philosophy. But on the other hand, XML is kind of bulky and awkward, so maybe the Perly thing to do would be to translate it into something that looks like how it works: XML documents are trees, so maybe they ought to look more like ordinary hashes.

(E.g. on 11/29/07, Patrick R. Michaud wrote:
    my $doc = Document.new;
    $doc<some><content> = 'here';

-- much better than a here-doc, which wouldn't provide you with syntax-checking, syntax-colouring, or syntax-anything-else.)

[...]I like my 'scanability' to be in xpath form ala:
    my $select_li_elements  = $html[/html/body/span/ul/li];
and then u have the expressive power of xpath inside of these brackets.

Perl would more likely use something like $html<html/body> (or even $html<html><body>), since square brackets mean ordinal indices (though you could make that work too). You could have $html<html/body> and $html.html.body both work. Perhaps more interesting is to consider something like:
        my $select_li_elements = /$html/body/span/ul/li;
Hm...

( as an aside, is there any concept of the native types, Scalar, Array, Hash being in a different namespace then all the other symbols e.g. could I override Scalar type ?)

I guess the idea would be to have unspecified scalars default to the XML type (instead of type Any)? Sure! (I don't know exactly how, I just know P6 lets you do anything you want.) Of course, if you have special quotes, there might be no need: if Perl knows that <foo/> is XML data, then "my $f=<foo/>" will do the right thing.

This would replace text context node of <div id="mydivid"/>
    $html[/html/body/[EMAIL PROTECTED]'mydivid'] ] = "new text value";

$html<html><body><divp>:id<mydivid> = "new text value"; ?

I am unsure of what an append scenario  would look like.

push?  ~=?  .append()?

Perhaps one would like to be able to decide if this xml must be checked for validaty against some schema technology (DTD and relaxNG as basic) .... are there any 'adjectives when declaring a type ... I guess I am suggesting a new sigil enforcing an XML context ;0

That wouldn't be a new sigil (despite Perl6 letting you do anything, I think this is one area where it would look the other way and pretend not to hear you unless you got really insistent); probably you'd say:
        my XML::Doc $foo is validated($dtd);

should print out the value of each div contained in html
for $myxmlvar[/html/body/div]]{
    print; # prints $_, the current loop variable
}

Yup (although I think that should be: for =$myxmlvar[etc...]).


I will stop here ... so I can put on my flame proof suit.

I find nothing to flame here, but lots to discuss.


-David

Reply via email to