- From: Chimezie Ogbuji <ogbujic@bio.ri.ccf.org>
- Date: Thu, 19 Oct 2006 22:51:01 -0400 (EDT)
- To: Dan Connolly <connolly@w3.org>
- cc: GRDDL Working Group <public-grddl-wg@w3.org>
I've had a chance to ponder this issue. In the end I think the language is fine as it is. In particular, a GRDDL result has to be handled by the same user agent which invokes the GRDDL mechanism and will include actions such as merging graphs, interpreting / querying graphs and possibly serializing them. It has to be able to interpret GRDDL result graphs in order to glean transformation links expressed in RDF. So, the agent would need to be (or have access to) an RDF processor which could parse an RDF serialization safely, perhaps even in the absence of an associated mime-type from the output of the transform. A sample implementation appendix can demonstrate some failsafe ways to parse transformation output (XML w/ XSLT 1.0). In particular, for XSLT results w/out mime-types or output types, the RDF could be parsed in a particular order (http://esw.w3.org/topic/DereferenceURI has some suggestions on prospective RDF parsing). I can write up some 4Suite [1] / RDFLib snippets for this as well as some XSLT transforms that use a 'default' base-uri throughout and this ends up when parsed as RDF. For example, this bit below is how 4Suite's content management repository synchronizes XML documents with a corresponding RDF graph: from Ft.Xml.Xslt import Processor from Ft.Rdf import Util as RdfUtil p = Processor.Processor() .. snip .. p.appendStylesheetInstance(st) .. snip .. rt = p.run(isrc, ignorePis=1, topLevelParams=params) #So we got a result. Cool, parse it and add it. model, db = RdfUtil.DeserializeFromXSLT( p.outputParams.method[-1], rt, create=1, scope=srcUri ) Where model is an instance of an API for a named RDF graph and db is the persistence mechanism. In this case, the URI of the source document (srcUri) is used as the name of the graph into which the output of the transformation is parsed. DeserializeFromXSLT is currently [2] defined as: def DeserializeFromXSLT(outputMethod,st, driver=Memory, dbName='', create=False, scope=None): """ Parse RDF syntax from an XSLT transform based on the output method used if XML: - Try RDF/XML - Try TriX? - raise Exception elif text: - Try N3 - raise Exception elif HTML: - *should perhaps follow GRDDL rules?* """ if outputMethod == 'xml': from Ft.Rdf.Serializers.Dom import Serializer from Ft.Xml.Domlette import NonvalidatingReader doc = NonvalidatingReader.parseString(st,scope) driver.InitializeModule() if create: db = driver.CreateDb(dbName, 'default') else: db = driver.GetDb(dbName, 'default') db.begin() model = Model.Model(db) serializer = Serializer() serializer.deserialize(model, doc, scope) db.commit() return model, db elif outputMethod == 'text': #The most widely deployed text syntax for RDF is N3 and it's derivatives (Turtle & NTriples) from Ft.Rdf.Serializers.N3 import Serializer driver.InitializeModule() if create: db = driver.CreateDb(dbName, 'default') else: db = driver.GetDb(dbName, 'default') db.begin() model = Model.Model(db) serializer = Serializer() serializer.deserialize(model, cStringIO.StringIO(st), scope) db.commit() return model, db else: raise Exception("Unsupported RDF Serialization: %s"%(repr(processor.outputParams.method))) Additional observations for current spec draft: I would move 'Using GRDDL with an RDF Namespace document' to the primer as suggested. - [1] http://4suite.org/docs/CoreManual.xml - [2] http://cvs.4suite.org/viewcvs/4Suite/Ft/Rdf/Util.py?view=markup On Wed, 18 Oct 2006, Dan Connolly wrote: > > Splitting the editing work with Murray prompted me to look > more closely at the formal guts of the specification and > take out fluffy stuff like "preserve the meaning..." > and formally define "GRDDL result". > > Consequently, I currently lean toward the less constrained > position on issue-output-formats, i.e. yes, a GRDDL > transformation may produce RDF in a format other than RDF/XML. > > The current text is: > > [[ > Stated more formally: > > * An XML document whose root element has an attribute with a local > name of transformation and a namespace name of > http://www.w3.org/2003/g/data-view# has a GRDDL transformation > for each resource identified by a URI reference listed in the > value of the attribute (c.f. section 4.4.1. URI references in > [WEBARCH]). > * If ?D is an XML document with GRDDL transformation ?T, then the > result of applying ?T1 to ?D is a GRDDL result of ?D. > * If ?G1 and ?G2 are GRDDL results of ?D, then the merge of ?G1 > and ?G2 is also a GRDDL result of ?D. > ]] > -- http://www.w3.org/2004/01/rdxh/spec#grddl-xml > > > Even more formally, I worked out the details of those rules in N3. > http://www.w3.org/2004/01/rdxh/grddl-rules.n3 > Chimezie Ogbuji Lead Systems Analyst Thoracic and Cardiovascular Surgery Cleveland Clinic Foundation 9500 Euclid Avenue/ W26 Cleveland, Ohio 44195 Office: (216)444-8593 ogbujic@ccf.org
Received on Friday, 20 October 2006 02:51:11 UTC