[xsd-users] Question: root element in 'import' schema

Nicholas Xu xunich at gmail.com
Fri Nov 16 02:20:43 EST 2007


Hello boris,

I met a problem when handling schema defined in RFC4745 and
draft-ietf-simple-presence-rules-10. RFC4745 defines schema of
common-policy :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:cp="urn:ietf:params:xml:ns:common-policy"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:ietf:params:xml:ns:common-policy"
elementFormDefault="qualified" attributeFormDefault="unqualified">
	<!-- /ruleset -->
	<xs:element name="ruleset">
		<xs:complexType>
			<xs:complexContent>
				<xs:restriction base="xs:anyType">
					<xs:sequence>
						<xs:element name="rule" type="cp:ruleType" minOccurs="0"
maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:restriction>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
	<!-- /ruleset/rule -->
	<xs:complexType name="ruleType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:sequence>
					<xs:element name="conditions" type="cp:conditionsType" minOccurs="0"/>
					<xs:element name="actions" type="cp:extensibleType" minOccurs="0"/>
					<xs:element name="transformations" type="cp:extensibleType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="id" type="xs:ID" use="required"/>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //rule/conditions -->
	<xs:complexType name="conditionsType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:choice maxOccurs="unbounded">
					<xs:element name="identity" type="cp:identityType" minOccurs="0"/>
					<xs:element name="sphere" type="cp:sphereType" minOccurs="0"/>
					<xs:element name="validity" type="cp:validityType" minOccurs="0"/>
					<xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
				</xs:choice>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //conditions/identity -->
	<xs:complexType name="identityType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:choice maxOccurs="unbounded">
					<xs:element name="one" type="cp:oneType"/>
					<xs:element name="many" type="cp:manyType"/>
					<xs:any namespace="##other" processContents="lax"/>
				</xs:choice>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //identity/one -->
	<xs:complexType name="oneType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:sequence>
					<xs:any namespace="##other" processContents="lax" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="id" type="xs:anyURI" use="required"/>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //identity/many -->
	<xs:complexType name="manyType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:element name="except" type="cp:exceptType"/>
					<xs:any namespace="##other" processContents="lax" minOccurs="0"/>
				</xs:choice>
				<xs:attribute name="domain" type="xs:string" use="optional"/>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //many/except -->
	<xs:complexType name="exceptType">
		<xs:attribute name="domain" type="xs:string" use="optional"/>
		<xs:attribute name="id" type="xs:anyURI" use="optional"/>
	</xs:complexType>
	<!-- //conditions/sphere -->
	<xs:complexType name="sphereType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:attribute name="value" type="xs:string" use="required"/>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //conditions/validity -->
	<xs:complexType name="validityType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:sequence maxOccurs="unbounded">
					<xs:element name="from" type="xs:dateTime"/>
					<xs:element name="until" type="xs:dateTime"/>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<!-- //rule/actions or //rule/transformations -->
	<xs:complexType name="extensibleType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:sequence>
					<xs:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>

