2011-01-18 4 views
2

XML 스키마의 고유하고 핵심적인 요소 인 을 특히 선택자 및 필드 요소와 관련하여 이해하려고합니다.Locally Unique?

선택자와 입력란에 대해 분명하지 않아 직선으로 처리해야합니다.

기능 그룹에 나열된 회사의 XML 파일이 있다고 가정합니다. 고유 한 필드 (각 특정 그룹 참조)가있는 각 그룹 내에 요소가 있습니다.

해당 그룹 내에서만 고유 한 각 그룹 내의 각 회사 목록 내에 고유 한 필드를 만들고 싶습니다.

이 내가이 위 특히 어떤 회사의 이름을 참조하려면

<xs:unique id="company_refs" name="company_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company_group_ref"/> 
     <xs:field xpath="company/company_ref"/> 
    </xs:unique> 

을? : 응축 수

<xs:unique id="company_group_refs" name="company_group_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company_group_ref"/> 
    </xs:unique> 

    <xs:unique id="company_refs" name="company_refs"> 
     <xs:selector xpath="root/all_companies/company_group"/> 
     <xs:field xpath="company/company_ref"/> 
    </xs:unique> 

그렇다면? 올바른 있을까, 나는 할 수 있도록하려면

루트/all_companies/company_group [company_group_ref = X1]/기업 [company_ref = X2]/이름

: 이 같은 XPath 식을 줄

여기서 x1은 회사 그룹의 고유 참조입니다.
및 : x2 = 해당 그룹 내의 회사에 대한 고유 참조.

는 다음은이 시나리오를 예시하는 XML 파일 발췌 한 것입니다

<all_companies> 

    <company_group> 
     <company_group_name>Cleaning</company_group_name> 
     <company_group_ref>1</company_group_ref> 
     <company> 
      <name>Ajax</name> 
      <company_ref>1</company_ref> 
     </company> 
     <company> 
      <name>Bloomburg</name> 
      <company_ref>2</company_ref> 
     </company> 
     <company> 
      <name>Morris</name> 
      <company_ref>3</company_ref> 
     </company> 
    </company_group> 

    <company_group> 
     <company_group_name>Electrical</company_group_name> 
     <company_group_ref>2</company_group_ref> 
     <company> 
      <name>Armstrong</name> 
      <company_ref>1</company_ref> 
     </company> 
     <company> 
      <name>Bloomburg</name> 
      <company_ref>2</company_ref> 
     </company> 
     <company> 
      <name>Zap Electrical</name> 
      <company_ref>3</company_ref> 
     </company> 
     <company> 
      <name>Morris</name> 
      <company_ref>4</company_ref> 
     </company> 
    </company_group> 

</all_companies> 

감사합니다!

답변

1

group_refs의 고유성을 요구하는 제약 조건은 정확합니다. 제약 "는 company_group 내" "모든 회사를 선택"을 할 것을 요구하고 "company_ref는"그 (것)들의 사이에서 고유로 그룹 내에서 고유 company_refs가 읽기이

<xs:element name="company_group"> 
    <xs:unique name="company_unique_within_group"> 
    <xs:selector xpath="company"> 
    <xs:field xpath="company_ref"> 
    </xs:unique> 
    ... 
</xs:element> 

처럼 읽어야 확인합니다.

귀하의 company_ref 제약 조건은 "전체적으로" "모든 company_groups에 대해" "company/company_ref가 고유해야 함"을 요구합니다.

응집 된 제약 조건은 "전 세계적으로" "모든 company_groups에 대해" "company_group_ref와 company/company_ref의 조합은"고유해야합니다. "그룹마다 여러 company_refs가 실제로 있다고 가정하면 후자 둘은 무의미한.

+0

안녕 마틴! 응답 및 답변 주셔서 감사합니다. – user304607

관련 문제