2010-07-13 27 views
5

Làm cách nào để trình bày dữ liệu sau ở định dạng XML?Cách trình bày dữ liệu sau trong XML?

commandA     (a | b | c) 

position = pos [(m | n | o)] 

[space = space] [(m|n|o)]  

[option1] 

[option2 = "Hello"] 

[option3] 

Lưu ý: [] -> biểu thị tùy chọn,

() -> biểu thị bắt buộc

| -> biểu thị bất cứ ai về giá trị

Ví dụ:

commandA a position = 1.0<m> space = 2.0<n> option1 option2="Hello" 

Làm thế nào để có hiệu quả đại diện cho dữ liệu này trong xml?

tôi đã cố gắng một cái gì đó như thế này,

<command name="commandA" position = "position" > 
    <option name="option1"/> 
    <option name="option2" value = "Hello"/> 
    <option name="option3"/> 
</command> 

Nhưng làm thế nào để xử lý các giá trị lệnh tức là a|b|c và vị trí tức là m|n|o?

EDIT: Command: Cú pháp:

commandA (a | b | c) pos = 0 [w | x | y | z] [spa = 0,0 [w | x | y | z]] [ str = "Hello"]

commandA một pos = 0W spa = 0.0z str = "Hello"

tôi đã cố gắng một cái gì đó như thế này,

<command name="commandA"> 
<direction> 
    <direction name="a"/> 
    <direction name="b"> 
    <direction name="c"/> 
</direction> 
<parameter> 
    <position value="pos=0" /> 
    <spacing value="spa=0.0" /> 
    <options> 
     <option name="w"/> 
     <option name="x"/> 
     <option name="y"/> 
     <option name="z"/> 
    </options> 
</parameter> 
<string value="str=" /> 
</command> 

Bất kỳ đề xuất về điều này?

+4

Xem xét việc tạo một XML DTD hoặc lược đồ để hạn chế các thuộc tính nhất định với các giá trị nhất định. DTD dễ viết hơn, schemata linh hoạt hơn. –

+0

Cảm ơn. Tôi đang tìm kiếm một biểu diễn XML đơn giản do các ràng buộc thực hiện. –

+0

DTD là XML được định dạng tốt. DTD thậm chí có thể được đặt trực tiếp trong tệp XML. –

Trả lời

4

Làm thế nào về điều này. Nó kết hợp thẻ hướng dẫn autocompletion, cùng với các thẻ cho DOM lệnh:

<ac:autocomlete> 
    <command> 
    <command-name>commandA</command-name> 
    <separator> </separator> 
    <ac:choice> 
     <command-type>a</command-type> 
     <command-type>b</command-type> 
     <command-type>c</command-type> 
    </ac:choice> 
    <separator> </separator> 
    <pos> 
     <pos-text>pos=</pos-text> 
     <pos-value><ac:match regex="\d+"/></pos-value> 
     <ac:optional> 
      <ac:choice> 
      <pos-unit>w</pos-unit> 
      <pos-unit>x</pos-unit> 
      <pos-unit>y</pos-unit> 
      <pos-unit>z</pos-unit> 
      </ac:choice> 
     </ac:optional> 
    </pos> 
    <ac:optional> 
     <spa-separator> </spa-separator> 
     <spa> 
      <spa-text>spa=</spa-text> 
      <spa-value><ac:match regex="\d+\.\d+"/></spa-value> 
      <ac:optional> 
      <ac:choice> 
       <spa-unit>w</spa-unit> 
       <spa-unit>x</spa-unit> 
       <spa-unit>y</spa-unit> 
       <spa-unit>z</spa-unit> 
      </ac:choice> 
      </ac:optional> 
     </spa> 
    </ac:optional> 
    <ac:optional> 
     <arg-separator> </arg-separator> 
     <arg-name>str=</arg-name> 
     <arg-value><ac:match regex='"[^"]*"'/></arg-value> 
    </ac:optional> 
    </command> 
</autocomlete> 

Mã autocompletion phù hợp với văn bản yếu tố từ ngữ chính xác một lần, trừ khi nó được chứa trong một choice hoặc optional thẻ, làm thay đổi hành vi cho phù hợp. Tôi đã đặt các thẻ tự động điền này vào một không gian tên riêng biệt, để phân tách mã tự động hoàn thành nhận ra, và DOM là gì, mặc dù bạn không phải duy trì một không gian tên riêng nếu bạn không muốn.

Thẻ match khớp/hoàn tất văn bản theo cụm từ thông dụng. Khi xây dựng DOM, các thẻ đối sánh được thay thế bằng văn bản chữ đã được nhập.

Thẻ tự động hoàn thành cho biết cách tự động hoàn thành cách xử lý thẻ con. Tên của các thẻ con là tùy ý và không được tự động hoàn thành, nhưng có thể được sử dụng trong việc xây dựng DOM cho lệnh của bạn mà người dùng đã nhập: khi tự động hoàn thành đã tạo mô hình và tự động hoàn thành thẻ loại bỏ, phần còn lại là một DOM cho lệnh mà người dùng đã nhập.

+0

Cảm ơn mdma về mẫu xml và giải thích chi tiết. –

3
<command value="a"> 
    <position type="m">1.0</position> 
    <space type="m">2.0</space> 
    <option1 /> 
    <option2>Hello</option2> 
    <option3 /> 
</command> 

Đó có phải là những gì bạn đang tìm kiếm không? Hay bạn muốn có một DTD?

+0

Cảm ơn. a, b, c và m, n, o được cố định. Làm thế nào để lưu trữ tất cả chúng? Ngoài ra m = 1.0 hoặc m = 2.0 là các giá trị giả. Các giá trị này được lấy từ người dùng. Về cơ bản tôi đang cố gắng hoàn thành tự động dựa trên ngữ cảnh bằng cách sử dụng tệp xml này. –

+2

RP, các nền tảng như nhật thực sẽ thêm tự động hoàn thành và trợ giúp bật lên nếu tệp XML bao gồm hoặc tham chiếu đến DTD với các ràng buộc thích hợp. –

+0

Yup. Nhưng tôi đang phát triển một trình chỉnh sửa tùy chỉnh với hỗ trợ hoàn thành tự động của riêng nó. –

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