Hi David Lee,
I have already tried "full" option for specific nodes.
It worked But, as we don't know which keyword user searches and which element
will have the highlighted text it will be tough in long run to pass the
specific element names for "full"
I feel, there should be an option to exclude specified elements from JSON
conversion.
XML:
<employee><code>01</code><label>gnana < highlight >prakash</ highlight >
bodireddy</label></employee>
JSON:
{"employee":{"code":"01", "label":"gnana <highlight>prakash<highlight>
bodireddy"}}
The reason why I am looking for above solution is as most of the cases after
performing highlighting, when we are rendering it on UI, we expect to have
styling defined for highlight element to show the color. By using "full"
currently we are getting the object as an array which needs additional effort
to handle array/object as we don't know which element contains the highlighted
text.
@Erik, I will try looking at your options and will update you if successful.
Gnana
Gnanaprakash Bodireddy | Sr. Associate - Projects | IME | Cognizant Technology
Solutions.
From: David Lee [mailto:[email protected]]
Sent: Tuesday, January 29, 2013 9:29 PM
To: MarkLogic Developer Discussion; Bodireddy, Gnanaprakash (Cognizant)
Subject: RE: Custom JSON convertion issue in ML 6
Just an FYI but the "full" JSON strategy can in fact handle mixed text, but is
very ugly.
As Erik correctly describes mixed text is something JSON was not designed for
and hence any attempt to force mixed text XML
Into JSON will be ugly ... As you noticed the "full" conversion preserved
everything - but its not prety.
As a compromise
You can treat specific nodes as "full" in the custom conversion like this:
xquery version "1.0-ml";
import module namespace json="http://marklogic.com/xdmp/json" at
"/MarkLogic/json/json.xqy";
let $x := <employee><code>01</code><label>gnana <span>prakash</span>
bodireddy</label></employee>
let $config := json:config("custom") ,
$cx := map:put( $config, "whitespace", "ignore" ),
$cx := map:put( $config , "full-element-names" , "label" )
return json:transform-to-json($x,$config)
{"employee":{"code":"01", "label":{"_children":["gnana
",{"span":{"_value":"prakash"}}," bodireddy"]}}}
-----------------------------------------------------------------------------
David Lee
Lead Engineer
MarkLogic Corporation
[email protected]<mailto:[email protected]>
Phone: +1 650-287-2531
Cell: +1 812-630-7622
www.marklogic.com<http://www.marklogic.com/>
This e-mail and any accompanying attachments are confidential. The information
is intended solely for the use of the individual to whom it is addressed. Any
review, disclosure, copying, distribution, or use of this e-mail communication
by others is strictly prohibited. If you are not the intended recipient, please
notify us immediately by returning this message to the sender and delete all
copies. Thank you for your cooperation.
From:
[email protected]<mailto:[email protected]>
[mailto:[email protected]] On Behalf Of Erik Hennum
Sent: Tuesday, January 29, 2013 10:46 AM
To:
[email protected]<mailto:[email protected]>;
[email protected]<mailto:[email protected]>
Subject: Re: [MarkLogic Dev General] Custom JSON convertion issue in ML 6
Hi, Gnanaprakash:
In XML, annotating part of a flow of text with an element is known as mixed
content:
<label>gnana <span>prakash</span> bodireddy</label>
Mixed text is in the design space for XML but not for JSON (which was designed
for data structures). In other words, you've run into an impedance mismatch
between XML and JSON.
Some alternatives:
* Suppress the entire label if you don't need the label in JSON
* Convert the entire content of the label to a single text flow if you only
need the label text.
* Wrap elements around the text before and after the span to produce a
DOM-like data structure in JSON.
In 6.x, I think your best strategy for implementing one of those alternatives
would be to transform the XML using either XSLT or XQuery before converting it
to JSON. For instance, here's the documentation for the XQuery approach:
http://docs.marklogic.com/guide/app-dev/typeswitch#chapter
You can also search for XQuery transformation on the web to find additional
resources.
Erik Hennum
________________________________
From:
[email protected]<mailto:[email protected]>
[[email protected]]
Sent: Tuesday, January 29, 2013 12:34 AM
To: [email protected]<mailto:[email protected]>;
Erik Hennum
Subject: Custom JSON convertion issue in ML 6
Hi Erik
Not sure whether I can call this as an issue or not. but I am facing an issue
using custom json conversion
Sample Code:
xquery version "1.0-ml";
import module namespace json="http://marklogic.com/xdmp/json" at
"/MarkLogic/json/json.xqy";
let $x := <employee><code>01</code><label>gnana <span>prakash</span>
bodireddy</label></employee>
let $config := json:config("custom") ,
$cx := map:put( $config, "whitespace", "ignore" )
let $config-full := json:config("full") ,
$cx := map:put( $config, "whitespace", "ignore" )
return (json:transform-to-json($x,$config),
json:transform-to-json($x,$config-full))
Response:
{"employee":{"code":"01", "label":{"_value":" bodireddy", "span":"prakash"}}}
{"employee":{"_children":[{"code":{"_children":["01"]}},{"label":{"_children":["gnana
",{"span":{"_children":["prakash"]}}," bodireddy"]}}]}}
In the above response, when used "custom" the leading text value "gnana" is
missing. How can we get the text?
Note: I am trying to do the json converstion on node with highlighting (with
span as an element)
Thanks and Regards,
Gnanaprakash Bodireddy
This e-mail and any files transmitted with it are for the sole use of the
intended recipient(s) and may contain confidential and privileged information.
If you are not the intended recipient(s), please reply to the sender and
destroy all copies of the original message. Any unauthorized review, use,
disclosure, dissemination, forwarding, printing or copying of this email,
and/or any action taken in reliance on the contents of this e-mail is strictly
prohibited and may be unlawful.
This e-mail and any files transmitted with it are for the sole use of the
intended recipient(s) and may contain confidential and privileged information.
If you are not the intended recipient(s), please reply to the sender and
destroy all copies of the original message. Any unauthorized review, use,
disclosure, dissemination, forwarding, printing or copying of this email,
and/or any action taken in reliance on the contents of this e-mail is strictly
prohibited and may be unlawful.
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general