2014-11-23 4 views
0

user/url이 기본 키로 선언되었습니다. 그러나 유효성 검사기는 여전히 동일한 URL 값을 받아들입니다. 내가 뭘 놓치고 있니?XML 기본 키 제약 조건이 작동하지 않습니다.

기본 키 제약 조건을 지정하는 다른 방법이 있습니까? 또는 xsd에 대한 나의 이해가 불충분합니까?

감사

내 XML :

<?xml version="1.0"?> 

<user_list xmlns="http://www.cse532.com" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.cse532.com schema.xsd"> 


<user> 
    <name>Bob</name> 
    <url>http://www.cse532.com/bob</url> 
    <work_history> 
     <company>Stony Brook</company> 
     <from_date>2013-08-01</from_date> 
     <to_date>2013-12-31</to_date> 
    </work_history> 
    <work_history> 
     <company>Microsoft</company> 
     <from_date>2014-01-01</from_date> 
     <to_date>2014-12-31</to_date> 
    </work_history> 
    <skills> 
     <skill>Programming</skill> 
    </skills> 
    <endorsements> 
     <url>http://www.cse532.com/alice</url> 
     <skill>Programming</skill> 
    </endorsements> 
    <endorsements> 
     <url>http://www.cse532.com/alice</url> 
     <skill>Instructor</skill> 
    </endorsements> 
    <endorsements> 
     <url>http://www.cse532.com/carol</url> 
     <skill>Programming</skill> 
    </endorsements> 
</user> 

<user> 
    <name>Bob</name> 
    <url>http://www.cse532.com/bob</url> 
    <work_history> 
     <company>Stony Brook</company> 
     <from_date>2013-08-01</from_date> 
     <to_date>2013-12-31</to_date> 
    </work_history> 
    <work_history> 
     <company>Microsoft</company> 
     <from_date>2014-01-01</from_date> 
     <to_date>2014-12-31</to_date> 
    </work_history> 
    <skills> 
     <skill>Programming</skill> 
    </skills> 
    <endorsements> 
     <url>http://www.cse532.com/alice</url> 
     <skill>Programming</skill> 
    </endorsements> 
    <endorsements> 
     <url>http://www.cse532.com/alice</url> 
     <skill>Instructor</skill> 
    </endorsements> 
    <endorsements> 
     <url>http://www.cse532.com/carol</url> 
     <skill>Programming</skill> 
    </endorsements> 
</user> 

내 XSD :

<!-- Definition of simple elements. --> 
<xs:element name="name" type="xs:string"/> 
<xs:element name="url" type="xs:string"/> 
<xs:element name="company" type="xs:string"/> 
<xs:element name="from_date" type="xs:string"/> 
<xs:element name="to_date" type="xs:string"/> 
<xs:element name="skill" type="xs:string"/> 

<!-- Definition of complex elements. --> 
<xs:element name="work_history"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="company"/> 
      <xs:element ref="from_date"/> 
      <xs:element ref="to_date"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="skills"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="skill"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="endorsements"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="url"/> 
      <xs:element ref="skill"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="user"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="name" maxOccurs="1"/> 
      <xs:element ref="url"/> 
      <xs:element ref="work_history" minOccurs="0" maxOccurs="unbounded"/> 
      <xs:element ref="skills" minOccurs="0" maxOccurs="unbounded"/> 
      <xs:element ref="endorsements" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<!-- "user_list" is the root element of this schema. --> 
<xs:element name="user_list"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="user" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    <!-- Primary key and foreign key definitions. --> 
    <xs:key name="PKuser_url"> 
     <xs:selector xpath="user"/> 
     <xs:field xpath="url"/> 
    </xs:key> 
    <xs:key name="PKwork_history"> 
     <xs:selector xpath="user/work_history"/> 
     <xs:field xpath="company"/> 
     <xs:field xpath="from_date"/> 
    </xs:key> 
    <xs:key name="PKskills"> 
     <xs:selector xpath="user/skills"/> 
     <xs:field xpath="skill"/> 
    </xs:key> 
    <xs:key name="PKendorsements"> 
     <xs:selector xpath="user/endorsements"/> 
     <xs:field xpath="url"/> 
     <xs:field xpath="skill"/> 
    </xs:key> 
    <xs:keyref name="FKurl" refer="PKuser_url"> 
     <xs:selector xpath="user/endorsements"/> 
     <xs:field xpath="url"/> 
    </xs:keyref> 
    <xs:keyref name="FKskill" refer="PKskills"> 
     <xs:selector xpath="user/endorsements"/> 
     <xs:field xpath="skill"/> 
    </xs:keyref> 
</xs:element> 
</xs:schema> 

답변

1

인스턴스 문서의 기본 네임 스페이스, 그래서 당신의 제약에서 XPath 식을 가지고 (XPath는 = "user", xpath = "url")는 네임 스페이스가없는 요소를 선택하기 때문에 효과가 없습니다.

관련 문제