2016-12-16 5 views
0

내가 그 구조를받을 계획입니다 :xsd-validate는 정확한 속성을 가진 요소입니까?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Document> 
    <property key="DocumentType" value="INV" /> 
    <property key="InvInternalNumber" value="i-1651-84" /> 
    <property key="OtherDynamicProperty" value="yes" /> 
</Document> 

내가 문서 유형을 식별하고 "INV.xsd"

오와 유효성을 검사하는 것, 사업은 송장 "InvInternalNumber"속성이 있어야합니다 말!

그래서 xsd 검증이 가능합니까? "InvInternalNumber"속성이 있습니까?

업데이트 그 XSD는 JaxbContext에 의해 생성되었습니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="Document" type="Document"/> 

    <xs:complexType name="Document"> 
    <xs:sequence> 
     <xs:element name="property" type="property" nillable="true" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="property"> 
    <xs:sequence/> 
    <xs:attribute name="key" type="xs:string"/> 
    <xs:attribute name="value" type="xs:string"/> 
    </xs:complexType> 
</xs:schema> 
+1

그건 아주 기본적인 XML 스키마 유효성 검사 규칙입니까? 스키마 파일에서 "xs : attribute"유효성 검사 규칙을 시도한 적이 있습니까? 이 예제를 확인하십시오. http://www.w3schools.com/xml/schema_example.asp – EventHorizon

+1

설정 한 INV.xsd 스키마를 게시 할 수 있습니까? 나는 당신의 우려가 구조 검증보다 쓰기 규칙이라고 생각합니다. 그래서 우리는 다른 접근법을 사용할 수 있습니다. – potame

+3

XML은 키와 값의 정렬되지 않은 목록입니까? 아니면 알려진 키 목록의 특정 순서를 가정 할 수 있습니까? 아마도이 질문에 대한 대답이 당신에게 효과가 있습니까? http://stackoverflow.com/questions/19543806/xml-schema-how-to-make-sure-one-element-exists-with-a-specific-attribute-value – EventHorizon

답변

3

XSD 1.0은이 작업을 위해 설계되지 않습니다는 요소 이름이 적용되는 유효성 검사 규칙을 결정하는 것으로 가정합니다. 그것을 해결하는 한 가지 방법은

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Document> 
    <DocumentType>INV</DocumentType> 
    <InvInternalNumber>i-1651-84</InvInternalNumber> 
    <OtherDynamicProperty>yes</OtherDynamicProperty> 
</Document> 

에 (XSLT 사용) XML 변환하고 그 유효성을 확인하는 것입니다. (스키마 인식 변환을 사용하고 결과 문서의 유효성을 검사하여 단일 단계로이를 수행 할 수 있습니다.)

유효성 검사 규칙이 요소 이름이 아닌 속성 값 (해당 경우 property/@key)으로 결정되는 경우 XSD 1.1의 새로운 조건부 유형 지정 기능을 사용할 수 있습니다. 이를 통해 property 요소의 유형 (따라서 해당 value 속성의 유형)이 key 속성의 값에 종속됨을 선언 할 수 있습니다.

1

이것이 당신이 InvInternalNumber는 항상 이런 식으로 작업을 수행 할 고정 속성을 사용할 수 있습니다 첫 번째 요소라고 가정 한 경우, 내가 생각 XSD 1.0 수 없습니다 보인다 하지만 불행히도 이것은 유효하지 않습니다.

오류 cos-element-consistent : 'Document'유형의 오류입니다. 이름이 'property'인 여러 요소가 서로 다른 유형으로 모델 그룹에 나타납니다.

따라서 @Dag에서 말하는 유일한 해결책은 link provided의 XSD 1.1입니다.

enter image description here