-- 作者:SYTDeath
-- 发布时间:1/24/2008 1:28:00 AM
-- [求助]关于schema中extensible的问题
问题:extensible文档中的element按照什么逻辑或方法对应源xml文档相关element的hierachy。下例中源文档的/actions和/transformations应用了extensibletype。在extensible文档中,所有的elements are on the top hierachy。我怎样知道(在extensible文档中)哪个element应该对映源文档中的/actions还是/transformations? Thx in advance!! 源xml文档(rfc5025): <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="urn:ietf:params:xml:ns:common-policy" xmlns:cp="urn:ietf:params:xml:ns:common-policy" xmlns:xs="http://www.w3.org/2001/XMLSchema" 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"/> Schulzrinne, et al. Standards Track [Page 22] RFC 4745 Common Policy February 2007 <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 minOccurs="1" 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" minOccurs="0" processContents="lax"/> </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" minOccurs="0" processContents="lax"/> </xs:choice> <xs:attribute name="domain" use="optional" type="xs:string"/> </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 minOccurs="1" 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> Extensible XML文档(rfc4745): <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="urn:ietf:params:xml:ns:pres-rules" 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" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:import namespace="urn:ietf:params:xml:ns:common-policy"/> <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>
|