2014-02-17 2 views
1

지난 10 일 내 문제의 해결책을 찾으려고 노력했지만 아무 것도 발견하지 못했습니다. 그래서 SAML 2.0의 인증 컨텍스트 XML 스키마 정의를 제한하려고합니다. XSD 문서는 http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-types-2.0.xsd에서 액세스 할 수 있습니다.SAML 2.0 인증 컨텍스트의 XSD를 제한하는 방법

<xs:complexType name="PasswordType"> 
    <xs:sequence> 
    <xs:element ref="Length" minOccurs="0"/> 
    <xs:element ref="Alphabet" minOccurs="0"/> 
    <xs:element ref="Generation" minOccurs="0"/> 
    <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
</xs:complexType> 
<xs:element name="RestrictedPassword" type="RestrictedPasswordType"/> 
<xs:complexType name="RestrictedPasswordType"> 
    <xs:complexContent> 
    <xs:restriction base="PasswordType"> 
     <xs:sequence> 
     <xs:element name="Length" type="RestrictedLengthType" minOccurs="1"/> 
     <xs:element ref="Generation" minOccurs="0"/> 
     <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
     <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
    </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

글쎄, 내가 RestrictedPassword 복잡한 유형을 제한하는 방법을 모른다 :

내가 제한하려고 부분은 XSD 문서의이 부분에 관한 것입니다. 아래는 원래의 XSD 문서를 제한하려고 시도하는 나의 XSD입니다.

<?xml version="1.0" encoding="UTF-8"?> 

<xs:schema version="2.0" 
     targetNamespace="urn:m:SAML:2.0:ac:classes:K" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns="urn:m:SAML:2.0:ac:classes:K"   
     finalDefault="extension" 
     blockDefault="substitution"> 

<xs:redefine schemaLocation="http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-types-2.0.xsd">  

    <xs:complexType name="RestrictedPasswordType"> 
     <xs:complexContent> 
      <xs:restriction base="RestrictedPasswordType"> 
       <xs:sequence> 
        <xs:element ref="Length" minOccurs="0"/> 
        <xs:element ref="Generation"/> 
        <xs:element ref="Extension" minOccurs="0" maxOccurs="unbounded"/> 
       </xs:sequence> 
       <xs:attribute name="ExternalVerification" type="xs:anyURI" use="optional"/> 
      </xs:restriction> 
     </xs:complexContent> 
    </xs:complexType> 

</xs:redefine>  
</xs:schema> 

나는 그것이 내가 해결하는 방법을 모르는 나에게 오류를 반환 http://www.utilities-online.info/xsdvalidation/#.UwJAzK69h31이 툴이 XSD 유효성을 검사 할

. 이것은 오류입니다 :

Not valid. Error - Line 12, 51: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 51; rcase-Recurse.2: There is not a complete functional mapping between the particles. Error - Line 12, 51: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 51; derivation-ok-restriction.5.4.2: Error for type 'RestrictedPasswordType'. The particle of the type is not a valid restriction of the particle of the base. 

어떤 도움을 환영합니다.

감사합니다. 도메네크, 말론

답변

0

새로운 제한된 유형의 모든 인스턴스

는 기본 유형에 대한 유효해야합니다. 하지만 스키마에서 Length 특성 (minOccurs="0")이없는 RestrictedPasswordType을 정의 할 수 있습니다. 이는 기본 형식 에 대해 유효하지 않습니다. 요소를 선택적으로 만드는 것은 기본 유형의 제한이 아닙니다.

Generation에서 제거하는 것은 괜찮습니다. 하나 이상의 요소가 인 것은입니다.

또한 제한 사항은 Length 요소를 참조합니다.이 요소는 기본 형식으로 정의 된 Length 요소와 다릅니다. Length 요소는 기본 스키마에 따라 LengthType이고 기본 형식의 Length 요소는 LengthType의 제한 인 RestrictedLengthType입니다.

<xs:element name="Length" type="RestrictedLengthType" minOccurs="1"/> 

다른 문제가없는 한이 작동해야합니다

나는 당신이 당신의 파생 형에 <xs:element> 선언을 변경하는 경우 믿습니다.

EDIT : 다른 문제 : "qualified" 다르게는 targetNamespace의 일부가 될 것이며, 제한이 실패로

새로운 요소 Length<complexType> 블록으로 선언되고 있으므로, 그것을 선언해야 . 당신도 할 수있는이 문제를 해결하려면 :

  • <xs:element name="Length" ... />form="qualified" 속성을 추가하거나
  • elementFormDefault="qualified" attribute to the`요소를 추가합니다.여기

더 많은 정보 : 재정의에 대한 제약에 대해

+0

안녕, 난 당신과 동의합니다. 제안 된대로 XSD를 변경했는데 다음과 같이 오류가 있습니다 (이전과 같은 오류입니다). 유효하지 않습니다. 오류 - 12 번째 줄, 51 : org.xml.sax.SAXParseException; lineNumber : 12; columnNumber : 51; rcase-Recurse.2 : 입자 사이에 완전한 기능 매핑이 없습니다. 오류 - 12 번째 줄, 51 : org.xml.sax.SAXParseException; lineNumber : 12; columnNumber : 51; derivation-ok-restriction.5.4.2 : 'RestrictedPasswordType'유형의 오류입니다. 해당 유형의 입자가 기본 입자의 유효한 제한 사항이 아닙니다. – marloncdomenech

+0

위에서 링크 한 기본 문서는'targetNamespace'를 선언하지 않습니다. 그러나 파생 된 스키마에서 하나를 선언합니다. 다시 정의 된 스키마는 기본 스키마와 동일한'targetNamespace'를 가져야합니다. 여러분의 스키마에서'xmlns'와'targetNamespace' 속성을 제거해보십시오. – helderdarocha

+0

효과가있었습니다. 나는'xmlns'과'targetNamespace'를 없애고 작동했다. 그러나 원본과는 다른'xmlns'와'targetNamespace '를 정의하는 유사한 문서가 있으며 유효합니다. 다음은 그 예입니다 : [http://docs.oasis-open.org/security/saml/v2.0/saml-schema-authn-context-nomad-telephony-2.0.xsd. 왜 그런지 알아? – marloncdomenech