draft-ietf-simple-presence-rules-10 defines pres-rules schema which
imports common-policy :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cr="urn:ietf:params:xml:ns:common-policy"
xmlns:pr="urn:ietf:params:xml:ns:pres-rules"
targetNamespace="urn:ietf:params:xml:ns:pres-rules"
elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:import namespace="urn:ietf:params:xml:ns:common-policy"
schemaLocation="common-policy.xsd"/>
	<xs:simpleType name="booleanPermission">
		<xs:restriction base="xs:boolean"/>
	</xs:simpleType>
	<xs:element name="service-uri-scheme" type="xs:token"/>
	<xs:element name="class" type="xs:token"/>
	<xs:element name="occurrence-id" type="xs:token"/>
	<xs:element name="service-uri" type="xs:anyURI"/>
	<xs:complexType name="provideServicePermission">
		<xs:choice>
			<xs:element name="all-services">
				<xs:complexType/>
			</xs:element>
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				<xs:choice>
					<xs:element ref="pr:service-uri"/>
					<xs:element ref="pr:service-uri-scheme"/>
					<xs:element ref="pr:occurrence-id"/>
					<xs:element ref="pr:class"/>
					<xs:any namespace="##other" processContents="lax"/>
				</xs:choice>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
	<xs:element name="provide-services" type="pr:provideServicePermission"/>
	<xs:element name="deviceID" type="xs:anyURI"/>
	<xs:complexType name="provideDevicePermission">
		<xs:choice>
			<xs:element name="all-devices">
				<xs:complexType/>
			</xs:element>
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				<xs:choice>
					<xs:element ref="pr:deviceID"/>
					<xs:element ref="pr:occurrence-id"/>
					<xs:element ref="pr:class"/>
					<xs:any namespace="##other" processContents="lax"/>
				</xs:choice>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
	<xs:element name="provide-devices" type="pr:provideDevicePermission"/>
	<xs:complexType name="providePersonPermission">
		<xs:choice>
			<xs:element name="all-persons">
				<xs:complexType/>
			</xs:element>
			<xs:sequence minOccurs="0" maxOccurs="unbounded">
				<xs:choice>
					<xs:element ref="pr:occurrence-id"/>
					<xs:element ref="pr:class"/>
					<xs:any namespace="##other" processContents="lax"/>
				</xs:choice>
			</xs:sequence>
		</xs:choice>
	</xs:complexType>
	<xs:element name="provide-persons" type="pr:providePersonPermission"/>
	<xs:element name="provide-activities" type="pr:booleanPermission"/>
	<xs:element name="provide-class" type="pr:booleanPermission"/>
	<xs:element name="provide-deviceID" type="pr:booleanPermission"/>
	<xs:element name="provide-mood" type="pr:booleanPermission"/>
	<xs:element name="provide-place-is" type="pr:booleanPermission"/>
	<xs:element name="provide-place-type" type="pr:booleanPermission"/>
	<xs:element name="provide-privacy" type="pr:booleanPermission"/>
	<xs:element name="provide-relationship" type="pr:booleanPermission"/>
	<xs:element name="provide-status-icon" type="pr:booleanPermission"/>
	<xs:element name="provide-sphere" type="pr:booleanPermission"/>
	<xs:element name="provide-time-offset" type="pr:booleanPermission"/>
	<xs:element name="provide-user-input">
		<xs:simpleType>
			<xs:restriction base="xs:string">
				<xs:enumeration value="false"/>
				<xs:enumeration value="bare"/>
				<xs:enumeration value="thresholds"/>
				<xs:enumeration value="full"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:element name="provide-note" type="pr:booleanPermission"/>
	<xs:element name="sub-handling">
		<xs:simpleType>
			<xs:restriction base="xs:token">
				<xs:enumeration value="block"/>
				<xs:enumeration value="confirm"/>
				<xs:enumeration value="polite-block"/>
				<xs:enumeration value="allow"/>
			</xs:restriction>
		</xs:simpleType>
	</xs:element>
	<xs:complexType name="unknownBooleanPermission">
		<xs:simpleContent>
			<xs:extension base="pr:booleanPermission">
				<xs:attribute name="name" type="xs:string" use="required"/>
				<xs:attribute name="ns" type="xs:string" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:element name="provide-unknown-attribute"
type="pr:unknownBooleanPermission"/>
	<xs:element name="provide-all-attributes">
		<xs:complexType/>
	</xs:element>
</xs:schema>

A example document is:
<?xml version="1.0" encoding="UTF-8"?>
   <cr:ruleset xmlns="urn:ietf:params:xml:ns:pres-rules"
    xmlns:pr="urn:ietf:params:xml:ns:pres-rules"
    xmlns:cr="urn:ietf:params:xml:ns:common-policy">
    <cr:rule id="a">
     <cr:conditions>
      <cr:identity>
       <cr:one id="sip:user at example.com"/>
      </cr:identity>
     </cr:conditions>
     <cr:actions>
      <pr:sub-handling>allow</pr:sub-handling>
     </cr:actions>
     <cr:transformations>
      <pr:provide-services>
        <pr:service-uri-scheme>sip</pr:service-uri-scheme>
        <pr:service-uri-scheme>mailto</pr:service-uri-scheme>
      </pr:provide-services>
      <pr:provide-persons>
        <pr:all-persons/>
      </pr:provide-persons>
      <pr:provide-activities>true</pr:provide-activities>
      <pr:provide-user-input>bare</pr:provide-user-input>
       <pr:provide-unknown-attribute
        ns="urn:vendor-specific:foo-namespace"
        name="foo">true</pr:provide-unknown-attribute>
     </cr:transformations>
    </cr:rule>
   </cr:ruleset>

You can see that the root element is from common-policy schema, but
some extentions is defined in pres-rules schema. I don't know how xsd
handles this situation. Would you give me some hints? Thanks a lot!

Best Regards,
Nich




More information about the xsd-users mailing list