문제

나는 XML 스키마 주위에 머리를 감싸려고 노력하고 있으며, 내가 알아 내려고하는 한 가지는 요소의 다른 스키마에서 다른 스키마에서 다른 스키마를 지칭하는 관계형 유형 스키마를 수행하는 방법입니다. 나는 XSD : Key and XSD : KeyRef를 보았고 내가 관심있는 종류의 것 같지만 확실하지 않습니다. 처음에는 유형 XS : ID ABD XS : IDREF로 속성을 설정했습니다.

기본적으로 요소가 동일한 파일 또는 다른 파일의 다른 요소를 참조하는 여러 XML 파일이 있습니다. 관계 데이터베이스와 비슷해 보이고 하나를 사용하고 싶지만 요구 사항은 XML 파일 만 사용하는 것이므로 최소한 설정하려고합니다. 약간 관계를 정의하기 위해 XML 주석에 의존하는 것처럼 보이는 무작위 문자열 대신 정신력이 있습니다. 소규모 프로젝트에서 작동하지만 확장 가능하지는 않습니다.

이견있는 사람?

도움이 되었습니까?

해결책

XML 스키마 내에서 여러 XML 문서를 서로 검증 할 수있는 어떤 것도 모릅니다. 에서 xs:id 그리고 xs:key (등) 제약 조건, xpath를 사용하여 제약 조건을 적용합니다. 당신은 갈 수 있습니다 XML 스키마 1 부 : 구조 그리고 예제를 보려면 약간 스크롤하여 이러한 제약 조건을 확인하십시오.

다른 사람을 포함하는 메타 -XML 파일을 정의 할 수있는 기능 (아마도 다른 방법으로는 엔티티 참조로)을 포함한 다음 해당 메타 파일에 스키마를 사용하는 경우 XML 스키마를 사용하여 제약 조건을 적용 할 수 있어야합니다. . 각 XML 파일 유형에 대한 스키마를 정의하는 경우 사소하게 ( xs:import 또는 xs:include) 하나의 XML 파일에 모든 XML 컨텐츠를 포함하는 XML 파일의 메타 스키마를 정의하십시오. 이 메타 스키마는 원하는 제약 조건을 성공적으로 적용 할 수 있습니다.

많은 게시물이있는 Wiki를 검증해야한다고 가정 해 보자, 각 게시물에 저자가 있고 각 의견에 저자가 있고 모든 게시물에 대해 하나의 XML 파일이 있는데, 모든 의견에 대해 하나의 XML 파일이 하나 있습니다. 저자, 그리고 각 게시물이 존재하는 저자와 주석을 사용하고 각 주석이 존재하는 저자 등을 사용하는이 파일 간의 제약을 검증하려고합니다. 다음 세 가지 파일이 있다고 가정 해 봅시다.

파일 /home/username/posts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<posts>
  <post>
    <author name="author1"/>
    <comment id="12345" pos="1"/>
    <comment id="12346" pos="2"/>
    <body>I really like my camera...</body>
  </post>
   ...
</posts>

파일 /home/username/comments.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<comments>
  <comment id="12345" author="kindguy">
    That was a very good post
  </comment>
   ...
</comments>

파일 /home/username/authors.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<authors>
  <author name="kindguy" id="1"/>
  <author name="author1" id="2"/>
   ...
</authors>

내가 제안하는 것은 당신이 사용하여 메타 -xml 파일을 만든다는 것입니다. 엔티티 참조. 예를 들어 다음 XML 파일을 만들 수 있습니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY postfile    SYSTEM "file:///home/username/posts.xml">
<!ENTITY commentfile SYSTEM "file:///home/username/comments.xml">
<!ENTITY authorfile  SYSTEM "file:///home/username/authors.xml">
<root>
  &postfile1;
  &commentfile;
  &authorfile;
</root>

이 메타 -XML 파일 (실제로는 일반적인 오래된 XML 파일 ... "메타"는 XML 센스가 아닌 세 가지 정의 된 XML 파일의 관점에서만) 다음 파일과 정확히 동일하며 XML입니다. 파서는 다음 파일을 진정으로 가지고있는 것처럼 행동합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<root>
  <posts>
    <post>
      <author name="author1"/>
      <comment id="12345" pos="1"/>
      <comment id="12346" pos="2"/>
      <body>I really like my camera...</body>
    </post>
     ...
  </posts>
  <comments>
    <comment id="12345" author="kindguy">
      That was a very good post
    </comment>
     ...
  </comments>
  <authors>
    <author name="kindguy" id="1"/>
    <author name="author1" id="2"/>
     ...
  </authors>
</root>

에서 이것 파일, 개별 파일의 경우 제약 조건을 적용 할 수있는 방법이 없더라도 원하는 제약 조건을 적용하는 XML 스키마를 정의 할 수 있습니다. 모든 XML을 하나의 파일에 "포함"한 XML 엔티티 표기법을 사용하므로 기부 참조에서 XPath를 사용할 수 있습니다.

다른 팁

이 문제는 논의됩니다 http://www.w3.org/tr/2004/rec-xmlschema-1-20041028/structures.html 섹션 3.11.

내가 정확하게 기억한다면 xs:ID 전체 문서 내에서 전 세계적으로 고유 해야하는 반면 xs:key 정의 된 요소에 대해서만 고유해야합니다. 그래서 key/keyref 실제로 PK/FK와 비슷합니다. PK는 하나의 테이블 내에서만 독특해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top