2014-06-18 7 views
0

전체 제목이 제목에 있습니다. 특정 IDREF를 DTD의 특정 ID에 할당 할 수 있습니까? 나는 그것이 가능하지 않다고 확신하지만, 여기에서 확인하고 싶습니다 : P다중 ID - 다중 IDREF - 특정 IDREF를 DTD의 고유 ID에 할당 할 수 있습니까?

예. 나는 유형 ID의 속성을 가진 클라이언트와 작업자 요소와 주문하는 클라이언트와 그 주문을받는 작업자를 참조해야하는 두 가지 속성을 가진 "주문"요소를 가지고있다. DTD에서 단순화 된 코드 :

<!ELEMENT worker (name, salary, employmDate)> 
<!ATTLIST worker worker_id ID #REQUIRED subordinates IDREFS #IMPLIED> 

<!ELEMENT client (name)> 
<!ATTLIST client client_id ID #REQUIRED> 

<!ELEMENT order (price, date)> 
<!ATTLIST order cl_id IDREF #REQUIRED wrkr_id IDREF #REQUIRED> 

코드 오류가 유효성을 검사 할 때, 나는 노동자와 고객을위한 ID 값을 사용해야하고 근로자를위한 "부하"인수 노동자의 ID를 추가 할 수 없습니다, 제대로 작동합니다.

그러나 클라이언트 ID를 하위로 쓸 수도 있고 주문 요소의 경우 클라이언트 ID 값 "wrkr_id"와 작업자 ID "cl_id"를 사용할 수 있습니다. 한 종류의 ID 만 허용하도록 IDREF를 제한하는 방법이 있습니까? 또는 ID 속성에 제약 조건을 두어 근로자 ID를 예 : 'w'와 고객의 ID는 예 : "c"는 적어도 부분적으로이 문제를 해결할 것입니까?

을 입력하십시오. DTD 이외의 다른 솔루션을 제안하지 마십시오. 가능하다면 DTD에서 처리하기를 원합니다. 이는 내 과정에 대한 과제이므로 가능하면 DTD에서 수행해야합니다.

감사합니다.

답변

2

SGML 및 XML DTD에서 IDREF가 유효성 검사 대상이되는 ID 풀은 평탄하고 미분합니다. 따라서 'wrkr_id'의 IDREF가 IDREF를 참조하도록 DTD를 작성할 방법이 없습니다. ID는 작업자에게, 'client_id'는 클라이언트를 나타냅니다.

실제로 ID와 IDREFS 사용자 (TeX 및 기타 문서 처리 도구의 유사한 구문)는 'cl'이있는 모든 클라이언트 ID와 'wk'가있는 모든 작업자 ID를 시작하는 것과 같은 규칙을 사용하면 도움이되는 경우가 많습니다. XSLT, XQuery 또는 원하는 모든 문서 처리 도구를 사용하여 모든 ID와 IDREF에 적절한 접두사가 있는지 쉽게 확인할 수 있습니다.

유효성 검사가 정확성을 보장 할 수 있도록 스키마 언어에 대한 추가 검사 수준을 이동하면 XSD에서 키와 키 참조의보다 복잡한 구조에 대한 동기 중 하나가 될 수 있습니다 (비트 일반화). Schematron과 XSD의 주장 1.1.