2010-11-19 31 views
5

Tôi có tệp XML nơi tôi có thuộc tính có giá trị sẽ là XPath để định vị nội dung trong một tập hợp tệp XML khác.Định nghĩa kiểu lược đồ XML cho các giá trị XPath?

Ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="/html/head/title"/> 
</Root> 

Tập tin này có thể được xác nhận chống lại một XSD. Hiện tại tôi chỉ xác nhận rằng giá trị của thuộc tính là một chuỗi, nhưng tôi muốn kiểm tra xem nó có phải là giá trị XPath hợp lệ hay không.

Có định nghĩa Lược đồ XML cho các giá trị XPath không?

+1

Perez: RegExp và XPath Grammar không khớp. –

Trả lời

3

Không có loại dữ liệu XSD cho biểu thức XPATH.

Điều tốt nhất bạn có thể làm là sử dụng xsd:restriction với một xsd:pattern sử dụng mẫu regex để xác thực rằng giá trị chuỗi là biểu thức XPATH.

Something như thế này:

<xsd:simpleType name="XPathValueType"> 
    <xsd:restriction base="xsd:string"> 
    <xsd:pattern value="**PUT IN SOME REGEX PATTERN TO VERIFY THE STRING IS AN XPATH EXPRESSION**"/> 
    </xsd:restriction> 
</xsd:simpleType> 

Tôi không nhận thức được một mô hình regex mà sẽ xác nhận rằng một chuỗi cho trước là một biểu thức XPath để tham khảo.

0

Tôi nghi ngờ xpath là dữ liệu chứ không phải XML. Thông số kỹ thuật ở đây: ht tp://www.w3.org/TR/xpath/

+0

Tại sao không? và biểu thức xpath là "thông tin" quá? :) – redben

+0

xpath không được thể hiện ở định dạng XML, do đó sẽ không có lược đồ XML. –

+0

Vẫn có thể triển khai mẫu phù hợp với cú pháp xpath đúng không? redben

0

Bạn có thể sử dụng anyURI với một số mô hình, và XPointer

XPointer dụ:

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <IterestingNode Value="doc.xml#xpointer(/html/head/title)"/> 
</Root> 
0

Cuối cùng, câu trả lời được cung cấp bởi redben là câu trả lời đúng (thực sự tôi đã thấy nó tuyên bố, và tôi tin rằng xslt không thể được hiển thị bằng x2), nhưng tôi muốn thu hút sự chú ý đến xslt xsd có định nghĩa xsd sau cho biểu thức xpath:

<xs:simpleType name="expression"> 
    <xs:annotation> 
     <xs:documentation> 
      An XPath 2.0 expression. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:restriction base="xs:token"> 
     <xs:pattern value=".+"/> 
    </xs:restriction> 
</xs:simpleType> 

Trong khi tôi nhận ra câu hỏi này đã không hoạt động trong một thời gian dài, tôi nghĩ điều này có thể mang tính hướng dẫn đối với bất kỳ ai khác sẽ xảy ra đối tượng này.

Các vấn đề liên quan