[DFDL-WG] The length of this element should be more than 1 character

Garriss Jr., James P. jgarriss at mitre.org
Fri Apr 5 13:44:44 EDT 2013


Suppose I have a text element whose length must be greater than 1 character.  I think an assert should be able to handle this, and there's a string-length() function, so I wrote this for my xPath expression:

fn:string-length(.) > 1

But MBTK is telling me:

CTDX1100E : XSD: The attribute 'null' is not permitted

(This is, BTW, a less-than-helpful error message.)

[cid:image001.png at 01CE3200.633AA6A0]

I added it manually, like so:

                                                <xsd:element name="Body" type="xsd:string">
                                                            <xsd:annotation>
                                                                        <xsd:appinfo source="http://www.ogf.org/dfdl/">
                                                                                    <dfdl:assert message="The length of the body must be more than 1 character">
                                                                                                { fn:string-length(.) > 1 }
                                                                                    </dfdl:assert>
                                                                        </xsd:appinfo>
                                                            </xsd:annotation>
                                                </xsd:element>

And MBTK gave me this error:

CTDV1493E : XPath expression '{ fn:string-length(.) > 1 }' contains a path expression that does not resolve to an element in the schema: 'Found  ">" at line 1, column 23. Expected one of  "}" "or" "and" "*" "div" "idiv" "mod" "eq" "ne" "lt" "le" "gt" "ge" "[" "-" "+" "/"'. Element: #xmlns(p="http://fileid")xscd(/schemaElement::p:ImfMime/type::0/model::sequence/schemaElement::Body).

So this indicates it doesn't like the ">" character.  So I changed it to > but got the same message.

So am I implementing this wrong?  Or does MBTK not support this function?

Daffodil is also giving me an error:

Schema Definition Error: XPath Compilation Error: net.sf.saxon.trans.XPathException: XPath syntax error at char 20 in {fn:string-length(.) > 1}:
    Prefix fn has not been declared Schema context: element.Body. Location in file:/C:/Users/jgarriss/daffodil-0.8.1/bin/DetectImfMime.xsd

But this is a different issue, a namespace issue.  MBTK magically knows about the "fn:" namespace, but Daffodil doesn't.  It's not declared in the root element:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://fileid"
            xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/" xmlns:fmt="http://www.ibm.com/dfdl/GeneralPurposeFormat"
            xmlns:ibmSchExtn="http://www.ibm.com/schema/extensions" xmlns:ns0="http://fileid"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Help!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20130405/ead35d62/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 84685 bytes
Desc: image001.png
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20130405/ead35d62/attachment-0001.png>


More information about the dfdl-wg mailing list