Re: [pyxb-users] Parsing with multiple namespaces
Brought to you by:
pabigot
From: Jon S. <js...@co...> - 2011-02-23 01:06:35
|
Thanks for the reply. I'll try to explain with an example below, and any help you can give would be much appreciated. I generate the bindings like this: $ pyxbgen -u shape.xsd -m shape $ pyxbgen -u circle.xsd -m circle Now the following code works (using the circle package): from pyxb.utils import domutils from circle import CreateFromDOM p = CreateFromDOM(domutils.StringToDOM(open("example.xml").read())) But this doesn't (using the shape package) from pyxb.utils import domutils from shape import CreateFromDOM p = CreateFromDOM(domutils.StringToDOM(open("example.xml").read())) Now in this case I could just use circle, but what if I add circle, pentagon, etc? Because these are extensions I can't run pyxbgen on them all at once, and because they're in different namespaces I shouldn't have to. example.xml: <?xml version="1.0"?> <picture xmlns="http://www.example.com/shape" xmlns:c="http://www.example.com/circle"> <name>Example Picture</name> <shapes> <square> <size>5</size> </square> <c:circle> <c:radius>10</c:radius> </c:circle> </shapes> </picture> shape.xsd: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/shape" xmlns="http://www.example.com/shape" elementFormDefault="qualified"> <xs:element name="picture"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="shapes" type="ShapesType"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="ShapesType"> <xs:sequence> <xs:element ref="shape" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="shape" type="ShapeType"/> <xs:complexType name="ShapeType"/> <xs:element name="square" substitutionGroup="shape"> <xs:complexType> <xs:complexContent> <xs:extension base="ShapeType"> <xs:sequence> <xs:element name="size" type="xs:int"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> </xs:schema> circle.xsd: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:shp="http://www.example.com/shape" targetNamespace="http://www.example.com/circle" xmlns="http://www.example.com/circle" elementFormDefault="qualified"> <xs:import namespace="http://www.example.com/shape" schemaLocation="shape.xsd"/> <xs:element name="circle" substitutionGroup="shp:shape"> <xs:complexType> <xs:complexContent> <xs:extension base="shp:ShapeType"> <xs:sequence> <xs:element name="radius" type="xs:int"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> </xs:element> </xs:schema> Thanks again, Sorry for the long post. Jon On 22/02/11 14:17, Peter Bigot wrote: > It's been a while since I've done anything with PyXB, so I may be > rusty. But what you're describing is supposed to just work. > > PyXB maintains a registry of known namespaces, which is initialized > when a module is loaded. As a document is processed, the relevant > namespace should be resolved and its content model used. > > Although each module contains helper functions CreateFromDocument and > CreateFromDOM, these should only provide a default namespace. You > should be able to process a document that has full namespace > information by using any of the CreateFromDOM functions. (The > document must include the necessary xmlns:foo="uri" namespace > declarations to map the namespace qualifiers to the actual namespaces > which are URIs.) > > If the document uses an absent namespace, then you have to use the > CreateFromDOM function from the correct module, or identify the > correct Namespace instance and provide it. (These functions also > provide the option of overriding the default namespace, though I see a > potential bug in that CreateFromDocument ignores it in favor of the > module namespace.) > > I thought I had some multiple namespace examples in the manual, but I > don't see them offhand. From the distribution, examples/xsdprimer > shows an example of a document that uses multiple namespaces, as would > anything involving the OGC schema. > > If you continue to have problems, please provide a pointer to a set of > example schema and a document, along with the application code that > isn't doing what you think it should, and I'll take a look. > > Peter > > On Tue, Feb 22, 2011 at 6:19 AM, Jon Siddle <js...@co... > <mailto:js...@co...>> wrote: > > I'm looking at using pyxb for providing an extension mechanism and > could > do with some guidance. > > Say I have a.xsd which provides a namespace containing the head of a > substitution group, and b.xsd which provides a separate namespace > and contains elements which can be substituted. > > I can generate module a and module b, and I can successfully parse an > xml file using b.CreateFromDOM but not a.CreateFromDOM. > > My problem is that b.xsd (and later c.xsd) will be introduced long > after > a.xsd. So once I've added c.xsd (module c), how do > I process a file which contains substitutions from both b and c? > > I don't think this is specific to substitution groups at all. More > generally, if I have an XML file containing multiple namespaces; > how do > I parse > it? > > Jon > > ------------------------------------------------------------------------------ > Index, Search & Analyze Logs and other IT data in Real-Time with > Splunk > Collect, index and harness all the fast moving IT data generated > by your > applications, servers and devices whether physical, virtual or in > the cloud. > Deliver compliance at lower cost and gain new business insights. > Free Software Download: http://p.sf.net/sfu/splunk-dev2dev > _______________________________________________ > pyxb-users mailing list > pyx...@li... > <mailto:pyx...@li...> > https://lists.sourceforge.net/lists/listinfo/pyxb-users > > |