2014-12-23 2 views
1

다음은 내가 풀려고하는 문제입니다. 한 노드가 다른 여러 노드를 참조 할 수있게하고 싶습니다. 이와 같이 :XML 스키마를 사용하면 모든 노드에 선택적 속성을 지정할 수 있습니까?

<ranges> 
     <range localid="0001">2013-05-06</range> 
     <range localid="0010">2014-01-02</range> 
     <range localid="0100">2014-03-09</range> 
     <range localid="1000">2014-11-12</range> 
    </ranges> 

    <speakers> 
     <speaker crossrefs="0011">Sagan</speaker> 
     <speaker crossrefs="1010">Krauss</speaker> 
    </speakers> 

일종의 비트 필드를 사용하면 내 "스피커"노드가 여러 날짜 범위를 참조 할 수 있습니다. 그러나 "스피커"가이 방식으로 상호 참조하기를 원하는 유일한 노드는 아닙니다. 나는 다른 많은 노드와 하위 노드를 가지고 있으며, 스키마에서 생성하는 모든 노드에 "crossrefs"속성을 추가하는 것을 피하고 싶습니다. 스키마는 새로운 요소 유형을 추가 할 때 매우 유동적입니다. xml에 문서의 모든 노드에 대한 선택적 특성으로 "crossrefs"를 선언 할 수있는 것이 있습니까?

이것은 모든 노드에서 xml이 허용하는 "id"속성과 같습니다. 나는 "id"속성이 정의 된 방법을보기 위해 xml 스키마 용 스키마를 보았지만 내가 찾고있는 것과 비슷한 그 어떤 것도 볼 수 없다. 이것을 할 수있는 방법이 있습니까?

나는 이미 XML 상호 참조를 조사해 보았습니다. 크로스 레퍼런스를 이해하는 한 적어도 그 문제는 교차 참조로 작동하는 다른 노드를 갖기 위해 모든 노드에 서브 노드를 추가해야한다는 것입니다. 추한. 이런 종류의 일을 덜 못 생기는 방법이 있습니까?

편집 : 그것은 this 내가 부탁 해요 질문과 동일 할 수 있다는 것,하지만 지금까지 내 머리 내가 정말 동일 여부를 알 수없는입니다

.

+1

XSLT your XSD? * 찡그린 * – user2864740

+0

오, 이런, XSLT? 나는 아무것도 할 수 있기 전에 XML 스키마에서 박사 학위를 받아야 할 것입니다. 하하. – GreatBigBore

+1

그것은 snippity 코멘트였습니다 - 저는 SPS에서 XLST 1의 XSD와 ... 그리고 악몽에 대해서만 아주 친숙했습니다. – user2864740

답변

2

crossrefs 속성을 허용하는 추상 기본 유형을 정의한 다음 확장자를 기준으로 다른 모든 요소 유형을 파생시킵니다.

+0

어떻게하는지 알아내는 데 오랜 시간이 걸렸지 만, 그랬습니다. 올바른 질문을 공식화하는 데 필요한 어휘를 주셔서 감사합니다. – GreatBigBore

+0

미안해 내 대답이 너무 짧았습니다. 12 월 23 일이었습니다. 어쨌든, 저는 사람들을 손에 들고 목적지로 인도하는 것보다 올바른 방향으로 사람들을 인도하는 것을 좋아합니다. –

4

XSD 1.1에서는 전역으로 만들려는 특성이있는 특성 그룹을 정의합니다. 그런 다음 defaultAttributes 속성을 xsd:schema 요소에 제공하고 속성 그룹의 이름을 값으로 사용하십시오.

이 속성 그룹 이름을 my-globals으로 가정합니다. 스키마 문서는 다음과 같이 부분적으로 표시됩니다.

<xsd:schema targetNamespace="http://example.com/global-atts" 
      xmlns:tns="http://example.com/global-atts" 
      defaultAttributes="tns:my-globals" 
      ...> 

    <xsd:attributeGroup name="my-globals"> 
    <xsd:attribute name="crossrefs" ... /> 
    ... 
    </ 

    ... 

</ 

XSD 1.0에서는 Michael Kay가 말합니다. 그것이 가능하지 않다면 최소한 명명 된 속성 그룹을 선언하고 그 속성 그룹을 가져야하는 모든 복합 유형에서 참조하십시오.

+0

나는 나의 야망이 xml과 관련된 나의 기술을 능가하는 것이 아닌가 걱정된다. 당신의 예제에 따라 스키마를 만들었습니다. 그것은 단지 괜찮아 유효합니다. 기본 스키마에 포함 시키면 여전히 유효성이 검사됩니다. 그러나 나는 그 속성을 사용하는 방법을 모른다. 'crossrefs' 또는'tns : crossrefs'라는 속성을 내 노드에 추가하면, 유효성 검사기는 저에게 슬픔을 안겨줍니다. 이것을하는 법을 가르쳐 주시겠습니까? 아니면 자원으로 안내해 주시겠습니까? 정말 고마워. 마이클의 대답과 당신의 대답은 모두 내 머리 위로 드러나지 만, 당신이 나에게 계속 노력하도록 격려 할만큼 충분히 쓸만한 세부 사항을줍니다. 나는 내가 필요로하는 정보를 어디에서 찾을 지 모른다. – GreatBigBore

관련 문제