Hi Geert, I played a little bit, I created a common schema with type PhoneNumber in namespace "http://www.aa.com/datamodel/common" , and then a contactInfo schema in namespace "http://www.aa.com/datamodel/account" which imports the common schema. The schema is as following:
common schema: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.aa.com/datamodel/common" targetNamespace="http://www.aa.com/datamodel/common" elementFormDefault="qualified" attributeFormDefault="qualified"> <xs:annotation> <xs:documentation>This scheme defines common shared data object types.</xs:documentation> </xs:annotation> <xs:complexType name="PhoneNumber"> <xs:sequence> <xs:element name="countryCode" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="areaCode" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="exchange" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="number" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="extension" type="xs:string" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:schema> then the contactInfo schema like following: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.aa.com/datamodel/account" xmlns:data-common="http://www.aa.com/datamodel/common" targetNamespace="http://www.aa.com/datamodel/account" elementFormDefault="qualified" attributeFormDefault="qualified"> <xs:annotation> <xs:documentation>This schema defines data object types used for interfaces</xs:documentation> </xs:annotation> <xs:import namespace="http://www.aa.com/datamodel/common" schemaLocation="common.xsd"/> <xs:element name="contactInfo" type="tns:ContactInfo"/> <xs:complexType name="ContactInfo"> <xs:sequence> <xs:element name="phone" type="data-common:PhoneNumber" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema> Then I used XMLspy to create sample xml based on contactInfo schema: <?xml version="1.0" encoding="UTF-8"?> <tns:contactInfo xsi:schemaLocation="http://www.aa.com/datamodel/account accountContact.xsd" xmlns:tns="http://www.aa.com/datamodel/account" xmlns:data-common="http://www.aa.com/datamodel/common" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:phone> <data-common:countryCode>String</data-common:countryCode> <data-common:areaCode>String</data-common:areaCode> <data-common:exchange>String</data-common:exchange> <data-common:number>String</data-common:number> <data-common:extension>String</data-common:extension> </tns:phone> </tns:contactInfo> you can see for contactInfo, the element phone is in the same namespace of contactinfo, but all the child elements inside phone are in common namespace. This result is not what I want. I think usually I would prefer the element phone and all its' children are in the same namespace (like common). Did I miss anything here? Thanks, Helen On Wed, Jul 13, 2011 at 2:56 AM, Geert Josten <[email protected]> wrote: > Hi Helen, > > I'd recommend to make a shared schema file (more or less your option 2) that > contains complex types for things like address and person. When defining an > editor, you simply say that the type of that element is that of the complex > type person. That way editor will be in its own namespace, but person as type > still shareable.. > > HTH > > Kind regards, > Geert > > -----Oorspronkelijk bericht----- > Van: [email protected] > [mailto:[email protected]] Namens helen chen > Verzonden: dinsdag 12 juli 2011 21:48 > Aan: [email protected] > Onderwerp: [MarkLogic Dev General] question about organizing schema > > Hello there, > > I'm learning xml schema, and I have a question that somewhat confuses me. > > if I have a structure like the following: > > person > profile > firstname > lastname > title > address > street > city > state > zip > > in Marklogic, if I have element editor and author, and I want to > distinguish them in different namespace so when I do search by name, I > won't mix editor's name and author's name. > > I can have two ways to design the schema: > > 1. when I design the schema, I would put editor into one schema with > one namespace, and put author into another schema with another > namespace. this way inside document editor and author are seperated by > namespace. This way can fit the marklogic search. > > 2. just by looking at the structure, I'm very easily to think about > putting profile and address into a common schema with namespace like > "common-ns". and then another schema for person, which will import the > the common schema to reuse the profile element and address element. > but the person schema usually will be in another namespace. I have > this thinking is because I do java a lot and this way seems to make > element reusable. > but the problem for this approach is: since editor and author are > all type of person, and person will import common schema, so all the > profiles for editor and author will be in same namespace, then in > marklogic I won't be able to distinguish them and cannot do search. > > Maybe I mixed the schema design with Marklogic. I'm kind of new to > schema design, and to me both way seems to have their purpose. > > I'm wondering in general when designing schema, do we make reusable > element in a common schema? if so, then what is best/common way for > using namespace in schema? > > Or in this case, what is the common way to design the schema? Does the > common way schema design always fit Marklogic? > > One idea pops up to me is: maybe Marklogic is for data manipulate, so > we have one schema for marklogic, and then another schema to be used > for public. > > I hope to get some help on this topic, or maybe point me to some > articles that describe the common sense of schema design. > > Thanks a lot, > Helen > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general > _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
