2014-07-17 3 views
0

몇 가지 공급 업체에서 제공 한 XML 스키마가 있습니다. 여기에 그들이있다 :XSD에서 대상 네임 스페이스가 무시됩니다.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="C" targetNamespace="C"> 

    <xs:element name="BroadsoftDocument" type="OCIMessage"/> 

    <xs:complexType name="OCIMessage"> 
    <xs:sequence> 
     <xs:choice> 
     <xs:element name="sessionId" type="xs:normalizedString"/> 
     <xs:element name="userId" type="xs:token"/> 
     <xs:element name="phoneNumber" type="xs:token"/> 
     </xs:choice> 
     <xs:element name="command" type="OCICommand" minOccurs="1" maxOccurs="15"/> 
    </xs:sequence> 
    <xs:attribute name="protocol" use="required"> 
     <xs:simpleType> 
     <xs:restriction base="xs:NMTOKEN"> 
      <xs:enumeration value="OCI"/> 
      <xs:enumeration value="NSOCI"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:attribute> 
    </xs:complexType> 

    <xs:complexType name="OCICommand" abstract="true"> 
    <xs:sequence> 
    </xs:sequence> 
    <xs:attribute name="echo" type="xs:string" use="optional"/> 
    </xs:complexType> 

    <xs:complexType name="OCIRequest" abstract="true"> 
    <xs:complexContent> 
     <xs:extension base="OCICommand"> 
     <xs:sequence> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

</xs:schema> 

여기

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:core="C" attributeFormDefault="qualified" elementFormDefault="qualified"> 

    <xs:simpleType name="UserId"> 
    <xs:restriction base="xs:token"> 
     <xs:minLength value="1"/> 
     <xs:maxLength value="161"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

내가이에 따라 만든 내 XML 문서입니다

<xs:schema xmlns:xs    = "http://www.w3.org/2001/XMLSchema" 
      xmlns:core   = "C" 
      xmlns    = "" 
      attributeFormDefault = "qualified" 
      elementFormDefault = "qualified"> 

    <xs:import namespace  = "C" 
      schemaLocation = "OCISchemaBASE.xsd"/> 

    <xs:complexType name="AuthenticationRequest"> 
    <xs:complexContent> 
     <xs:extension base="core:OCIRequest"> 
     <xs:sequence> 
      <xs:element name="userId" type="UserId"/> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType>  

</xs:schema> 

을 OCISchemaDataTypes.xsd OCISchemaLogin.xsd OCISchemaBASE.xsd 스키마 :

<?xml version="1.0" encoding="ISO-8859-1"?> 
<BroadsoftDocument 
    protocol="OCI" xmlns="C" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
> 
    <sessionId xmlns="">1405499871130</sessionId> 
    <command xsi:type="AuthenticationRequest" xmlns=""> 
     <userId>[email protected]</userId> 
    </command> 
</BroadsoftDocument> 

내가 xmllint가와 스키마에 대한이 문서의 유효성을 검사 할 다음 유효성 검사가 occures 실패 :

$ xmllint --noout --schema OCISchemaLogin.xsd --schema OCISchemaBASE.xsd --schema OCISchemaDataTypes.xsd ./AuthenticationRequest.xml 
./AuthenticationRequest.xml:3: namespace warning : xmlns: URI C is not absolute 
    protocol="OCI" xmlns="C" 
          ^
Element '{C}BroadsoftDocument': No matching global declaration available for the validation root. 
./AuthenticationRequest.xml fails to validate 

BroadsoftDocument 요소가 OCISchemaBASE.xsd의 대상 네임 스페이스 선언에도 불구하고 C 네임 스페이스에 있지를?

동일한 질문은 OCIMessage 유형의 sessionId 요소에 관한 것입니다.

답변

0

XML 프로세서가 XML 용 XSD를 어디에서 찾을 수 있는지 알려줘야합니다. 그렇게 할

한 가지 방법은 루트 BroadsoftDocument 요소에 schemaLocation를 추가하는 것입니다 :

<BroadsoftDocument 
    xsi:schemaLocation="C OCISchemaBASE.xsd" 
    [...] 

참고 또한 경고 메시지,

./AuthenticationRequest.xml:3: namespace warning : xmlns: URI C is not absolute 
    protocol="OCI" xmlns="C" 

이라고 때문에 당신의 지나치게 단순화 된 네임 스페이스, C, 상대 URI로 해석되고 있습니다.이 URI는 deprecated :

The use of relative URI references, including same-document references, 
in namespace declarations is deprecated.