2014-12-11 13 views
7

master.xsd: processContents: Herhangi

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.gworks.cn/waf_profile" 
    xmlns:tns="http://www.gworks.cn/waf_profile" elementFormDefault="qualified"> 
    <element name="profile"> 
     <complexType> 
      <sequence> 
       <element name="aspect"> 
        <complexType> 
         <sequence minOccurs="1" > 
          <any processContents="strict" /> 
         </sequence> 
         <attribute name="id" type="string" use="required"></attribute> 
         <attribute name="class" type="string" use="required"></attribute> 
         <attribute name="desc" type="string" use="optional"></attribute> 
        </complexType> 
       </element> 
      </sequence> 
      <attribute name="name" type="string" use="required"></attribute> 
     </complexType> 
    </element> 
</schema> 

böyle bu şemayla XML dosyası yazabilir

:

<?xml version="1.0" encoding="UTF-8"?> 
<profile name="开发" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.gworks.cn/waf_profile" 
    xsi:schemaLocation="http://www.gworks.cn/waf_profile http://www.gworks.cn/waf_profile.xsd"> 
    <aspect id="security" class="cn.gworks.waf.config.SecurityConfig" desc="安全配置"> 
     <security xsi:schemaLocation="http://www.gworks.cn/config_security http://www.gworks.cn/config_security.xsd"> 
      <authService impl="com.bgzchina.ccms.security.SSOAuthService" enabled="true"> 
       <certificate> 
        <field name="Token" isKey="true" /> 
       </certificate> 
      </authService> 
      <authService impl="com.bgzchina.ccms.security.NoAuthService" enabled="true"> 
       <certificate> 
        <field name="username" isKey="true" /> 
       </certificate> 
      </authService> 
     </security> 
    </aspect> 
</profile> 

nereye alt öğe "güvenlik" kendi şeması tanımlanmış. XSD aspect içeriği modelinde

<any processContents="strict" /> 

belirtir Çünkü

cevap

9

, XML, XML işlemci bu, için XSD tanımı elde edebilmek olması gerektiğini gerektiren nedeniyle processContents="strict" için geçersiz durumda, securityve doğrulamak gerekir.

Eğer geçerli olacak

<any processContents="lax" /> 

sizin XML bu değiştirirseniz, ve size XSD security tanımlamak için geliyorsa, tanım doğrulama sırasında kullanılacaktır. (Tanım bulunamazsa, belgenizin hala geçerli olduğu kabul edilir.) Bu , içeriğin XML işlemci tanımını bulabilirse geçerli olmasını gerektirir. Eğer

<any processContents="skip" /> 

bu değiştirirseniz

XML geçerli olur ve XML işlemci doğrulamak için hiçbir girişimde bulunuruz bunun dışında aspect (küçük çocukların içerik bunu gerektiren bazı tek olmak sequence kısıtlamasına göre öğe).

Notlar:

+0

Bu, "güvenlik" öğemde bir xsi: schemaLocation özniteliği belirtmek için geçerli midir? – CaiNiaoCoder

+0

Hayır, yanıtta bahsettiğim gibi 'xsd: import' veya' xsd: include' üzerinde 'xsi: schemaLocation' özniteliğini kullanarak 'güvenlik' bildirgesini içeren XSD'yi ana XSD'nize getirebilirsiniz. – kjhughes

+0

Ancak, kullanıcının keyfi öğenin şemasını belirtmesine izin vermek istiyorum. – CaiNiaoCoder