Subject: RE: [xsl] Finding the ID attribute of an XPath from XMLSchema From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sun, 22 Jul 2007 11:01:37 +0100 |
XQuery is actually off-topic for this list, but I didn't notice that when you started the thread because your subject line says XPath. With Saxon-SA 8.9.0.3, (1) it reports the error "function is in a reserved namespace". Function names must be in your own namespace. (2) When I fix that (prefix the function name with "local:"), it works fine. I think there is a bug in your XQuery processor. Michael Kay > -----Original Message----- > From: v vijith [mailto:vvijith@xxxxxxxxx] > Sent: 22 July 2007 03:42 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Finding the ID attribute of an XPath from XMLSchema > > Mike > Based on the syntax above, I wrote the code and gives an > error, context document undefined. > > declare function id-from-element ( $element as element()? ) > as xs:string? { > data(($element/@*[id(.) is ..])[1]) } ; > > let $dm := doc("/repository/content/3001") let $ee:= > id-from-element($dm//figure/picture[1]) > return > <net> > {$ee} > </net> > > It gives me an error "context document undefined". > > the XML is having the struct > > <?xml version="1.0" encoding="UTF-8"?> > > <sample1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:noNamespaceSchemaLocation="sample1.xsd"> > <data>Copyright MyCompany 2007</data> > <figure> > <picture no="IMAGE-1"/> > <picture no="IMAGE-2"/> > <picture no="IMAGE-3"/> > </figure> > </sample1> > > XSD is > > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > elementFormDefault="qualified"> > <xs:element name="sample1"> > <xs:complexType> > <xs:sequence> > <xs:element ref="data"/> > <xs:element ref="figure"/> > </xs:sequence> > </xs:complexType> > </xs:element> > <xs:element name="data" type="xs:string"/> > <xs:element name="figure"> > <xs:complexType> > <xs:sequence> > <xs:element > maxOccurs="unbounded" ref="picture"/> > </xs:sequence> > </xs:complexType> > </xs:element> > <xs:element name="picture"> > <xs:complexType> > <xs:attribute name="no" use="required" > type="xs:ID"/> > </xs:complexType> > </xs:element> > </xs:schema> > > > Thanks > Vijith > > On 7/21/07, Michael Kay <mike@xxxxxxxxxxxx> wrote: > > Given a node $n, you can find the value of its ID attribute > if it has > > one using > > > > $n/@*[id(.) is $n] > > > > Michael Kay > > http://www.saxonica.com/ > > > > > > > -----Original Message----- > > > From: v vijith [mailto:vvijith@xxxxxxxxx] > > > Sent: 21 July 2007 19:16 > > > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > Subject: Re: [xsl] Finding the ID attribute of an XPath from > > > XMLSchema > > > > > > Below is a snippet from the XMLSchema > > > > > > <xs:complexType name="nameType"> > > > <xs:sequence> > > > <xs:element minOccurs="0" ref="desig"/> > > > </xs:sequence> > > > <xs:attribute ref="dest" use="required"/> > > > <xs:attribute ref="id"/> > > > <xs:attribute ref="garageid"/> > > > <xs:attributeGroup ref="xlink:XLINKATT1"/> > > > </xs:complexType> > > > <xs:attribute name="id" type="xs:ID"/> > > > > > > this means that in the XML, the nameType node can be > identified by > > > the id attribute as xs:attribute name=id is mapped to XS:ID. > > > > > > Likewise there can be many nodes in the XML that has ID > associated > > > to it. > > > > > > <xml> > > > <root> > > > <somenode> > > > <nameType id="2" attrib2="34">text</nameType> <nameType id="3" > > > attrib2="34">text</nameType> <nameType id="4" > > > attrib2="34">text</nameType> </somenode> <anothernode > attrib5="55"/> > > > </root> > > > > > > > > > In the XML, I perform some kind of XQuery and I get the output as > > > root/somenode/anothernode/nameType. > > > Once I get this node, I should be able to find if there is an ID > > > attribute defined for this node in the XSD. > > > In the above case, the id attribute in the nameType tag is the > > > attribute as per the XML Schema. > > > > > > So I need the output as id for the xpath > > > root/somenode/anothernode/nameType > > > > > > Hope I have explained it better! > > > > > > Well what I thought was this way as a solution 1. Parse the > > > XMLSchema 2. Make a map of XPath as key and the id as attribute. > > > 3. Once I get the xpath from xquery, check the map to > find the id 4. > > > But parsing XMLSchema and mapping is not that simple either > > > > > > Thanks > > > Vijith > > > > > > On 7/21/07, Michael Kay <mike@xxxxxxxxxxxx> wrote: > > > > > I have an XML which is associated to an XMLSchema. Once I > > > perform an > > > > > XQuery on the XML I get a selected set of XPaths (Im > > > using our own > > > > > functions). > > > > > > > > > > For each XPath I need to know what is the ID attribute > > > for the XPath. > > > > > I know that in XMLSchema there is an XS:ID Attribute. I > > > would like > > > > > to know if there is a way to find the ID associated from the > > > > > XMLSchema for an XPath in the XML. > > > > > > > > > > Did I confuse everyone? > > > > > > > > You certainly confused me. Show us your source document > and tell > > > > us what you want your output to look like. > > > > > > > > Michael Kay > > > > http://www.saxonica.com/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Finding the ID attribute , v vijith | Thread | RE: [xsl] Output to a file...and li, Naschke, Pete |
[xsl] does instant saxon 6.5.3 supp, Alan Arnfeld | Date | Re: [xsl] does instant saxon 6.5.3 , David Carlisle |
Month |