2011-04-22 3 views
3

xsl : key 및 xpath 함수 key() 및 id()를 사용하여 XSL 변환에 XMLSchema 내에서 ID/IDREFS를 사용해야하는 방법은 무엇입니까? 나는 다음과 같은 DTD를 사용하는 경우XML 스키마에서 ID/IDREFS 사용

모두

<!ELEMENT role EMPTY> 
<!ATTLIST role 
    name ID #REQUIRED> 
<!ELEMENT usecases (usecase)+> 
<!ELEMENT usecase EMPTY> 
<!ATTLIST usecase 
    roles IDREFS #REQUIRED 
    name CDATA #REQUIRED> 

내가 XSL 정의 할 수 있습니다 괜찮 : 키를 키()와 ID를 (사용) 성공적으로 XPath 함수

<xsl:key name="usecase2role" match="usecase" use="id(@roles)/@name" /> 
<xsl:template match="role"> 
    <xsl:apply-templates select="key('usecase2role', @name)" mode="byrole"> 
     <xsl:with-param name="roleName" select="@name"/> 
    </xsl:apply-templates> 
</xsl:template> 
<xsl:template match="usecase" mode="byrole"> 
    <xsl:param name="roleName"/> 
insert into permission(roleId, usecaseId) values (<xsl:value-of select="$roleName"/>, <xsl:value-of select="@name"/>); 
</xsl:template> 

하지만 마이그레이션하는 경우 내 DTD를 XMLSchema로 변환하면 같은 XSL 변환으로 빈 문서가 생성됩니다.

<xsd:complexType name="role"> 
    <xsd:attribute name="name" type="xsd:ID" use="required"/> 
</xsd:complexType> 
<xsd:complexType name="usecase"> 
    <xsd:attribute name="name" use="required"/> 
    <xsd:attribute name="roles" use="required" type="xsd:IDREFS"/> 
</xsd:complexType> 

ID/IDREFS의 사용법이 잘못되어 XML 키로 변경해야합니까? 그러나 XML 키워 드 (XML keyrefs)와 같은 것이 없기 때문에 많은 마이그레이션이 가능합니까?

종류는 아직이 기능을 사용하지 않은 도미니크

+0

질문 샘플에서 스키마에 'usecases' 요소의 정의가 누락 된 이유는 무엇입니까? –

답변

2

에게 안부하지만 keykeyref를 사용하여 Defining Keys & their References에 따르면 IDREF를 통해 권장되는 방법이 될 것으로 보인다. 가공 량 요소 대응 부분의 설명이 있는지

보장하기 위해서는 이러한 요소 ( <selector xpath="r:regions/r:zip/r:part"/>)의 number 속성 ( <field xpath="@number"/>)는 pNumKey 키를 참조해야한다는 것을 말한다. 이 number 선언은 keyref으로 그 값이 고유해야 함을 의미하지 않지만 동일한 값을 가진 pNumKey이 있어야 함을 의미합니다.

관련 문제