Trong việc thiếu các triển khai XPath 2.0 miễn phí tốt cho .Net xây dựng dựa trên LINQ to XML Tôi đã nghĩ về việc triển khai thực hiện của riêng mình (cũng cho kinh nghiệm). Nhưng chỉ để được rõ ràng (và không phải xây dựng một cái gì đó mà tồn tại) đó là những 2.0 triển khai XPath tôi đã tìm thấy:Các bước và sự tham gia của việc thực hiện một trình phân tích cú pháp (trong .Net - và trong trường hợp này là XPath 2.0)
- Saxon Net
- Query Machine - Tôi đã có vấn đề với điều này - ngoại lệ với các ví dụ
- XQSharp - có thể tốt, nhưng là thương mại (một nhà phát triển đơn lẻ ~ 300 $)
Bây giờ, tôi muốn một số ý tưởng về việc triển khai một số ngôn ngữ như XPath 2.0 khó khăn như thế nào. Tôi đã tìm thấy liên kết này có biểu thức EBNF cho biểu thức XPath 2.0: http://www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammar và tôi đang nghĩ đến việc tạo nó trong F # với kết hợp fslex/fsyacc.
Nền của tôi (chủ quan): Tôi đã từng chơi với những công cụ này trước đây, nhưng chỉ cho một số biểu thức đơn giản và ngôn ngữ lập trình rất đơn giản. Hơn nữa, tôi đã đọc hầu hết các cuốn sách Dragon và thực hiện trình biên dịch hiện đại của Appel trong ML - nhưng thật không may, tôi đã không đưa lý thuyết vào thực tế trong khi đọc. Tôi đã nghiên cứu khoa học máy tính trong một năm, nơi tôi đã hoàn thành các khóa học với lý thuyết về ví dụ: finite automaton
, CFL
và các thuật toán nhưng tôi đã là nhà phát triển nhiều năm trước đại học (một vài năm với công việc chuyên nghiệp - back-end của các trang web chủ yếu).
Bây giờ, các bước phân tích và những gì tôi có xu hướng bao gồm:
- Lex - Parsing - Giảm: FsLex/FsYacc. Lần đầu tiên tôi sẽ không bao gồm TẤT CẢ của Xpath 2.0 nhưng ít nhất tất cả những gì XPath 1.0 có thể làm + nhiều hơn một chút.
- phân tích Sematic - Tôi không chắc chắn về bao nhiêu đó là
- Tối ưu hóa này - Tôi không có xu hướng để trang trải này (ít nhất là không lúc đầu)
- traversing thực tế, vv
- ... ?
Bây giờ, câu hỏi bê tông ngoài trên:
- Làm thế nào khó khăn là nó để thực hiện một phân tích cú pháp của kích thước này? dựa trên nền của tôi, tôi có thể làm được không?
- Có bất kỳ bước quan trọng nào tôi đã bỏ lỡ liên quan đến XPath 2.0 nói riêng không?
- Có công nghệ nào tôi đã bỏ lỡ hay không; Tôi có phải bao gồm nhiều hơn XPath 2.0 và
XDocument
, v.v. để có thể làm cho trình phân tích cú pháp không?
Để được rõ ràng: Tôi muốn thực hiện một XPath 2.0 biểu phân tích cú pháp và đi qua XDocument
, vv với điều này phân tích cú pháp biểu hiện. Mà tôi đoán kết hợp là một công cụ truy vấn.
Cập nhật: Tôi tìm thấy điều này: http://www.w3.org/2007/01/applets/xpathApplet.html chứa mã để phân tích cú pháp và truyền tải.Tôi nghĩ rằng đó sẽ là một khởi đầu tốt đẹp hoặc tham khảo :-)
Câu trả lời của bạn sẽ được đánh giá cao.
Tôi thực sự không hiểu câu hỏi của bạn. XPath là một ngôn ngữ truy vấn. Nó không cần trình phân tích cú pháp, nó cần một tài liệu XML được định dạng đúng với lược đồ. Lược đồ XML là những gì xác định cấu trúc của XML, do đó, có hiệu lực, đó sẽ là 'yacc' của bạn cho XML. Điều đó nói rằng, NET tất cả hỗ trợ này. Tôi thấy không cần phải tái phát minh ra bánh xe ở đây. – leppie
@leppie Tôi có thể không rõ ràng trong việc sử dụng các thuật ngữ của tôi. Tôi muốn phân tích cú pháp '// pf: * [@ name = 'some']/@ *' vì vậy nó là một trình phân tích cú pháp biểu thức XPath 2.0 mà tôi muốn thực hiện. –
@lasseespeholt: Nhưng tại sao? Công cụ truy vấn XPath 2 (mà tôi tin là các truy vấn được biên dịch) không hoạt động? Hay bạn muốn sử dụng qeuries nhỏ 'dsl' của bạn? – leppie